tables
nimony/lib/std/tables.nim
type Keyable = concept func ==(a: Self, b: Self): bool func hash(a: Self): uint64
type Table = object data: seq[tuple[K, V]] hashes: seq
func contains(t: Table[K,V]; k: K): boolTrue if
kis stored int.func hasKey(t: Table[K,V]; k: K): boolAlias for
contains.func getOrDefault(t: Table[K,V]; k: K): Vfunc getOrDefault(t: Table[K,V]; k: K; fallback: V): VReturn
t[k]if the key is present, otherwisefallback.func getOrQuit(t: Table[K,V]; k: K): var VLike
[], but terminates the program ifkis missing (afterassert).func [](t: Table[K,V]; k: K): var VRetrieves
k's value or raisesKeyErrorwhen absent.func []=(t: var Table[K,V]; k: sink K; v: sink V)Inserts or updates
kwithv.func mgetOrPut(t: var Table[K,V]; k: sink K; v: sink V): var VReturns
t[k], insertingvwhenkwas missing; result is mutable.func len(t: Table[K,V]): int64Number of key/value pairs stored in
t.iterator pairs(t: Table[K,V]): tuple[lent K, lent V]Yields every
(key, value)stored int.iterator mpairs(t: Table[K,V]): tuple[lent K, var V]Mutable variant of
pairs(values can be updated in place).iterator keys(t: Table[K,V]): lent Kiterator values(t: Table[K,V]): lent Viterator mvalues(t: var Table[K,V]): var Vfunc del(t: var Table[K,V]; k: K)Remove
kfromt. No-op if absent. Preserves insertion order by shifting later entries down; the hash index is rebuilt afterwards because the shift renamed every entry's data position.func initTable(): Table[K,V]Creates an empty table.
func clear(t: var Table[K,V])Remove all entries from
t.type OrderedTable = Table[K,V]func initOrderedTable(): Table[K,V]