def rd.graves
bend-kit-runner@0.13.0.1 · runner.bend:791
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-collections@0.1.4.1/hmap.bend as M
791
792def rd.graves(~A: Data, ~pdec: Bytes.Bytes -> Maybe<&2, A>, +fuel: Nat, nil: Bool, leaf: Bool, branch: Bool) -> Dec(Graves(A)):
793 match fuel nil leaf branch:
794 case 0n a b c:
795 Dec.fail(Graves(A))
796 case 1n+f True{} b c:
797 Dec.pure(Graves(A), M.HNil{})
798 case 1n+f False{} True{} c:
799 do Dec<Graves(A)>:
800 h : U32 <- rd.u32()
801 m : Bool <- rd.flag()
802 es : List<&2, M.Entry<Nat, Dead<A>>> <- rd.entries(~A, ~pdec, f, m)
803 return M.HLeaf{h, es}
804 case 1n+f False{} False{} True{}:
805 do Dec<Graves(A)>:
806 +lk : U32 <- rd.u32()
807 lo : Graves(A) <- rd.graves(~A, ~pdec, f, U32.is_eq(lk, 0), U32.is_eq(lk, 1), U32.is_eq(lk, 2))
808 +hk : U32 <- rd.u32()
809 hi : Graves(A) <- rd.graves(~A, ~pdec, f, U32.is_eq(hk, 0), U32.is_eq(hk, 1), U32.is_eq(hk, 2))
810 return M.HBranch{lo, hi}
811 case 1n+f False{} False{} False{}:
812 Dec.fail(Graves(A))