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)})