def rd.heap

bend-kit-runner@0.13.0.1 · runner.bend:720

import bend-kit-runner@0.13.0.1/runner.bend as Runner
import Base
import bend-kit-bytes@0.3.3.0/bytes.bend as Bytes
import bend-kit-scheduler@0.4.1.0/queue.bend as Q
import bend-kit-collections@0.1.4.1/heap.bend as H

720# Each rd.* tree reader takes the flag already read. fuel bounds the depth: every node holds at least one 4-octet flag.
721def rd.heap(~A: Data, ~pdec: Bytes.Bytes -> Maybe<&2, A>, +fuel: Nat, node: Bool) -> Dec(H.Heap<Q.Ticket<A>>):
722  match fuel node:
723    case 0n b:
724      Dec.fail(H.Heap<Q.Ticket<A>>)
725    case 1n+f False{}:
726      Dec.pure(H.Heap<Q.Ticket<A>>, H.HLeaf{})
727    case 1n+f True{}:
728      do Dec<H.Heap<Q.Ticket<A>>>:
729        n : Nat <- rd.u64()
730        t : Q.Ticket<A> <- rd.ticket(~A, ~pdec)
731        lf : Bool <- rd.flag()
732        l : H.Heap<Q.Ticket<A>> <- rd.heap(~A, ~pdec, f, lf)
733        rf : Bool <- rd.flag()
734        r : H.Heap<Q.Ticket<A>> <- rd.heap(~A, ~pdec, f, rf)
735        return H.HNode{n, t, l, r}

Uses (13)

Used by (1)