{"version":3,"sources":["https://lively-kernel.org/lively4/lively4-stable/src/client/reactive/active-expression-rewriting/bidirectional-multi-map.js"],"names":["BidirectionalMultiMap","constructor","domainToRange","Map","rangeToDomain","associate","left","right","getRightsFor","add","getLeftsFor","remove","rights","delete","size","lefts","removeAllRightFor","forEach","removeAllLeftFor","clear","has","hasLeft","hasRight","val","getOrCreate","Set","getAllLeft","Array","from","keys","getAllRight"],"mappings":";;;;;;;;AAAe,YAAMA,qBAAN,CAA4B;;AAEzCC,sBAAc;AACZ,eAAKC,aAAL,GAAqB,IAAIC,GAAJ,EAArB;AACA,eAAKC,aAAL,GAAqB,IAAID,GAAJ,EAArB;AACD;;AAEDE,kBAAUC,IAAV,EAAgBC,KAAhB,EAAuB;AACrB,eAAKC,YAAL,CAAkBF,IAAlB,EAAwBG,GAAxB,CAA4BF,KAA5B;AACA,eAAKG,WAAL,CAAiBH,KAAjB,EAAwBE,GAAxB,CAA4BH,IAA5B;AACD;;AAEDK,eAAOL,IAAP,EAAaC,KAAb,EAAoB;AAClB,gBAAMK,SAAS,KAAKJ,YAAL,CAAkBF,IAAlB,CAAf;AACAM,iBAAOC,MAAP,CAAcN,KAAd;AACA,cAAGK,OAAOE,IAAP,KAAgB,CAAnB,EAAsB,KAAKZ,aAAL,CAAmBW,MAAnB,CAA0BP,IAA1B;;AAEtB,gBAAMS,QAAQ,KAAKL,WAAL,CAAiBH,KAAjB,CAAd;AACAQ,gBAAMF,MAAN,CAAaP,IAAb;AACA,cAAGS,MAAMD,IAAN,KAAe,CAAlB,EAAqB,KAAKV,aAAL,CAAmBS,MAAnB,CAA0BN,KAA1B;AACtB;;AAEDS,0BAAkBV,IAAlB,EAAwB;AACtB,eAAKE,YAAL,CAAkBF,IAAlB,EAAwBW,OAAxB,CAAgCV,SAAS,KAAKI,MAAL,CAAYL,IAAZ,EAAkBC,KAAlB,CAAzC;AACD;;AAEDW,yBAAiBX,KAAjB,EAAwB;AACtB,eAAKG,WAAL,CAAiBH,KAAjB,EAAwBU,OAAxB,CAAgCX,QAAQ,KAAKK,MAAL,CAAYL,IAAZ,EAAkBC,KAAlB,CAAxC;AACD;;AAEDY,gBAAQ;AACN,eAAKjB,aAAL,CAAmBiB,KAAnB;AACA,eAAKf,aAAL,CAAmBe,KAAnB;AACD;;AAEDC,YAAId,IAAJ,EAAUC,KAAV,EAAiB;AACf,iBAAO,KAAKc,OAAL,CAAaf,IAAb,KAAsB,KAAKE,YAAL,CAAkBF,IAAlB,EAAwBc,GAAxB,CAA4Bb,KAA5B,CAA7B;AACD;;AAEDe,iBAASC,GAAT,EAAc;AACZ,iBAAO,KAAKnB,aAAL,CAAmBgB,GAAnB,CAAuBG,GAAvB,CAAP;AACD;;AAEDF,gBAAQE,GAAR,EAAa;AACX,iBAAO,KAAKrB,aAAL,CAAmBkB,GAAnB,CAAuBG,GAAvB,CAAP;AACD;;AAEDf,qBAAaF,IAAb,EAAmB;AACjB,iBAAO,KAAKJ,aAAL,CAAmBsB,WAAnB,CAA+BlB,IAA/B,EAAqC,MAAM,IAAImB,GAAJ,EAA3C,CAAP;AACD;;AAEDf,oBAAYH,KAAZ,EAAmB;AACjB,iBAAO,KAAKH,aAAL,CAAmBoB,WAAnB,CAA+BjB,KAA/B,EAAsC,MAAM,IAAIkB,GAAJ,EAA5C,CAAP;AACD;;AAEDC,qBAAa;AACX,iBAAOC,MAAMC,IAAN,CAAW,KAAK1B,aAAL,CAAmB2B,IAAnB,EAAX,CAAP;AACD;;AAEDC,sBAAc;AACZ,iBAAOH,MAAMC,IAAN,CAAW,KAAKxB,aAAL,CAAmByB,IAAnB,EAAX,CAAP;AACD;;AA7DwC;;yBAAtB7B,qB;;;;;;;;6BAAAA,sD","file":"bidirectional-multi-map.js","sourcesContent":["export default class BidirectionalMultiMap {\n\n  constructor() {\n    this.domainToRange = new Map();\n    this.rangeToDomain = new Map();\n  }\n\n  associate(left, right) {\n    this.getRightsFor(left).add(right);\n    this.getLeftsFor(right).add(left);\n  }\n\n  remove(left, right) {\n    const rights = this.getRightsFor(left);\n    rights.delete(right);\n    if(rights.size === 0) this.domainToRange.delete(left);\n    \n    const lefts = this.getLeftsFor(right);\n    lefts.delete(left);\n    if(lefts.size === 0) this.rangeToDomain.delete(right);\n  }\n\n  removeAllRightFor(left) {\n    this.getRightsFor(left).forEach(right => this.remove(left, right));\n  }\n\n  removeAllLeftFor(right) {\n    this.getLeftsFor(right).forEach(left => this.remove(left, right));\n  }\n\n  clear() {\n    this.domainToRange.clear();\n    this.rangeToDomain.clear();\n  }\n  \n  has(left, right) {\n    return this.hasLeft(left) && this.getRightsFor(left).has(right);\n  }\n\n  hasRight(val) {\n    return this.rangeToDomain.has(val);\n  }\n\n  hasLeft(val) {\n    return this.domainToRange.has(val);\n  }\n\n  getRightsFor(left) {\n    return this.domainToRange.getOrCreate(left, () => new Set());\n  }\n\n  getLeftsFor(right) {\n    return this.rangeToDomain.getOrCreate(right, () => new Set());\n  }\n\n  getAllLeft() {\n    return Array.from(this.domainToRange.keys());\n  }\n\n  getAllRight() {\n    return Array.from(this.rangeToDomain.keys());\n  }\n\n}"]}