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)))