]> gitweb.factorcode.org Git - factor.git/blobdiff - basis/nibble-arrays/nibble-arrays.factor
use radix literals
[factor.git] / basis / nibble-arrays / nibble-arrays.factor
index d1ab0a34c1c50fa3384a7f1d5678ca88165f539a..d519d4f5bc975ea1f3b35a53ecef64b79c391ea2 100644 (file)
@@ -1,7 +1,7 @@
-! 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
@@ -10,7 +10,7 @@ TUPLE: nibble-array
 
 <PRIVATE
 
-: nibble BIN: 1111 ; inline
+CONSTANT: nibble 0b1111
 
 : nibbles>bytes ( m -- n ) 1 + 2/ ; inline
 
@@ -20,15 +20,20 @@ TUPLE: nibble-array
 : 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>> ;
@@ -62,7 +67,7 @@ M: nibble-array resize
 
 M: nibble-array byte-length length nibbles>bytes ;
 
-: N{ \ } [ >nibble-array ] parse-literal ; parsing
+SYNTAX: N{ \ } [ >nibble-array ] parse-literal ;
 
 INSTANCE: nibble-array sequence