@@ -28,9 +28,9 @@ impl BitSlice for [Word] {
28
28
fn clear_bit ( & mut self , idx : usize ) -> bool {
29
29
let words = self ;
30
30
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) ;
32
32
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) ;
34
34
let oldv = words[ word] ;
35
35
let newv = oldv & !bit_mask;
36
36
words[ word] = newv;
@@ -42,7 +42,7 @@ impl BitSlice for [Word] {
42
42
fn set_bit ( & mut self , idx : usize ) -> bool {
43
43
let words = self ;
44
44
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) ;
46
46
let BitLookup { word, bit_in_word, bit_mask } = bit_lookup ( idx) ;
47
47
debug ! ( "word={} bit_in_word={} bit_mask={}" , word, bit_in_word, bit_mask) ;
48
48
let oldv = words[ word] ;
@@ -78,13 +78,6 @@ fn bit_lookup(bit: usize) -> BitLookup {
78
78
BitLookup { word : word, bit_in_word : bit_in_word, bit_mask : bit_mask }
79
79
}
80
80
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
-
88
81
pub fn bits_to_string ( words : & [ Word ] , bits : usize ) -> String {
89
82
let mut result = String :: new ( ) ;
90
83
let mut sep = '[' ;
@@ -95,7 +88,7 @@ pub fn bits_to_string(words: &[Word], bits: usize) -> String {
95
88
let mut i = 0 ;
96
89
for & word in words. iter ( ) {
97
90
let mut v = word;
98
- loop { // for each byte in `v`:
91
+ for _ in 0 ..mem :: size_of :: < Word > ( ) { // for each byte in `v`:
99
92
let remain = bits - i;
100
93
// If less than a byte remains, then mask just that many bits.
101
94
let mask = if remain <= 8 { ( 1 << remain) - 1 } else { 0xFF } ;
@@ -110,14 +103,15 @@ pub fn bits_to_string(words: &[Word], bits: usize) -> String {
110
103
i += 8 ;
111
104
sep = '-' ;
112
105
}
106
+ sep = '|' ;
113
107
}
114
108
result. push ( ']' ) ;
115
109
return result
116
110
}
117
111
118
112
#[ 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 ] ,
121
115
op : & Op ) -> bool {
122
116
assert_eq ! ( out_vec. len( ) , in_vec. len( ) ) ;
123
117
let mut changed = false ;
@@ -132,21 +126,21 @@ pub fn bitwise<Op:BitwiseOperator>(out_vec: &mut [usize],
132
126
133
127
pub trait BitwiseOperator {
134
128
/// 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 ;
136
130
}
137
131
138
132
pub struct Intersect ;
139
133
impl BitwiseOperator for Intersect {
140
134
#[ inline]
141
- fn join ( & self , a : usize , b : usize ) -> usize { a & b }
135
+ fn join ( & self , a : Word , b : Word ) -> Word { a & b }
142
136
}
143
137
pub struct Union ;
144
138
impl BitwiseOperator for Union {
145
139
#[ inline]
146
- fn join ( & self , a : usize , b : usize ) -> usize { a | b }
140
+ fn join ( & self , a : Word , b : Word ) -> Word { a | b }
147
141
}
148
142
pub struct Subtract ;
149
143
impl BitwiseOperator for Subtract {
150
144
#[ inline]
151
- fn join ( & self , a : usize , b : usize ) -> usize { a & !b }
145
+ fn join ( & self , a : Word , b : Word ) -> Word { a & !b }
152
146
}
0 commit comments