@@ -28,9 +28,9 @@ impl BitSlice for [Word] {
2828 fn clear_bit ( & mut self , idx : usize ) -> bool {
2929 let words = self ;
3030 debug ! ( "clear_bit: words={} idx={}" ,
31- bits_to_string( words, words. len( ) * mem:: size_of:: <Word >( ) ) , bit_str ( idx) ) ;
31+ bits_to_string( words, words. len( ) * mem:: size_of:: <Word >( ) * 8 ) , idx) ;
3232 let BitLookup { word, bit_in_word, bit_mask } = bit_lookup ( idx) ;
33- debug ! ( "word={} bit_in_word={} bit_mask={ }" , word, bit_in_word, bit_mask) ;
33+ debug ! ( "word={} bit_in_word={} bit_mask=0x{:x }" , word, bit_in_word, bit_mask) ;
3434 let oldv = words[ word] ;
3535 let newv = oldv & !bit_mask;
3636 words[ word] = newv;
@@ -42,7 +42,7 @@ impl BitSlice for [Word] {
4242 fn set_bit ( & mut self , idx : usize ) -> bool {
4343 let words = self ;
4444 debug ! ( "set_bit: words={} idx={}" ,
45- bits_to_string( words, words. len( ) * mem:: size_of:: <Word >( ) ) , bit_str ( idx) ) ;
45+ bits_to_string( words, words. len( ) * mem:: size_of:: <Word >( ) * 8 ) , idx) ;
4646 let BitLookup { word, bit_in_word, bit_mask } = bit_lookup ( idx) ;
4747 debug ! ( "word={} bit_in_word={} bit_mask={}" , word, bit_in_word, bit_mask) ;
4848 let oldv = words[ word] ;
@@ -78,13 +78,6 @@ fn bit_lookup(bit: usize) -> BitLookup {
7878 BitLookup { word : word, bit_in_word : bit_in_word, bit_mask : bit_mask }
7979}
8080
81-
82- fn bit_str ( bit : Word ) -> String {
83- let byte = bit >> 3 ;
84- let lobits = 1 << ( bit & 0b111 ) ;
85- format ! ( "[{}:{}-{:02x}]" , bit, byte, lobits)
86- }
87-
8881pub fn bits_to_string ( words : & [ Word ] , bits : usize ) -> String {
8982 let mut result = String :: new ( ) ;
9083 let mut sep = '[' ;
@@ -95,7 +88,7 @@ pub fn bits_to_string(words: &[Word], bits: usize) -> String {
9588 let mut i = 0 ;
9689 for & word in words. iter ( ) {
9790 let mut v = word;
98- loop { // for each byte in `v`:
91+ for _ in 0 ..mem :: size_of :: < Word > ( ) { // for each byte in `v`:
9992 let remain = bits - i;
10093 // If less than a byte remains, then mask just that many bits.
10194 let mask = if remain <= 8 { ( 1 << remain) - 1 } else { 0xFF } ;
@@ -110,14 +103,15 @@ pub fn bits_to_string(words: &[Word], bits: usize) -> String {
110103 i += 8 ;
111104 sep = '-' ;
112105 }
106+ sep = '|' ;
113107 }
114108 result. push ( ']' ) ;
115109 return result
116110}
117111
118112#[ inline]
119- pub fn bitwise < Op : BitwiseOperator > ( out_vec : & mut [ usize ] ,
120- in_vec : & [ usize ] ,
113+ pub fn bitwise < Op : BitwiseOperator > ( out_vec : & mut [ Word ] ,
114+ in_vec : & [ Word ] ,
121115 op : & Op ) -> bool {
122116 assert_eq ! ( out_vec. len( ) , in_vec. len( ) ) ;
123117 let mut changed = false ;
@@ -132,21 +126,21 @@ pub fn bitwise<Op:BitwiseOperator>(out_vec: &mut [usize],
132126
133127pub trait BitwiseOperator {
134128 /// Applies some bit-operation pointwise to each of the bits in the two inputs.
135- fn join ( & self , pred1 : usize , pred2 : usize ) -> usize ;
129+ fn join ( & self , pred1 : Word , pred2 : Word ) -> Word ;
136130}
137131
138132pub struct Intersect ;
139133impl BitwiseOperator for Intersect {
140134 #[ inline]
141- fn join ( & self , a : usize , b : usize ) -> usize { a & b }
135+ fn join ( & self , a : Word , b : Word ) -> Word { a & b }
142136}
143137pub struct Union ;
144138impl BitwiseOperator for Union {
145139 #[ inline]
146- fn join ( & self , a : usize , b : usize ) -> usize { a | b }
140+ fn join ( & self , a : Word , b : Word ) -> Word { a | b }
147141}
148142pub struct Subtract ;
149143impl BitwiseOperator for Subtract {
150144 #[ inline]
151- fn join ( & self , a : usize , b : usize ) -> usize { a & !b }
145+ fn join ( & self , a : Word , b : Word ) -> Word { a & !b }
152146}
0 commit comments