-! Copyright (C) 2008 Slava Pestov.
+! Copyright (C) 2008, 2010 Slava Pestov.
! See http://factorcode.org/license.txt for BSD license.
USING: math kernel sequences sequences.private byte-arrays
-alien.c-types prettyprint.custom parser accessors ;
+alien prettyprint.custom parser accessors locals ;
IN: nibble-arrays
TUPLE: nibble-array
<PRIVATE
-CONSTANT: nibble BIN: 1111
+CONSTANT: nibble 0b1111
: nibbles>bytes ( m -- n ) 1 + 2/ ; inline
: get-nibble ( n byte -- nibble )
swap neg shift nibble bitand ; inline
-: set-nibble ( value n byte -- byte' )
- nibble pick shift bitnot bitand -rot shift bitor ; inline
+:: set-nibble ( value n byte -- byte' )
+ byte nibble n shift bitnot bitand
+ value n shift
+ bitor ; inline
: nibble@ ( n nibble-array -- shift n' byte-array )
[ >fixnum byte/nibble ] [ underlying>> ] bi* ; inline
PRIVATE>
+ERROR: bad-array-length n ;
+
: <nibble-array> ( n -- nibble-array )
+ dup 0 < [ bad-array-length ] when
dup nibbles>bytes <byte-array> nibble-array boa ; inline
M: nibble-array length length>> ;