def assign.put

bend-kit-bits@0.1.0.1 · bits.bend:240

import bend-kit-bits@0.1.0.1/bits.bend as Bits
import Base

240# MSB-first, a code fills a run of consecutive entries; LSB-first, its bits reversed fill every 2^len-th.
241def assign.put(+msb: Bool, +max: U32, +sym: U32, +len: U32, r: Array<U32> & U32, t: Array<U32>) -> Array<U32> & Array<U32>:
242  (n, +code) = r
243  +lo = (max - len : U32)
244  +start = Bool.pick(U32, msb, U32.shln(code, U32.to_nat(lo)), rev(U32.to_nat(len), code, 0))
245  +step = Bool.pick(U32, msb, 1, U32.shln(1, U32.to_nat(len)))
246  (Array.set(U32, n, len, (code + 1 : U32)), fill(U32.to_nat(U32.shln(1, U32.to_nat(lo))), t, start, step, ((sym << 5n) .|. len : U32)))

Uses (14)

Used by (1)