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)

Uses (12)

Used by (7)