]> gitweb.factorcode.org Git - factor.git/blob - extra/math/bitfields/lib/lib.factor
Merge branch 'master' of git://factorcode.org/git/factor
[factor.git] / extra / math / bitfields / lib / lib.factor
1 USING: hints kernel math ;
2 IN: math.bitfields.lib
3
4 : clear-bit ( x n -- y ) 2^ bitnot bitand ; inline
5 : set-bit ( x n -- y ) 2^ bitor ; inline
6 : bit-clear? ( x n -- ? ) 2^ bitand zero? ; inline
7 : unmask ( x n -- ? ) bitnot bitand ; inline
8 : unmask? ( x n -- ? ) unmask 0 > ; inline
9 : mask ( x n -- ? ) bitand ; inline
10 : mask? ( x n -- ? ) mask 0 > ; inline
11 : wrap ( m n -- m' ) 1- bitand ; inline
12 : bits ( m n -- m' ) 2^ wrap ; inline
13 : mask-bit ( m n -- m' ) 1- 2^ mask ; inline
14
15 : shift-mod ( n s w -- n )
16     >r shift r> 2^ wrap ; inline
17
18 : bitroll ( x s w -- y )
19      [ wrap ] keep
20      [ shift-mod ]
21      [ [ - ] keep shift-mod ] 3bi bitor ; inline
22
23 : bitroll-32 ( n s -- n' ) 32 bitroll ;
24
25 HINTS: bitroll-32 bignum fixnum ;
26
27 : bitroll-64 ( n s -- n' ) 64 bitroll ;
28
29 HINTS: bitroll-64 bignum fixnum ;
30