{"version":3,"sources":["https://lively-kernel.org/lively4/lively4-constraints/src/client/reactive/active-expression-rewriting/bidirectional-multi-map.js"],"names":["BidirectionalMultiMap","constructor","domainToRange","Map","rangeToDomain","associate","left","right","getRightsFor","add","getLeftsFor","remove","delete","removeAllRightFor","forEach","removeAllLeftFor","clear","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,eAAKC,YAAL,CAAkBF,IAAlB,EAAwBM,MAAxB,CAA+BL,KAA/B;AACA,eAAKG,WAAL,CAAiBH,KAAjB,EAAwBK,MAAxB,CAA+BN,IAA/B;AACD;;AAEDO,0BAAkBP,IAAlB,EAAwB;AACtB,eAAKE,YAAL,CAAkBF,IAAlB,EAAwBQ,OAAxB,CAAgCP,SAAS,KAAKI,MAAL,CAAYL,IAAZ,EAAkBC,KAAlB,CAAzC;AACD;;AAEDQ,yBAAiBR,KAAjB,EAAwB;AACtB,eAAKG,WAAL,CAAiBH,KAAjB,EAAwBO,OAAxB,CAAgCR,QAAQ,KAAKK,MAAL,CAAYL,IAAZ,EAAkBC,KAAlB,CAAxC;AACD;;AAEDS,gBAAQ;AACN,eAAKd,aAAL,CAAmBc,KAAnB;AACA,eAAKZ,aAAL,CAAmBY,KAAnB;AACD;;AAEDR,qBAAaF,IAAb,EAAmB;AACjB,iBAAO,KAAKJ,aAAL,CAAmBe,WAAnB,CAA+BX,IAA/B,EAAqC,MAAM,IAAIY,GAAJ,EAA3C,CAAP;AACD;;AAEDR,oBAAYH,KAAZ,EAAmB;AACjB,iBAAO,KAAKH,aAAL,CAAmBa,WAAnB,CAA+BV,KAA/B,EAAsC,MAAM,IAAIW,GAAJ,EAA5C,CAAP;AACD;;AAEDC,qBAAa;AACX,iBAAOC,MAAMC,IAAN,CAAW,KAAKnB,aAAL,CAAmBoB,IAAnB,EAAX,CAAP;AACD;;AAEDC,sBAAc;AACZ,iBAAOH,MAAMC,IAAN,CAAW,KAAKjB,aAAL,CAAmBkB,IAAnB,EAAX,CAAP;AACD;;AA5CwC;;yBAAtBtB,qB","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    this.getRightsFor(left).delete(right);\n    this.getLeftsFor(right).delete(left);\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  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}\n"]}