{"version":3,"sources":["https://lively-kernel.org/lively4/lively4-markus/src/client/reactive/active-expression-rewriting/multi-map.js"],"names":["MultiMap","constructor","_domainToRange","Map","_rangeToDomain","add","key","value","getOrCreate","delete","has","get","remove","rangeToDomain","clear","Set","getKey"],"mappings":";;;;;;;;AAAe,YAAMA,QAAN,CAAe;;AAE5BC,sBAAc;AACZ,eAAKC,cAAL,GAAsB,IAAIC,GAAJ,EAAtB;AACA,eAAKC,cAAL,GAAsB,IAAID,GAAJ,EAAtB;AACD;;AAEDE,YAAIC,GAAJ,EAASC,KAAT,EAAgB;AACd,eAAKC,WAAL,CAAiBF,GAAjB,EAAsBD,GAAtB,CAA0BE,KAA1B;AACD;;AAEDE,eAAOH,GAAP,EAAYC,KAAZ,EAAmB;AACjB,cAAG,CAAC,KAAKG,GAAL,CAASJ,GAAT,CAAJ,EAAmB;AACnB,eAAKK,GAAL,CAASL,GAAT,EAAcG,MAAd,CAAqBF,KAArB;AACD;;AAEDK,eAAON,GAAP,EAAY;AACV,cAAG,CAAC,KAAKI,GAAL,CAASJ,GAAT,CAAJ,EAAmB;AACnB,eAAI,MAAMC,KAAV,IAAmB,KAAKI,GAAL,CAASL,GAAT,CAAnB,EAAkC;AAChC,iBAAKO,aAAL,CAAmBJ,MAAnB,CAA0BF,KAA1B;AACD;AACD,eAAKL,cAAL,CAAoBO,MAApB,CAA2BH,GAA3B;AACD;;AAEDQ,gBAAQ;AACN,eAAKZ,cAAL,CAAoBY,KAApB;AACD;;AAEDJ,YAAIJ,GAAJ,EAAS;AACP,iBAAO,KAAKJ,cAAL,CAAoBQ,GAApB,CAAwBJ,GAAxB,CAAP;AACD;;AAEDK,YAAIL,GAAJ,EAAS;AACP,iBAAO,KAAKJ,cAAL,CAAoBS,GAApB,CAAwBL,GAAxB,CAAP;AACD;;AAEDE,oBAAYF,GAAZ,EAAiB;AACf,iBAAO,KAAKJ,cAAL,CAAoBM,WAApB,CAAgCF,GAAhC,EAAqC,MAAM,IAAIS,GAAJ,EAA3C,CAAP;AACD;;AAEDC,eAAOT,KAAP,EAAc;AACZ,eAAKH,cAAL,CAAoBO,GAApB,CAAwBJ,KAAxB;AACD;;AA1C2B;;yBAATP,Q;;;;;;;;6BAAAA,yC","file":"multi-map.js","sourcesContent":["export default class MultiMap {\n\n  constructor() {\n    this._domainToRange = new Map();\n    this._rangeToDomain = new Map();\n  }\n  \n  add(key, value) {\n    this.getOrCreate(key).add(value);\n  }\n  \n  delete(key, value) {\n    if(!this.has(key)) return;\n    this.get(key).delete(value);\n  }\n\n  remove(key) {\n    if(!this.has(key)) return;\n    for(const value of this.get(key)) {\n      this.rangeToDomain.delete(value);      \n    }\n    this._domainToRange.delete(key);\n  }\n\n  clear() {\n    this._domainToRange.clear();\n  }\n\n  has(key) {\n    return this._domainToRange.has(key);\n  }\n  \n  get(key) {\n    return this._domainToRange.get(key);\n  }\n\n  getOrCreate(key) {\n    return this._domainToRange.getOrCreate(key, () => new Set());\n  }\n  \n  getKey(value) {\n    this._rangeToDomain.get(value);\n  }\n  \n}\n"]}