| 
									
										
										
										
											2009-02-20 21:14:54 -05:00
										 |  |  | ! Copyright (C) 2009 Daniel Ehrenberg | 
					
						
							|  |  |  | ! See http://factorcode.org/license.txt for BSD license. | 
					
						
							|  |  |  | USING: sequences kernel math accessors sequences.private ;
 | 
					
						
							|  |  |  | IN: math.bits | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | TUPLE: bits { number read-only } { length read-only } ;
 | 
					
						
							|  |  |  | C: <bits> bits | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | : make-bits ( number -- bits )
 | 
					
						
							| 
									
										
										
										
											2009-05-06 00:32:23 -04:00
										 |  |  |     dup zero? [ drop T{ bits f 0 0 } ] [ dup abs log2 1 + <bits> ] if ; inline
 | 
					
						
							| 
									
										
										
										
											2009-02-20 21:14:54 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  | M: bits length length>> ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | M: bits nth-unsafe number>> swap bit? ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | INSTANCE: bits immutable-sequence | 
					
						
							| 
									
										
										
										
											2009-06-01 23:39:02 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | : unbits ( seq -- number )
 | 
					
						
							|  |  |  |     <reversed> 0 [ [ 1 shift ] dip [ 1+ ] when ] reduce ;
 |