UNPKG

voided-data

Version:

Proper DS for TS

70 lines (69 loc) 2.01 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.createHashSet = void 0; const map_1 = require("./map"); function createHashSet() { const map = (0, map_1.createHashTable)(); const iter = () => map.iter().map(([k]) => k); const has = (key) => { return map.get(key).match(() => true, () => false); }; return { size() { return map.size(); }, add(key) { map.set(key, null); }, has, remove(key) { map.unset(key); }, map(mapper) { const set = createHashSet(); map.iter().forEach(([k]) => set.add(mapper(k))); return set; }, iter, union(other) { const set = createHashSet(); iter().forEach((k) => set.add(k)); other.iter().forEach((k) => set.add(k)); return set; }, intersection(other) { const set = createHashSet(); iter().forEach((k) => { if (other.has(k)) set.add(k); }); return set; }, disjunction(other) { const set = createHashSet(); iter().forEach((k) => { if (!other.has(k)) set.add(k); }); other.iter().forEach((k) => { if (!has(k)) set.add(k); }); return set; }, difference(other) { const set = createHashSet(); iter().forEach((k) => { if (!other.has(k)) set.add(k); }); return set; }, equals(other) { if (other.size() !== map.size()) return false; return iter().every((it) => other.has(it)); }, }; } exports.createHashSet = createHashSet;