UNPKG

structs

Version:

A collection of general purpose data structures for JavaScript/TypeScript

8 lines (7 loc) 2.74 kB
/*! * structs v0.1.1 * A collection of general purpose data structures for JavaScript/TypeScript * Copyright (c) 2021 Mayank Verma * Released under the MIT License */ !function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).structs={})}(this,(function(e){"use strict";function __classPrivateFieldGet(e,t,r,s){if("a"===r&&!s)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof t?e!==t||!s:!t.has(e))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===r?s:"a"===r?s.call(e):s?s.value:t.get(e)}const Str=e=>null==e?"":"string"==typeof e?e:"0"==`${e}`&&1/e==-1/0?"-0":`${e}`;var t;class HashSet{constructor(e=[]){t.set(this,{}),e.forEach((e=>this.insert(e)))}len(){return Object.keys(__classPrivateFieldGet(this,t,"f")).length}insert(e,r=!1){const s=typeof e;if("string"!==s&&"number"!==s&&"bigint"!==s){if(!0===r)throw new TypeError(`Cannot insert ${e} of type ${s} in a HashSet`);return!1}return!(Str(e)in __classPrivateFieldGet(this,t,"f"))&&(__classPrivateFieldGet(this,t,"f")[Str(e)]=e,!0)}remove(e){return Str(e)in __classPrivateFieldGet(this,t,"f")&&(delete __classPrivateFieldGet(this,t,"f")[Str(e)],!0)}contains(e){return Str(e)in __classPrivateFieldGet(this,t,"f")}drain(){const e=__classPrivateFieldGet(this,t,"f");return this.clear(),Object.values(e)[Symbol.iterator]()}clear(){return function(e,t,r,s,i){if("m"===s)throw new TypeError("Private method is not writable");if("a"===s&&!i)throw new TypeError("Private accessor was defined without a setter");if("function"==typeof t?e!==t||!i:!t.has(e))throw new TypeError("Cannot write private member to an object whose class did not declare it");"a"===s?i.call(e,r):i?i.value=r:t.set(e,r)}(this,t,{},"f"),!0}toArray(){return Object.values(__classPrivateFieldGet(this,t,"f"))}forEach(e){for(const[r,s]of Object.entries(__classPrivateFieldGet(this,t,"f")))e(s)}union(e){return new HashSet([...this.toArray(),...e.toArray()])}intersection(e){const t=[];return e.forEach((e=>{this.contains(e)&&t.push(e)})),new HashSet(t)}difference(e){const t=[];return this.forEach((r=>{e.contains(r)||t.push(r)})),new HashSet(t)}equals(e){return this.len()===e.len()&&(this.forEach((t=>{if(!e.contains(t))return!1})),!0)}isSubsetOf(e){return!(this.len()>e.len())&&(this.forEach((t=>{if(!e.contains(t))return!1})),!0)}isStrictSubsetOf(e){return this.len()!==e.len()&&this.isSubsetOf(e)}isSupersetOf(e){return e.isSubsetOf(this)}isStrictSupersetOf(e){return e.isStrictSubsetOf(this)}}t=new WeakMap,e.HashSet=HashSet,Object.defineProperty(e,"__esModule",{value:!0})}));