]> gitweb.factorcode.org Git - factor.git/blob - basis/math/bits/bits.factor
stomp.cli: simplify
[factor.git] / basis / math / bits / bits.factor
1 ! Copyright (C) 2009 Daniel Ehrenberg
2 ! See https://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 : make-bits ( number -- bits )
10     assert-non-negative
11     [ T{ bits f 0 1 } ] [ dup abs log2 1 + <bits> ] if-zero ; inline
12
13 M: bits length length>> ; inline
14
15 M: bits nth-unsafe number>> swap bit? ; inline
16
17 INSTANCE: bits immutable-sequence
18
19 : bits>number ( seq -- number )
20     <reversed> 0 [ [ 1 shift ] dip [ 1 + ] when ] reduce ;
21
22 TUPLE: binary-bits < bits ;
23
24 C: <binary-bits> binary-bits
25
26 M: binary-bits nth-unsafe call-next-method 1 0 ? ; inline
27
28 INSTANCE: binary-bits virtual-sequence
29
30 : make-binary-bits ( number -- binary-bits )
31     assert-non-negative
32     [ T{ binary-bits { number 0 } { length 1 } } ]
33     [ dup abs log2 1 + <binary-bits> ] if-zero ; inline