def Map.ins.go

Base · base.bend:2776

import Base
2776# t says whether the key splits deeper than node: else it goes above
2777def Map.ins.go(
2778  -a: Quant, -V: Kind(a), node: Map<a, V>, x: V, +p: Nat, kb: String & Bool,
2779  t: Bool
2780) -> Map<a, V>:
2781  match node kb t:
2782    case MNode{q, lo, hi} Tuple{key, b} False{}:
2783      Map.ins.splice(a, V, p, key, x, MNode{q, lo, hi})
2784    case MNode{q, MTip{}, hi} Tuple{key, False{}} True{}:
2785      MNode{q, MLeaf{key, x}, hi}
2786    case MNode{q, MLeaf{k, v}, hi} Tuple{key, False{}} True{}:
2787      MNode{q, Map.ins.splice(a, V, p, key, x, MLeaf{k, v}), hi}
2788    case MNode{q, MNode{+r, c, d}, hi} Tuple{key, False{}} True{}:
2789      MNode{q, Map.ins.go(a, V, MNode{r, c, d}, x, p, Map.bit(key, r), Nat.is_lt(r, p)), hi}
2790    case MNode{q, lo, MTip{}} Tuple{key, True{}} True{}:
2791      MNode{q, lo, MLeaf{key, x}}
2792    case MNode{q, lo, MLeaf{k, v}} Tuple{key, True{}} True{}:
2793      MNode{q, lo, Map.ins.splice(a, V, p, key, x, MLeaf{k, v})}
2794    case MNode{q, lo, MNode{+r, c, d}} Tuple{key, True{}} True{}:
2795      MNode{q, lo, Map.ins.go(a, V, MNode{r, c, d}, x, p, Map.bit(key, r), Nat.is_lt(r, p))}
2796    case m _ _:
2797      m

Uses (9)

Used by (7)