]> gitweb.factorcode.org Git - factor.git/commitdiff
bit alignement and absolute positionning for bit-reader
authorprunedtree <prunedtree@gmail.com>
Fri, 5 Jun 2009 10:26:50 +0000 (03:26 -0700)
committerprunedtree <prunedtree@gmail.com>
Fri, 5 Jun 2009 10:26:50 +0000 (03:26 -0700)
basis/bitstreams/bitstreams.factor

index 4718f137e42188c8018f91171e343896e4bb1fad..032e851a79c45b15cd2ba7accdbe7d711e8a6347 100644 (file)
@@ -56,13 +56,20 @@ TUPLE: lsb0-bit-writer < bit-writer ;
 GENERIC: peek ( n bitstream -- value )
 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 -- )
-    {
-        [ byte-pos>> 8 * ]
-        [ bit-pos>> + + 8 /mod ]
-        [ (>>bit-pos) ]
-        [ (>>byte-pos) ]
-    } cleave ; inline
+    [ get-abp + ] [ set-abp ] bi ; inline
+    
+: (align) ( n m -- n' )
+    [ /mod 0 > [ 1+ ] when ] [ * ] bi ; inline
+    
+: align ( n bitstream -- )
+    [ get-abp swap (align) ] [ set-abp ] bi ; inline
 
 : read ( n bitstream -- value )
     [ peek ] [ seek ] 2bi ; inline