@@ -5,10 +5,10 @@ use super::Bitfield;
55/// Iterate over a bitfield.
66#[ derive( Debug ) ]
77pub struct Iterator < ' a > {
8- start : usize ,
9- end : usize ,
10- index_end : usize ,
11- pos : Option < usize > ,
8+ start : u64 ,
9+ end : u64 ,
10+ index_end : u64 ,
11+ pos : Option < u64 > ,
1212 byte : u8 ,
1313 bitfield : & ' a mut Bitfield ,
1414}
@@ -27,7 +27,7 @@ impl<'a> Iterator<'a> {
2727 }
2828
2929 /// Grow the bitfield if needed.
30- pub fn range ( & mut self , start : usize , end : usize ) {
30+ pub fn range ( & mut self , start : u64 , end : u64 ) {
3131 self . start = start;
3232 self . end = end;
3333 self . index_end = 2 * ( ( end + 31 ) / 32 ) ;
@@ -38,7 +38,7 @@ impl<'a> Iterator<'a> {
3838 }
3939
4040 /// Seek to `offset`
41- pub fn seek ( & mut self , mut offset : usize ) -> & mut Self {
41+ pub fn seek ( & mut self , mut offset : u64 ) -> & mut Self {
4242 offset += self . start ;
4343 // FIXME This is fishy. Offset and start is unsigned, so `offset < self.start` can only
4444 // be true when the previous addition overflows. The overflow would cause a panic, so,
@@ -58,50 +58,51 @@ impl<'a> Iterator<'a> {
5858 let pos = offset / 8 ;
5959 self . pos = Some ( pos) ;
6060
61- self . byte = self . bitfield . data . get_byte ( pos) | self . bitfield . masks . data_iterate [ o] ;
61+ self . byte = self . bitfield . data . get_byte ( pos as usize )
62+ | self . bitfield . masks . data_iterate [ o as usize ] ;
6263
6364 self
6465 }
6566
66- pub fn next ( & mut self ) -> Option < usize > {
67+ pub fn next ( & mut self ) -> Option < u64 > {
6768 let mut pos = self . pos ?;
6869
6970 let mut free = self . bitfield . masks . next_data_0_bit [ self . byte as usize ] ;
7071
7172 while free == -1 {
7273 pos += 1 ;
73- self . byte = self . bitfield . data . get_byte ( pos) ;
74+ self . byte = self . bitfield . data . get_byte ( pos as usize ) ;
7475 free = self . bitfield . masks . next_data_0_bit [ self . byte as usize ] ;
7576
7677 if free == -1 {
7778 pos = self . skip_ahead ( pos) ?;
7879
79- self . byte = self . bitfield . data . get_byte ( pos) ;
80+ self . byte = self . bitfield . data . get_byte ( pos as usize ) ;
8081 free = self . bitfield . masks . next_data_0_bit [ self . byte as usize ] ;
8182 }
8283 }
8384 self . pos = Some ( pos) ;
8485
8586 self . byte |= self . bitfield . masks . data_iterate [ free as usize + 1 ] ;
8687
87- let n = 8 * pos + free as usize ;
88+ let n = 8 * pos + free as u64 ;
8889 if n < self . end {
8990 Some ( n)
9091 } else {
9192 None
9293 }
9394 }
9495
95- pub fn skip_ahead ( & mut self , start : usize ) -> Option < usize > {
96+ pub fn skip_ahead ( & mut self , start : u64 ) -> Option < u64 > {
9697 let bitfield_index = & self . bitfield . index ;
9798 let tree_end = self . index_end ;
9899 let iter = & mut self . bitfield . iterator ;
99100 let o = start & 3 ;
100101
101102 iter. seek ( 2 * ( start / 4 ) ) ;
102103
103- let mut tree_byte =
104- bitfield_index . get_byte ( iter . index ( ) ) | self . bitfield . masks . index_iterate [ o] ;
104+ let mut tree_byte = bitfield_index . get_byte ( iter . index ( ) as usize )
105+ | self . bitfield . masks . index_iterate [ o as usize ] ;
105106
106107 while self . bitfield . masks . next_index_0_bit [ tree_byte as usize ] == -1 {
107108 if iter. is_left ( ) {
@@ -120,7 +121,7 @@ impl<'a> Iterator<'a> {
120121 }
121122 }
122123
123- tree_byte = bitfield_index. get_byte ( iter. index ( ) ) ;
124+ tree_byte = bitfield_index. get_byte ( iter. index ( ) as usize ) ;
124125 }
125126
126127 while iter. factor ( ) > 2 {
@@ -130,15 +131,15 @@ impl<'a> Iterator<'a> {
130131 iter. right_child ( ) ;
131132 }
132133
133- tree_byte = bitfield_index. get_byte ( iter. index ( ) ) ;
134+ tree_byte = bitfield_index. get_byte ( iter. index ( ) as usize ) ;
134135 }
135136
136137 let mut free = self . bitfield . masks . next_index_0_bit [ tree_byte as usize ] ;
137138 if free == -1 {
138139 free = 4 ;
139140 }
140141
141- let next = iter. index ( ) * 2 + free as usize ;
142+ let next = iter. index ( ) * 2 + free as u64 ;
142143
143144 if next <= start {
144145 Some ( start + 1 )
@@ -148,7 +149,7 @@ impl<'a> Iterator<'a> {
148149 }
149150}
150151
151- fn right_span ( iter : & flat_tree:: Iterator ) -> usize {
152+ fn right_span ( iter : & flat_tree:: Iterator ) -> u64 {
152153 iter. index ( ) + iter. factor ( ) / 2 - 1
153154}
154155
0 commit comments