def integer.done

bend-kit-http2@0.4.0.0 · hpack.bend:177

import bend-kit-http2@0.4.0.0/hpack.bend as Hpack
import Base

177def integer.done(n: Nat, cont: Bool, c: Cursor, +shift: U32, +value: U32) -> Maybe<&1, Cursor & U32>:
178  match n cont:
179    case 0n False{}:
180      Some{(c, value)}
181    case 0n True{}:
182      None{}
183    case 1n+p False{}:
184      Some{(c, value)}
185    case 1n+p True{}:
186      with_taken(Cursor & U32, take(c), cursor => +byte =>
187        do Maybe<&1, Cursor & U32>:
188          +part: U32 = (byte .&. 127 : U32)
189          unused: Unit <- within(U32.is_le(part, ((4294967295 - value : U32) >> U32.to_nat(shift) : U32)))
190          integer.done(p, U32.is_ne((byte .&. 128 : U32), 0), cursor, (shift + 7 : U32), (value + (part << U32.to_nat(shift) : U32) : U32)))

Uses (20)

Used by (1)