]> gitweb.factorcode.org Git - factor.git/blob - basis/math/bits/bits.factor
4b94a3c73377ae9f742405579c40262f858a5869
[factor.git] / basis / math / bits / bits.factor
1 ! Copyright (C) 2009 Daniel Ehrenberg
2 ! See http://factorcode.org/license.txt for BSD license.
3 USING: sequences kernel math accessors sequences.private ;
4 IN: math.bits
5
6 TUPLE: bits { number read-only } { length read-only } ;
7 C: <bits> bits
8
9 : check-negative-bits ( n -- n )
10     dup 0 < [ non-negative-integer-expected ] when ; inline
11
12 : make-bits ( number -- bits )
13     check-negative-bits
14     [ T{ bits f 0 0 } ] [ dup abs log2 1 + <bits> ] if-zero ; inline
15
16 M: bits length length>> ; inline
17
18 M: bits nth-unsafe number>> swap bit? ; inline
19
20 INSTANCE: bits immutable-sequence
21
22 : bits>number ( seq -- number )
23     <reversed> 0 [ [ 1 shift ] dip [ 1 + ] when ] reduce ;