moonbitstack/moonstl/phf does not have a README file
pub(open) trait PhfKey {
fn to_bytes(Self) -> Bytes
}fn to_bytes(self : Int) -> Bytesfn to_bytes(self : Int64) -> Bytesfn to_bytes(self : UInt64) -> Bytesimpl PhfKey for StringViewfn to_bytes(self : StringView) -> Bytespub struct PhfBuilder[K, V] {
options : PhfOptions
keys : Array[K]
values : Array[V]
seen : Map[Bytes, Unit]
}test {
let builder : @phf.PhfBuilder[String, Int32] = @phf.PhfBuilder::new()
builder.entry("x", 1)
let refused = try {
builder.entry("x", 2)
Ok(())
} catch {
@spec.Refused::DuplicateValue => Err(true)
_ => Err(false)
}
assert_true(refused == Err(true))
}fn[K : PhfKey, V] PhfBuilder::build_ordered(self : PhfBuilder[K, V]) -> PhfOrderedMap[K, V] raise Refusedfn[K : PhfKey, V] PhfBuilder::build_ordered_set(self : PhfBuilder[K, V]) -> PhfOrderedSet[K] raise Refusedfn[K : PhfKey + Show, V : Show] PhfBuilder::build_source(self : PhfBuilder[K, V], name~ : String) -> String raise Refusedfn[K : PhfKey, V] PhfBuilder::entry(self : PhfBuilder[K, V], key : K, value : V) -> Unit raise Refusedtest {
let builder : @phf.PhfBuilder[String, Int32] = @phf.PhfBuilder::new()
builder.entry("a", 1)
builder.entry("b", 2)
let table = builder.build()
assert_true(table.get("a") == Some(1))
assert_true(table.get("b") == Some(2))
assert_true(table.get("c") == None)
assert_true(table.length() == 2)
}test {
let builder : @phf.PhfBuilder[String, Int32] = @phf.PhfBuilder::new()
builder.entry("b", 2)
builder.entry("a", 1)
let table = builder.build_ordered()
assert_true(table.index("b") == Some(0))
assert_true(table.index("a") == Some(1))
assert_true(table.get("a") == Some(1))
}fn[K : PhfKey, V] PhfOrderedMap::from_layout(layout : PhfLayout, entries : Array[(K, V)]) -> PhfOrderedMap[K, V] raise Refusedfn[K : PhfKey] PhfOrderedSet::from_layout(layout : PhfLayout, keys : Array[K]) -> PhfOrderedSet[K] raise Refusedpub struct PhfRank {
words : FixedArray[UInt64]
prefixes : FixedArray[Int]
dense : FixedArray[Int]
}test {
let builder : @phf.PhfBuilder[String, Unit] = @phf.PhfBuilder::new()
builder.entry("in", ())
let set = builder.build_set()
assert_true(set.contains("in"))
assert_true(!set.contains("out"))
}Install
Download zipData structures and algorithms the MoonBit core library leaves out.