def HMap.get.go
bend-kit-collections@0.1.4.1 · hmap.bend:116
import bend-kit-collections@0.1.4.1/hmap.bend as Hmap
import Base
116def HMap.get.go(
117 ~K: Data, ~V: Data, ~eq: K -> K -> Bool,
118 +n: Nat, +mask: U32, m: HMap<K, V>, +hash: U32, +k: K
119) -> Maybe<&2, V>:
120 match n:
121 case 0n:
122 match m:
123 case HNil{}:
124 None{}
125 case HLeaf{oldhash, entries}:
126 HMap.entries.get(~K, ~V, ~eq, entries, k)
127 case HBranch{lo, hi}:
128 None{}
129 case 1n+p:
130 match m:
131 case HNil{}:
132 None{}
133 case HLeaf{oldhash, entries}:
134 HMap.bool(Maybe<&2, V>, U32.is_eq(oldhash, hash),
135 u => HMap.entries.get(~K, ~V, ~eq, entries, k),
136 u => None{})
137 case HBranch{+lo, +hi}:
138 HMap.bool(Maybe<&2, V>, U32.is_eq((hash .&. mask : U32), 0),
139 u => HMap.get.go(~K, ~V, ~eq, p, (mask << 1n : U32), lo, hash, k),
140 u => HMap.get.go(~K, ~V, ~eq, p, (mask << 1n : U32), hi, hash, k))