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

Uses (10)

Used by (2)