def HMap.put.go

bend-kit-collections@0.1.4.1 · hmap.bend:84

import bend-kit-collections@0.1.4.1/hmap.bend as Hmap
import Base

84def HMap.put.go(
85  ~K: Data, ~V: Data, ~eq: K -> K -> Bool,
86  +n: Nat, +mask: U32, m: HMap<K, V>, +hash: U32, +k: K, +v: V
87) -> HMap<K, V>:
88  match n:
89    case 0n:
90      match m:
91        case HNil{}:
92          HLeaf{hash, [Entry{k, v}]}
93        case HLeaf{oldhash, entries}:
94          HLeaf{oldhash, HMap.entries.put(~K, ~V, ~eq, entries, k, v)}
95        case HBranch{lo, hi}:
96          HBranch{lo, hi}
97    case 1n+p:
98      match m:
99        case HNil{}:
100          HLeaf{hash, [Entry{k, v}]}
101        case HLeaf{+oldhash, +entries}:
102          HMap.bool(HMap<K, V>, U32.is_eq(oldhash, hash),
103            u => HLeaf{oldhash, HMap.entries.put(~K, ~V, ~eq, entries, k, v)},
104            u => HMap.split(~K, ~V, ~eq, n, mask, oldhash, entries, hash, k, v))
105        case HBranch{+lo, +hi}:
106          HMap.bool(HMap<K, V>, U32.is_eq((hash .&. mask : U32), 0),
107            u => HBranch{HMap.put.go(~K, ~V, ~eq, p, (mask << 1n : U32), lo, hash, k, v), hi},
108            u => HBranch{lo, HMap.put.go(~K, ~V, ~eq, p, (mask << 1n : U32), hi, hash, k, v)})

Uses (12)

Used by (3)