bit alignement and absolute positionning for bit-reader
parent
5e31d6266e
commit
9612b43034
|
@ -56,13 +56,20 @@ TUPLE: lsb0-bit-writer < bit-writer ;
|
||||||
GENERIC: peek ( n bitstream -- value )
|
GENERIC: peek ( n bitstream -- value )
|
||||||
GENERIC: poke ( value n bitstream -- )
|
GENERIC: poke ( value n bitstream -- )
|
||||||
|
|
||||||
|
: get-abp ( bitstream -- abp )
|
||||||
|
[ byte-pos>> 8 * ] [ bit-pos>> + ] bi ; inline
|
||||||
|
|
||||||
|
: set-abp ( abp bitstream -- )
|
||||||
|
[ 8 /mod ] dip [ (>>bit-pos) ] [ (>>byte-pos) ] bi ; inline
|
||||||
|
|
||||||
: seek ( n bitstream -- )
|
: seek ( n bitstream -- )
|
||||||
{
|
[ get-abp + ] [ set-abp ] bi ; inline
|
||||||
[ byte-pos>> 8 * ]
|
|
||||||
[ bit-pos>> + + 8 /mod ]
|
: (align) ( n m -- n' )
|
||||||
[ (>>bit-pos) ]
|
[ /mod 0 > [ 1+ ] when ] [ * ] bi ; inline
|
||||||
[ (>>byte-pos) ]
|
|
||||||
} cleave ; inline
|
: align ( n bitstream -- )
|
||||||
|
[ get-abp swap (align) ] [ set-abp ] bi ; inline
|
||||||
|
|
||||||
: read ( n bitstream -- value )
|
: read ( n bitstream -- value )
|
||||||
[ peek ] [ seek ] 2bi ; inline
|
[ peek ] [ seek ] 2bi ; inline
|
||||||
|
|
Loading…
Reference in New Issue