def get_go
bendtorch-core@0.1.0.0 · src/storage/refinement.bend:60
import bendtorch-core@0.1.0.0/src/storage/refinement.bend as Refinement
import Base
import bendtorch-core@0.1.0.0/src/storage/model.bend as Model
60def get_go(-T: Data, d: Nat, array: Array<T>, +n: U32, +i: U32, z: Bool,
61 valid: Model.Balanced(T, d, array)) -> Get<T, d, array, n, i, z>:
62 match d array z:
63 case 0n ALeaf{+value} _:
64 Get{ALeaf{value}, value, {==}, {==}, {==}, valid}
65 case 0n ANode{xs, ys} _:
66 match valid:
67 case 1n+p ALeaf{value} _:
68 match valid:
69 case 1n+p ANode{xs, ys} True{}:
70 (ex, ey) = valid
71 get_low(T, p, xs, n, i, ys,
72 get_go(T, p, xs, U32.shr(n), i, U32.is_lt(i, U32.shr(U32.shr(n))), ex), ey)
73 case 1n+p ANode{xs, ys} False{}:
74 (ex, ey) = valid
75 +j = U32.sub(i, U32.shr(n))
76 get_high(T, p, ys, n, i, xs,
77 get_go(T, p, ys, U32.shr(n), j, U32.is_lt(j, U32.shr(U32.shr(n))), ey), ex)