No matching definitions.

tur/hamt

stdlib/hamt.tur

persistent hash-array-mapped trie (HAMT) map.

Since: Phase P1

defn

hamt/new

(hamt/new)

create a new empty persistent HAMT.

Pointer to a freshly allocated, empty HAMT with reference count 1.

(hamt/new)  ; => <hamt ptr>

Since: Phase P1

defn

hamt/free

(hamt/free [m :ptr<void>])

decrement the reference count of a HAMT; free if it reaches zero.

mHAMT pointer
(hamt/free my-map)

Since: Phase P1

defn

hamt/retain

(hamt/retain [m :ptr<void>])

increment the reference count of a HAMT and return it.

mHAMT pointer

The same HAMT pointer m, with its reference count incremented.

(hamt/retain my-map)  ; => my-map

Since: Phase P1

defn

hamt/set

(hamt/set [m :ptr<void> hash :int key :ptr<void> val :ptr<void>])

insert or update a key/value pair; returns a new HAMT.

msource HAMT pointer
hash64-bit hash of the key (passed as int64_t)
keykey pointer
valvalue pointer

A new HAMT containing the inserted/updated entry. The original is unchanged.

(hamt/set m (hamt/hash-str "k") k v)  ; => <new hamt ptr>

Since: Phase P1

defn

hamt/del

(hamt/del [m :ptr<void> hash :int key :ptr<void>])

delete a key from the HAMT; returns a new HAMT.

msource HAMT pointer
hash64-bit hash of the key
keykey pointer

A new HAMT with the key removed. The original is unchanged.

(hamt/del m (hamt/hash-str "k") k)  ; => <new hamt ptr>

Since: Phase P1

defn

hamt/get

(hamt/get [m :ptr<void> hash :int key :ptr<void>])

look up a key and return its value, or NULL if absent.

mHAMT pointer
hash64-bit hash of the key
keykey pointer

The value pointer associated with key, or NULL if not found.

(hamt/get m (hamt/hash-str "k") k)  ; => <value ptr or NULL>

Since: Phase P1

defn

hamt/has?

(hamt/has? [m :ptr<void> hash :int key :ptr<void>])

check whether a key exists in the HAMT.

mHAMT pointer
hash64-bit hash of the key
keykey pointer

true if the key is present, false otherwise.

(hamt/has? m (hamt/hash-str "k") k)  ; => true

Since: Phase P1

defn

hamt/count

(hamt/count [m :ptr<void>])

return the number of key/value pairs in the HAMT.

mHAMT pointer

Integer count of entries stored in the HAMT.

(hamt/count my-map)  ; => 3

Since: Phase P1

defn

hamt/merge

(hamt/merge [a :ptr<void> b :ptr<void>])

merge two HAMTs; values from b win on key collision.

afirst HAMT pointer
bsecond HAMT pointer (wins on collision)

A new HAMT containing all entries from a and b.

(hamt/merge map-a map-b)  ; => <merged hamt ptr>

Since: Phase P1

defn

hamt/hash-str

(hamt/hash-str [str :cstr])

compute an xxHash64 of a NUL-terminated C string.

strNUL-terminated C string to hash

64-bit hash value as int64_t.

(hamt/hash-str "hello")  ; => <hash int>

Since: Phase P1

defn

hamt/hash-ptr

(hamt/hash-ptr [ptr :ptr<void>])

hash a pointer value directly (identity hash).

ptrpointer whose address is used as the hash input

64-bit hash value derived from the pointer address.

(hamt/hash-ptr my-key)  ; => <hash int>

Since: Phase P1

defn

hamt/iter-init

(hamt/iter-init [iter :ptr<void> m :ptr<void>])

initialize a stack-allocated iterator over a HAMT.

iterpre-allocated buffer of at least 64 bytes
mHAMT pointer to iterate over
(hamt/iter-init iter-buf my-map)

Since: Phase P1

defn

hamt/iter-free

(hamt/iter-free [iter :ptr<void>])

release any resources held by an iterator.

iteriterator buffer previously passed to hamt/iter-init
(hamt/iter-free iter-buf)

Since: Phase P1

defn

hamt/iter-next

(hamt/iter-next [iter :ptr<void> hash-out :ptr<void> key-out :ptr<void> val-out :ptr<void>])

advance an iterator and write the next entry into out-pointers.

iteriterator buffer
hash-outpointer that receives the key hash
key-outpointer that receives the key pointer
val-outpointer that receives the value pointer

true if a pair was written; false when the iteration is exhausted.

(hamt/iter-next iter hash-out key-out val-out)  ; => true/false

Since: Phase P1

defn

hamt/map

(hamt/map [m :ptr<void> fn :ptr<void> ctx :ptr<void>])

return a new HAMT with each value replaced by fn(val, ctx).

msource HAMT pointer
fnC function pointer (val :ptr, ctx :ptr) -> :ptr
ctxcaller-supplied context passed to fn

A new HAMT with transformed values.

(hamt/map my-map transform-fn ctx)  ; => <new hamt ptr>

Since: Phase P1

defn

hamt/filter

(hamt/filter [m :ptr<void> fn :ptr<void> ctx :ptr<void>])

return a new HAMT keeping only entries where fn(key, val, ctx) is true.

msource HAMT pointer
fnC predicate pointer (key :ptr, val :ptr, ctx :ptr) -> bool
ctxcaller-supplied context passed to fn

A new HAMT containing only the entries that passed the predicate.

(hamt/filter my-map pred-fn ctx)  ; => <filtered hamt ptr>

Since: Phase P1

defn

hamt/reduce

(hamt/reduce [m :ptr<void> fn :ptr<void> init :ptr<void> ctx :ptr<void>])

fold all entries into an accumulator using fn(acc, key, val, ctx).

msource HAMT pointer
fnC function pointer (acc :ptr, key :ptr, val :ptr, ctx :ptr) -> :ptr
initinitial accumulator pointer
ctxcaller-supplied context passed to fn

Final accumulator pointer after visiting all entries.

(hamt/reduce my-map fold-fn init-acc ctx)  ; => <result ptr>

Since: Phase P1

defn

hamt/merge-with

(hamt/merge-with [a :ptr<void> b :ptr<void> fn :ptr<void> ctx :ptr<void>])

merge two HAMTs, resolving key conflicts with fn(val_a, val_b, ctx).

afirst HAMT pointer
bsecond HAMT pointer
fnC function pointer (val_a :ptr, val_b :ptr, ctx :ptr) -> :ptr
ctxcaller-supplied context passed to fn

A new HAMT where colliding keys are resolved by fn instead of last-write-wins.

(hamt/merge-with map-a map-b merge-fn ctx)  ; => <merged hamt ptr>

Since: Phase P1

defn

hamt/show

(hamt/show [m :ptr<void>])

return a debug string "{k->v, ...}" for the HAMT; caller must free.

mHAMT pointer

NUL-terminated C string; the caller is responsible for freeing it.

(hamt/show my-map)  ; => "{...}"

Since: Phase P1

defn

hamt/dump

(hamt/dump [m :ptr<void>])

write the HAMT structure in DOT format to stderr for debugging.

mHAMT pointer to dump
(hamt/dump my-map)

Since: Phase P1

defn

hamt/transient

(hamt/transient [m :ptr<void>])

fork a mutable transient from an immutable HAMT.

mimmutable HAMT pointer to fork from

A transient (mutable) view that shares structure with m.

(hamt/transient my-map)  ; => <transient ptr>

Since: Phase P1

defn

hamt/transient-set!

(hamt/transient-set! [t :ptr<void> hash :int key :ptr<void> val :ptr<void>])

mutate a transient by inserting or updating a key in place.

ttransient HAMT pointer
hash64-bit hash of the key
keykey pointer
valvalue pointer
(hamt/transient-set! t (hamt/hash-str "k") k v)

Since: Phase P1

defn

hamt/transient-del!

(hamt/transient-del! [t :ptr<void> hash :int key :ptr<void>])

mutate a transient by deleting a key in place.

ttransient HAMT pointer
hash64-bit hash of the key
keykey pointer
(hamt/transient-del! t (hamt/hash-str "k") k)

Since: Phase P1

defn

hamt/persistent!

(hamt/persistent! [t :ptr<void>])

seal a transient into an immutable HAMT.

ttransient HAMT pointer (must not be used after this call)

A new immutable HAMT containing all mutations applied to the transient.

(hamt/persistent! t)  ; => <immutable hamt ptr>

Since: Phase P1

Internal definitions