def read_path

bendtorch-core@0.1.0.0 · src/storage/array.bend:42

import bendtorch-core@0.1.0.0/src/storage/array.bend as Array
import Base
import bendtorch-core@0.1.0.0/src/storage/model.bend as Model

42def read_path(-T: Data, +d: Nat, array: Array<T>, path: Model.Path(d),
43  -valid: Model.Balanced(T, d, array)) -> Read<T, d, array, path>:
44  match d array:
45    case 0n ALeaf{+value}:
46      Read{ALeaf{value}, Some{value}, valid, {==}, {==}}
47    case 0n ANode{xs, ys}:
48      Read{ANode{xs, ys}, None{}, valid, {==}, {==}}
49    case 1n+p ALeaf{value}:
50      Read{ALeaf{value}, None{}, valid, {==}, {==}}
51    case 1n++p ANode{xs, ys}:
52      Model.Step{bit, rest} = path
53      match bit:
54        case False{}:
55          low(T, p, xs, rest, ys, read_path(T, p, xs, rest, left(T, p, xs, ys, valid)),
56            right(T, p, xs, ys, valid))
57        case True{}:
58          high(T, p, ys, rest, xs, read_path(T, p, ys, rest, right(T, p, xs, ys, valid)),
59            left(T, p, xs, ys, valid))

Uses (12)

Used by (4)