def HMap.del.go
bend-kit-collections@0.1.4.1 · hmap.bend:172
import bend-kit-collections@0.1.4.1/hmap.bend as Hmap
import Base
172def HMap.del.go(
173 ~K: Data, ~V: Data, ~eq: K -> K -> Bool,
174 +n: Nat, +mask: U32, m: HMap<K, V>, +hash: U32, +k: K
175) -> HMap<K, V>:
176 match n:
177 case 0n:
178 match m:
179 case HNil{}:
180 HNil{}
181 case HLeaf{oldhash, entries}:
182 HMap.leaf(K, V, oldhash, HMap.entries.del(~K, ~V, ~eq, entries, k))
183 case HBranch{lo, hi}:
184 HBranch{lo, hi}
185 case 1n+p:
186 match m:
187 case HNil{}:
188 HNil{}
189 case HLeaf{+oldhash, +entries}:
190 HMap.bool(HMap<K, V>, U32.is_eq(oldhash, hash),
191 u => HMap.leaf(K, V, oldhash, HMap.entries.del(~K, ~V, ~eq, entries, k)),
192 u => HLeaf{oldhash, entries})
193 case HBranch{+lo, +hi}:
194 HMap.bool(HMap<K, V>, U32.is_eq((hash .&. mask : U32), 0),
195 u => HMap.join(K, V, HMap.del.go(~K, ~V, ~eq, p, (mask << 1n : U32), lo, hash, k), hi),
196 u => HMap.join(K, V, lo, HMap.del.go(~K, ~V, ~eq, p, (mask << 1n : U32), hi, hash, k)))