EdgeAIG's picture
download
raw
4.03 kB
/**
* @since 2.0.0
*/
import * as Equal from "../Equal.js";
import { format } from "../Formatter.js";
import * as Hash from "../Hash.js";
import { NodeInspectSymbol, toJson } from "../Inspectable.js";
import { pipeArguments } from "../Pipeable.js";
import { hasProperty } from "../Predicate.js";
import * as HashMap from "./hashMap.js";
/** @internal */
export const HashSetTypeId = "~effect/collections/HashSet";
const HashSetProto = {
[Hash.symbol]() {
return Hash.hash(HashSetTypeId);
},
[Equal.symbol](that) {
return isHashSet(that) && size(this) === size(that) && every(this, value => has(that, value));
},
[Symbol.iterator]() {
return HashMap.keys(keyMap(this));
},
toString() {
return `HashSet(${format(Array.from(this))})`;
},
toJSON() {
return {
_id: "HashSet",
values: toJson(Array.from(this))
};
},
[NodeInspectSymbol]() {
return this.toJSON();
},
pipe() {
return pipeArguments(this, arguments);
}
};
const makeImpl = keyMap => {
const set = Object.create(HashSetProto);
set[HashSetTypeId] = HashSetTypeId;
set.keyMap = keyMap;
return set;
};
/** @internal */
export const isHashSet = u => hasProperty(u, HashSetTypeId);
/** @internal */
export const keyMap = self => self.keyMap;
/** @internal */
export const empty = () => makeImpl(HashMap.empty());
/** @internal */
export const make = (...values) => fromIterable(values);
/** @internal */
export const fromIterable = values => {
let map = HashMap.empty();
for (const value of values) {
map = HashMap.set(map, value, true);
}
return makeImpl(map);
};
/** @internal */
export const has = (self, value) => HashMap.has(keyMap(self), value);
/** @internal */
export const add = (self, value) => {
const map = keyMap(self);
return HashMap.has(map, value) ? self : makeImpl(HashMap.set(map, value, true));
};
/** @internal */
export const remove = (self, value) => {
const map = keyMap(self);
return HashMap.has(map, value) ? makeImpl(HashMap.remove(map, value)) : self;
};
/** @internal */
export const size = self => HashMap.size(keyMap(self));
/** @internal */
export const isEmpty = self => HashMap.isEmpty(keyMap(self));
// Helper function for building new HashSets from iteration
const fromPredicate = (self, predicate) => {
let result = HashMap.empty();
for (const value of self) {
if (predicate(value)) {
result = HashMap.set(result, value, true);
}
}
return makeImpl(result);
};
/** @internal */
export const union = (self, that) => {
const map = keyMap(self);
let result = map;
for (const value of that) {
result = HashMap.set(result, value, true);
}
return makeImpl(result);
};
/** @internal */
export const intersection = (self, that) => {
let result = HashMap.empty();
for (const value of self) {
if (has(that, value)) {
result = HashMap.set(result, value, true);
}
}
return makeImpl(result);
};
/** @internal */
export const difference = (self, that) => fromPredicate(self, value => !has(that, value));
/** @internal */
export const isSubset = (self, that) => {
for (const value of self) {
if (!has(that, value)) {
return false;
}
}
return true;
};
/** @internal */
export const map = (self, f) => {
let result = HashMap.empty();
for (const value of self) {
result = HashMap.set(result, f(value), true);
}
return makeImpl(result);
};
/** @internal */
export const filter = (self, predicate) => fromPredicate(self, predicate);
/** @internal */
export const some = (self, predicate) => {
for (const value of self) {
if (predicate(value)) {
return true;
}
}
return false;
};
/** @internal */
export const every = (self, predicate) => {
for (const value of self) {
if (!predicate(value)) {
return false;
}
}
return true;
};
/** @internal */
export const reduce = (self, zero, f) => {
let result = zero;
for (const value of self) {
result = f(result, value);
}
return result;
};
//# sourceMappingURL=hashSet.js.map

Xet Storage Details

Size:
4.03 kB
·
Xet hash:
6574a08d12e146eab999b525f83862e656b8ef89432f7ec527df38b65b52fa64

Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.