voided-data
Version:
Proper DS for TS
70 lines (69 loc) • 2.01 kB
JavaScript
;
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;