HashSet
A mutable Hash set which allows customized hash
behavior.
All data are parameterized by not its only type but also a unique identity in the time of initialization, so that two HashSets of ints initialized with different hash functions will have different type.
RESmodule I0 = unpack(
Belt.Id.hashableU(
~hash=(. a: int) => land(a, 65535),
~eq=(. a, b) => a == b,
)
)
let s0 = Belt.HashSet.make(~id=module(I0), ~hintSize=40)
module I1 = unpack(
Belt.Id.hashableU(
~hash=(. a: int) => land(a, 255),
~eq=(. a, b) => a == b,
)
)
let s1 = Belt.HashSet.make(~id=module(I1), ~hintSize=40)
Belt.HashSet.add(s1, 0)
Belt.HashSet.add(s1, 1)
The invariant must be held: for two elements who are equal, their hashed value should be the same.
Here the compiler would infer s0
and s1
having different type so that it would not mix.
RESlet s0: Belt.HashSet.t<int, I0.identity>
let s1: Belt.HashSet.t<int, I1.identity>
We can add elements to the collection (see last two lines in the example above). Since this is an mutable data structure, s1
will contain two pairs.
t
REStype t<'a, 'id>
id
REStype id<'a, 'id> = Belt.Id.hashable<'a, 'id>
make
RESlet make: (~hintSize: int, ~id: id<'a, 'id>) => t<'a, 'id>
clear
RESlet clear: t<'a, 'id> => unit
isEmpty
RESlet isEmpty: t<'a, 'b> => bool
add
RESlet add: (t<'a, 'id>, 'a) => unit
copy
RESlet copy: t<'a, 'id> => t<'a, 'id>
has
RESlet has: (t<'a, 'id>, 'a) => bool
remove
RESlet remove: (t<'a, 'id>, 'a) => unit
forEachU
RESlet forEachU: (t<'a, 'id>, (. 'a) => unit) => unit
forEach
RESlet forEach: (t<'a, 'id>, 'a => unit) => unit
Order unspecified.
reduceU
RESlet reduceU: (t<'a, 'id>, 'c, (. 'c, 'a) => 'c) => 'c
reduce
RESlet reduce: (t<'a, 'id>, 'c, ('c, 'a) => 'c) => 'c
Order unspecified.
size
RESlet size: t<'a, 'id> => int
logStats
RESlet logStats: t<'a, 'b> => unit
toArray
RESlet toArray: t<'a, 'id> => array<'a>
fromArray
RESlet fromArray: (array<'a>, ~id: id<'a, 'id>) => t<'a, 'id>
mergeMany
RESlet mergeMany: (t<'a, 'id>, array<'a>) => unit
getBucketHistogram
RESlet getBucketHistogram: t<'a, 'b> => array<int>