{"version":3,"file":"index.cjs","sources":["../src/iterableFromMap.js","../src/BasePairs.js","../src/insert.js","../src/remove.js","../src/EfficientlyInvertiblePairs.js","../src/swap.js","../src/invertIterable.js","../src/MemoryEfficientPairs.js"],"sourcesContent":["export default function* iterableFromMap(map) {\n\tfor (const [A, others] of map.entries()) {\n\t\tfor (const B of others.values()) yield [A, B];\n\t}\n}\n","import {map} from '@iterable-iterator/map';\nimport {filter} from '@iterable-iterator/filter';\nimport {NotImplementedError} from '@failure-abstraction/error';\nimport iterableFromMap from './iterableFromMap.js';\n\nexport default class BasePairs {\n\t// Set-like\n\tadd() {\n\t\tthrow new NotImplementedError('BasePairs#add: Not implemented.');\n\t}\n\n\tclear() {\n\t\tthrow new NotImplementedError('BasePairs#clear: Not implemented.');\n\t}\n\n\tdelete() {\n\t\tthrow new NotImplementedError('BasePairs#delete: Not implemented.');\n\t}\n\n\thas([A, B]) {\n\t\treturn this._map.has(A) && this._map.get(A).has(B);\n\t}\n\n\tvalues() {\n\t\treturn iterableFromMap(this._map);\n\t}\n\n\t*entries() {\n\t\tfor (const value of this.values()) yield [value, value];\n\t}\n\n\tkeys() {\n\t\treturn this.values();\n\t}\n\n\t[Symbol.iterator]() {\n\t\treturn this.values();\n\t}\n\n\tforEach(callbackFn, thisArg = this) {\n\t\tfor (const value of this.values()) callbackFn.call(thisArg, value);\n\t}\n\n\t// Custom\n\n\tupdate(pairs) {\n\t\tfor (const pair of pairs) this.add(pair);\n\t\treturn this;\n\t}\n\n\tleft() {\n\t\treturn this._map.keys();\n\t}\n\n\tright() {\n\t\treturn new Set(map((x) => x[1], this.values())).keys();\n\t}\n\n\t*rightOf(A) {\n\t\tif (this._map.has(A)) yield* this._map.get(A);\n\t}\n\n\tleftOf(B) {\n\t\treturn map(\n\t\t\t(x) => x[0],\n\t\t\tfilter((x) => B === x[1], this.values()),\n\t\t);\n\t}\n}\n","export default function insert(map, A, B) {\n\tif (map.has(A)) {\n\t\tmap.get(A).add(B);\n\t} else {\n\t\tmap.set(A, new Set([B]));\n\t}\n}\n","export default function remove(map, A, B) {\n\tif (map.has(A)) {\n\t\tconst right = map.get(A);\n\t\tif (right.delete(B)) {\n\t\t\tif (right.size === 0) map.delete(A);\n\t\t\treturn true;\n\t\t}\n\t}\n\n\treturn false;\n}\n","import BasePairs from './BasePairs.js';\nimport insert from './insert.js';\nimport remove from './remove.js';\n\nexport default class EfficientlyInvertiblePairs extends BasePairs {\n\tstatic from(pairs) {\n\t\tconst set = new EfficientlyInvertiblePairs(new Map(), new Map(), 0);\n\t\treturn set.update(pairs);\n\t}\n\n\t// Set-like\n\n\tconstructor(map, imap, size) {\n\t\tsuper();\n\t\tthis._map = map;\n\t\tthis._imap = imap;\n\t\tthis.size = size;\n\t}\n\n\tadd([A, B]) {\n\t\tif (!this.has([A, B])) {\n\t\t\tinsert(this._map, A, B);\n\t\t\tinsert(this._imap, B, A);\n\t\t\t++this.size;\n\t\t}\n\n\t\treturn this;\n\t}\n\n\tclear() {\n\t\tthis.size = 0;\n\t\tthis._map.clear();\n\t\tthis._imap.clear();\n\t\treturn undefined;\n\t}\n\n\tdelete([A, B]) {\n\t\tif (remove(this._map, A, B)) {\n\t\t\tremove(this._imap, B, A);\n\t\t\t--this.size;\n\t\t\treturn true;\n\t\t}\n\n\t\treturn false;\n\t}\n\n\t// Custom\n\n\tright() {\n\t\treturn this._imap.keys();\n\t}\n\n\t*leftOf(B) {\n\t\tif (this._imap.has(B)) yield* this._imap.get(B);\n\t}\n\n\tinvert() {\n\t\treturn new EfficientlyInvertiblePairs(this._imap, this._map, this.size);\n\t}\n}\n","export default function swap([A, B]) {\n\treturn [B, A];\n}\n","import {map} from '@iterable-iterator/map';\nimport swap from './swap.js';\n\nexport default function invertIterable(iterable) {\n\treturn map(swap, iterable);\n}\n","import BasePairs from './BasePairs.js';\nimport insert from './insert.js';\nimport remove from './remove.js';\nimport invertIterable from './invertIterable.js';\n\nexport default class MemoryEfficientPairs extends BasePairs {\n\tstatic from(pairs) {\n\t\tconst set = new MemoryEfficientPairs(new Map(), 0);\n\t\treturn set.update(pairs);\n\t}\n\n\t// Set-like\n\n\tconstructor(map, size) {\n\t\tsuper();\n\t\tthis._map = map;\n\t\tthis.size = size;\n\t}\n\n\tadd([A, B]) {\n\t\tif (!this.has([A, B])) {\n\t\t\tinsert(this._map, A, B);\n\t\t\t++this.size;\n\t\t}\n\n\t\treturn this;\n\t}\n\n\tclear() {\n\t\tthis.size = 0;\n\t\tthis._map.clear();\n\t\treturn undefined;\n\t}\n\n\tdelete([A, B]) {\n\t\tif (remove(this._map, A, B)) {\n\t\t\t--this.size;\n\t\t\treturn true;\n\t\t}\n\n\t\treturn false;\n\t}\n\n\t// Custom\n\n\tinvert() {\n\t\treturn MemoryEfficientPairs.from(invertIterable(this.values()));\n\t}\n}\n"],"names":["iterableFromMap","map","entries","A","values","B","BasePairs","add","NotImplementedError","clear","delete","has","_map","this","get","value","keys","Symbol","iterator","forEach","callbackFn","thisArg","call","update","pairs","left","right","Set","x","rightOf","leftOf","filter","insert","set","remove","size","EfficientlyInvertiblePairs","imap","_this","_imap","from","Map","invert","swap","invertIterable","iterable","MemoryEfficientPairs"],"mappings":"+nCAAyBA,YAAAA,EAAgBC,wGACdA,EAAIC,mDAAlBC,0BACYC,kDAAU,OAAtBC,mBAA4B,CAACF,EAAGE,GAF9B,oFCKMC,IAAAA,sDAEpBC,IAAA,WACC,UAAUC,sBAAoB,sCAG/BC,MAAA,WACC,UAAUD,sBAAoB,wCAG/BE,OAAA,WACC,UAAUF,sBAAoB,yCAG/BG,IAAA,gBAAKR,OAAGE,OACP,YAAYO,KAAKD,IAAIR,IAAMU,KAAKD,KAAKE,IAAIX,GAAGQ,IAAIN,MAGjDD,OAAA,WACC,OAAOJ,EAAgBa,KAAKD,SAG5BV,gCAAD,0GACqBW,KAAKT,iDAAU,OAAxBW,mBAA8B,CAACA,EAAOA,GADlD,qEAIAC,KAAA,WACC,YAAYZ,YAGZa,OAAOC,UAAR,WACC,YAAYd,YAGbe,QAAA,SAAQC,EAAYC,YAAAA,IAAAA,EAAUR,MAC7B,cAAoBA,KAAKT,yBAAUgB,EAAWE,KAAKD,cAKpDE,OAAA,SAAOC,GACN,cAAmBA,kBAAOX,KAAKN,aAC/B,eAGDkB,KAAA,WACC,YAAYb,KAAKI,UAGlBU,MAAA,WACC,WAAWC,IAAI1B,MAAI,SAAC2B,UAAMA,EAAE,IAAIf,KAAKT,WAAWY,UAGhDa,gCAAD,WAAS1B,sFACJU,KAAKD,KAAKD,IAAIR,mBAAI,uBAAOU,KAAKD,KAAKE,IAAIX,WAD5C,+CAIA2B,OAAA,SAAOzB,GACN,OAAOJ,MACN,SAAC2B,UAAMA,EAAE,IACTG,SAAO,SAACH,UAAMvB,IAAMuB,EAAE,IAAIf,KAAKT,0BCjEV4B,EAAO/B,EAAKE,EAAGE,GAClCJ,EAAIU,IAAIR,GACXF,EAAIa,IAAIX,GAAGI,IAAIF,GAEfJ,EAAIgC,IAAI9B,EAAG,IAAIwB,IAAI,CAACtB,cCJE6B,EAAOjC,EAAKE,EAAGE,GACtC,GAAIJ,EAAIU,IAAIR,GAAI,CACf,IAAMuB,EAAQzB,EAAIa,IAAIX,GACtB,GAAIuB,EAAMhB,OAAOL,GAEhB,OADmB,IAAfqB,EAAMS,MAAYlC,EAAIS,OAAOP,MAKnC,SCLoBiC,IAAAA,cAQpB,WAAYnC,EAAKoC,EAAMF,SAAM,OAC5BG,sBACK1B,KAAOX,EACZqC,EAAKC,MAAQF,EACbC,EAAKH,KAAOA,aAXNK,KAAP,SAAYhB,GAEX,OADY,IAAIY,EAA2B,IAAIK,IAAO,IAAIA,IAAO,GACtDlB,OAAOC,+BAYnBjB,IAAA,gBAAKJ,OAAGE,OAOP,OANKQ,KAAKF,IAAI,CAACR,EAAGE,MACjB2B,EAAOnB,KAAKD,KAAMT,EAAGE,GACrB2B,EAAOnB,KAAK0B,MAAOlC,EAAGF,KACpBU,KAAKsB,cAMT1B,MAAA,WACCI,KAAKsB,KAAO,EACZtB,KAAKD,KAAKH,QACVI,KAAK0B,MAAM9B,WAIZC,OAAA,gBAAQP,OAAGE,OACV,QAAI6B,EAAOrB,KAAKD,KAAMT,EAAGE,KACxB6B,EAAOrB,KAAK0B,MAAOlC,EAAGF,KACpBU,KAAKsB,YASTT,MAAA,WACC,YAAYa,MAAMvB,UAGlBc,+BAAD,WAAQzB,sFACHQ,KAAK0B,MAAM5B,IAAIN,mBAAI,uBAAOQ,KAAK0B,MAAMzB,IAAIT,WAD9C,+CAIAqC,OAAA,WACC,WAAWN,EAA2BvB,KAAK0B,MAAO1B,KAAKD,KAAMC,KAAKsB,UArDZ7B,YCJhCqC,KACvB,MAAO,qBCEgBC,EAAeC,GACtC,OAAO5C,MAAI0C,EAAME,GCCGC,IAAAA,cAQpB,WAAY7C,EAAKkC,SAAM,OACtBG,sBACK1B,KAAOX,EACZqC,EAAKH,KAAOA,aAVNK,KAAP,SAAYhB,GAEX,OADY,IAAIsB,EAAqB,IAAIL,IAAO,GACrClB,OAAOC,+BAWnBjB,IAAA,gBAAKJ,OAAGE,OAMP,OALKQ,KAAKF,IAAI,CAACR,EAAGE,MACjB2B,EAAOnB,KAAKD,KAAMT,EAAGE,KACnBQ,KAAKsB,cAMT1B,MAAA,WACCI,KAAKsB,KAAO,EACZtB,KAAKD,KAAKH,WAIXC,OAAA,YACC,QAAIwB,EAAOrB,KAAKD,oBACbC,KAAKsB,YASTO,OAAA,WACC,OAAOI,EAAqBN,KAAKI,EAAe/B,KAAKT,eAzCLE"}