decode works
|%
++ p 19
--
-:: +stre: bit streams
-:: read/write are from/to the front
+:: +str: bit streams
+:: read/write are from/to the front (big-endian)
::
-++ stre
+++ str
|%
++ read-bit
|= s=bits
[(dec wid.s) (end [0 (dec wid.s)] dat.s)]
==
::
+ ++ read-bits
+ |= [n=@ s=bits]
+ ^- [bits rest=bits]
+ =| bs=bits
+ |-
+ ?: =(n 0) [bs s]
+ =^ b s (read-bit s)
+ $(n (dec n), bs (write-bit s b))
+ ::
++ write-bit
|= [s=bits bit=@ub]
^- bits
0x0
::
++ de
+ |= [s=bits p=@]
+ |^
+ ^- [delta=@ rest=bits]
+ ?> (gth wid.s 0)
+ =^ q s (get-q s)
+ =^ r s (read-bits:str p s)
+ [(add dat.r (lsh [0 p] q)) s]
+ ::
+ ++ get-q
|= s=bits
- ^- [hash=byts rest=bits]
- [*byts *bits]
+ =| q=@
+ =^ first-bit s (read-bit:str s)
+ |-
+ ?: =(0 first-bit) [q s]
+ =^ b s (read-bit:str s)
+ $(first-bit b, q +(q))
+ --
--
--
