@@ -189,17 +189,17 @@ fn blocks_for_bits(bits: usize) -> usize {
189
189
//
190
190
// Note that we can technically avoid this branch with the expression
191
191
// `(nbits + u32::BITS - 1) / 32::BITS`, but if nbits is almost usize::MAX this will overflow.
192
- if bits % u32:: BITS == 0 {
193
- bits / u32:: BITS
192
+ if bits % u32:: BITS as usize == 0 {
193
+ bits / u32:: BITS as usize
194
194
} else {
195
- bits / u32:: BITS + 1
195
+ bits / u32:: BITS as usize + 1
196
196
}
197
197
}
198
198
199
199
/// Computes the bitmask for the final word of the vector
200
200
fn mask_for_bits ( bits : usize ) -> u32 {
201
201
// Note especially that a perfect multiple of u32::BITS should mask all 1s.
202
- !0u32 >> ( u32:: BITS - bits % u32:: BITS ) % u32:: BITS
202
+ !0u32 >> ( u32:: BITS as usize - bits % u32:: BITS as usize ) % u32:: BITS as usize
203
203
}
204
204
205
205
impl BitVec {
@@ -237,7 +237,7 @@ impl BitVec {
237
237
/// An operation might screw up the unused bits in the last block of the
238
238
/// `BitVec`. As per (3), it's assumed to be all 0s. This method fixes it up.
239
239
fn fix_last_block ( & mut self ) {
240
- let extra_bits = self . len ( ) % u32:: BITS ;
240
+ let extra_bits = self . len ( ) % u32:: BITS as usize ;
241
241
if extra_bits > 0 {
242
242
let mask = ( 1 << extra_bits) - 1 ;
243
243
let storage_len = self . storage . len ( ) ;
@@ -313,7 +313,7 @@ impl BitVec {
313
313
/// false, false, true, false]));
314
314
/// ```
315
315
pub fn from_bytes ( bytes : & [ u8 ] ) -> BitVec {
316
- let len = bytes. len ( ) . checked_mul ( u8:: BITS ) . expect ( "capacity overflow" ) ;
316
+ let len = bytes. len ( ) . checked_mul ( u8:: BITS as usize ) . expect ( "capacity overflow" ) ;
317
317
let mut bit_vec = BitVec :: with_capacity ( len) ;
318
318
let complete_words = bytes. len ( ) / 4 ;
319
319
let extra_bytes = bytes. len ( ) % 4 ;
@@ -380,8 +380,8 @@ impl BitVec {
380
380
if i >= self . nbits {
381
381
return None ;
382
382
}
383
- let w = i / u32:: BITS ;
384
- let b = i % u32:: BITS ;
383
+ let w = i / u32:: BITS as usize ;
384
+ let b = i % u32:: BITS as usize ;
385
385
self . storage . get ( w) . map ( |& block|
386
386
( block & ( 1 << b) ) != 0
387
387
)
@@ -407,8 +407,8 @@ impl BitVec {
407
407
reason = "panic semantics are likely to change in the future" ) ]
408
408
pub fn set ( & mut self , i : usize , x : bool ) {
409
409
assert ! ( i < self . nbits) ;
410
- let w = i / u32:: BITS ;
411
- let b = i % u32:: BITS ;
410
+ let w = i / u32:: BITS as usize ;
411
+ let b = i % u32:: BITS as usize ;
412
412
let flag = 1 << b;
413
413
let val = if x { self . storage [ w] | flag }
414
414
else { self . storage [ w] & !flag } ;
@@ -789,7 +789,7 @@ impl BitVec {
789
789
#[ inline]
790
790
#[ stable( feature = "rust1" , since = "1.0.0" ) ]
791
791
pub fn capacity ( & self ) -> usize {
792
- self . storage . capacity ( ) . checked_mul ( u32:: BITS ) . unwrap_or ( usize:: MAX )
792
+ self . storage . capacity ( ) . checked_mul ( u32:: BITS as usize ) . unwrap_or ( usize:: MAX )
793
793
}
794
794
795
795
/// Grows the `BitVec` in-place, adding `n` copies of `value` to the `BitVec`.
@@ -819,7 +819,7 @@ impl BitVec {
819
819
820
820
// Correct the old tail word, setting or clearing formerly unused bits
821
821
let old_last_word = blocks_for_bits ( self . nbits ) - 1 ;
822
- if self . nbits % u32:: BITS > 0 {
822
+ if self . nbits % u32:: BITS as usize > 0 {
823
823
let mask = mask_for_bits ( self . nbits ) ;
824
824
if value {
825
825
self . storage [ old_last_word] |= !mask;
@@ -868,7 +868,7 @@ impl BitVec {
868
868
// (3)
869
869
self . set ( i, false ) ;
870
870
self . nbits = i;
871
- if self . nbits % u32:: BITS == 0 {
871
+ if self . nbits % u32:: BITS as usize == 0 {
872
872
// (2)
873
873
self . storage . pop ( ) ;
874
874
}
@@ -890,7 +890,7 @@ impl BitVec {
890
890
/// ```
891
891
#[ stable( feature = "rust1" , since = "1.0.0" ) ]
892
892
pub fn push ( & mut self , elem : bool ) {
893
- if self . nbits % u32:: BITS == 0 {
893
+ if self . nbits % u32:: BITS as usize == 0 {
894
894
self . storage . push ( 0 ) ;
895
895
}
896
896
let insert_pos = self . nbits ;
@@ -1417,7 +1417,7 @@ impl BitSet {
1417
1417
// Truncate
1418
1418
let trunc_len = cmp:: max ( old_len - n, 1 ) ;
1419
1419
bit_vec. storage . truncate ( trunc_len) ;
1420
- bit_vec. nbits = trunc_len * u32:: BITS ;
1420
+ bit_vec. nbits = trunc_len * u32:: BITS as usize ;
1421
1421
}
1422
1422
1423
1423
/// Iterator over each u32 stored in the `BitSet`.
@@ -1674,7 +1674,7 @@ impl BitSet {
1674
1674
#[ inline]
1675
1675
#[ stable( feature = "rust1" , since = "1.0.0" ) ]
1676
1676
pub fn len ( & self ) -> usize {
1677
- self . bit_vec . blocks ( ) . fold ( 0 , |acc, n| acc + n. count_ones ( ) )
1677
+ self . bit_vec . blocks ( ) . fold ( 0 , |acc, n| acc + n. count_ones ( ) as usize )
1678
1678
}
1679
1679
1680
1680
/// Returns whether there are no bits set in this set
@@ -1851,13 +1851,13 @@ impl<'a> Iterator for TwoBitPositions<'a> {
1851
1851
fn next ( & mut self ) -> Option < usize > {
1852
1852
while self . next_idx < self . set . bit_vec . len ( ) ||
1853
1853
self . next_idx < self . other . bit_vec . len ( ) {
1854
- let bit_idx = self . next_idx % u32:: BITS ;
1854
+ let bit_idx = self . next_idx % u32:: BITS as usize ;
1855
1855
if bit_idx == 0 {
1856
1856
let s_bit_vec = & self . set . bit_vec ;
1857
1857
let o_bit_vec = & self . other . bit_vec ;
1858
1858
// Merging the two words is a bit of an awkward dance since
1859
1859
// one BitVec might be longer than the other
1860
- let word_idx = self . next_idx / u32:: BITS ;
1860
+ let word_idx = self . next_idx / u32:: BITS as usize ;
1861
1861
let w1 = if word_idx < s_bit_vec. storage . len ( ) {
1862
1862
s_bit_vec. storage [ word_idx]
1863
1863
} else { 0 } ;
@@ -2461,70 +2461,70 @@ mod tests {
2461
2461
2462
2462
#[ test]
2463
2463
fn test_bit_vec_push_pop ( ) {
2464
- let mut s = BitVec :: from_elem ( 5 * u32:: BITS - 2 , false ) ;
2465
- assert_eq ! ( s. len( ) , 5 * u32 :: BITS - 2 ) ;
2466
- assert_eq ! ( s[ 5 * u32 :: BITS - 3 ] , false ) ;
2464
+ let mut s = BitVec :: from_elem ( 5 * u32:: BITS as usize - 2 , false ) ;
2465
+ assert_eq ! ( s. len( ) , 5 * u32 :: BITS as usize - 2 ) ;
2466
+ assert_eq ! ( s[ 5 * u32 :: BITS as usize - 3 ] , false ) ;
2467
2467
s. push ( true ) ;
2468
2468
s. push ( true ) ;
2469
- assert_eq ! ( s[ 5 * u32 :: BITS - 2 ] , true ) ;
2470
- assert_eq ! ( s[ 5 * u32 :: BITS - 1 ] , true ) ;
2469
+ assert_eq ! ( s[ 5 * u32 :: BITS as usize - 2 ] , true ) ;
2470
+ assert_eq ! ( s[ 5 * u32 :: BITS as usize - 1 ] , true ) ;
2471
2471
// Here the internal vector will need to be extended
2472
2472
s. push ( false ) ;
2473
- assert_eq ! ( s[ 5 * u32 :: BITS ] , false ) ;
2473
+ assert_eq ! ( s[ 5 * u32 :: BITS as usize ] , false ) ;
2474
2474
s. push ( false ) ;
2475
- assert_eq ! ( s[ 5 * u32 :: BITS + 1 ] , false ) ;
2476
- assert_eq ! ( s. len( ) , 5 * u32 :: BITS + 2 ) ;
2475
+ assert_eq ! ( s[ 5 * u32 :: BITS as usize + 1 ] , false ) ;
2476
+ assert_eq ! ( s. len( ) , 5 * u32 :: BITS as usize + 2 ) ;
2477
2477
// Pop it all off
2478
2478
assert_eq ! ( s. pop( ) , Some ( false ) ) ;
2479
2479
assert_eq ! ( s. pop( ) , Some ( false ) ) ;
2480
2480
assert_eq ! ( s. pop( ) , Some ( true ) ) ;
2481
2481
assert_eq ! ( s. pop( ) , Some ( true ) ) ;
2482
- assert_eq ! ( s. len( ) , 5 * u32 :: BITS - 2 ) ;
2482
+ assert_eq ! ( s. len( ) , 5 * u32 :: BITS as usize - 2 ) ;
2483
2483
}
2484
2484
2485
2485
#[ test]
2486
2486
fn test_bit_vec_truncate ( ) {
2487
- let mut s = BitVec :: from_elem ( 5 * u32:: BITS , true ) ;
2487
+ let mut s = BitVec :: from_elem ( 5 * u32:: BITS as usize , true ) ;
2488
2488
2489
- assert_eq ! ( s, BitVec :: from_elem( 5 * u32 :: BITS , true ) ) ;
2490
- assert_eq ! ( s. len( ) , 5 * u32 :: BITS ) ;
2491
- s. truncate ( 4 * u32:: BITS ) ;
2492
- assert_eq ! ( s, BitVec :: from_elem( 4 * u32 :: BITS , true ) ) ;
2493
- assert_eq ! ( s. len( ) , 4 * u32 :: BITS ) ;
2489
+ assert_eq ! ( s, BitVec :: from_elem( 5 * u32 :: BITS as usize , true ) ) ;
2490
+ assert_eq ! ( s. len( ) , 5 * u32 :: BITS as usize ) ;
2491
+ s. truncate ( 4 * u32:: BITS as usize ) ;
2492
+ assert_eq ! ( s, BitVec :: from_elem( 4 * u32 :: BITS as usize , true ) ) ;
2493
+ assert_eq ! ( s. len( ) , 4 * u32 :: BITS as usize ) ;
2494
2494
// Truncating to a size > s.len() should be a noop
2495
- s. truncate ( 5 * u32:: BITS ) ;
2496
- assert_eq ! ( s, BitVec :: from_elem( 4 * u32 :: BITS , true ) ) ;
2497
- assert_eq ! ( s. len( ) , 4 * u32 :: BITS ) ;
2498
- s. truncate ( 3 * u32:: BITS - 10 ) ;
2499
- assert_eq ! ( s, BitVec :: from_elem( 3 * u32 :: BITS - 10 , true ) ) ;
2500
- assert_eq ! ( s. len( ) , 3 * u32 :: BITS - 10 ) ;
2495
+ s. truncate ( 5 * u32:: BITS as usize ) ;
2496
+ assert_eq ! ( s, BitVec :: from_elem( 4 * u32 :: BITS as usize , true ) ) ;
2497
+ assert_eq ! ( s. len( ) , 4 * u32 :: BITS as usize ) ;
2498
+ s. truncate ( 3 * u32:: BITS as usize - 10 ) ;
2499
+ assert_eq ! ( s, BitVec :: from_elem( 3 * u32 :: BITS as usize - 10 , true ) ) ;
2500
+ assert_eq ! ( s. len( ) , 3 * u32 :: BITS as usize - 10 ) ;
2501
2501
s. truncate ( 0 ) ;
2502
2502
assert_eq ! ( s, BitVec :: from_elem( 0 , true ) ) ;
2503
2503
assert_eq ! ( s. len( ) , 0 ) ;
2504
2504
}
2505
2505
2506
2506
#[ test]
2507
2507
fn test_bit_vec_reserve ( ) {
2508
- let mut s = BitVec :: from_elem ( 5 * u32:: BITS , true ) ;
2508
+ let mut s = BitVec :: from_elem ( 5 * u32:: BITS as usize , true ) ;
2509
2509
// Check capacity
2510
- assert ! ( s. capacity( ) >= 5 * u32 :: BITS ) ;
2511
- s. reserve ( 2 * u32:: BITS ) ;
2512
- assert ! ( s. capacity( ) >= 7 * u32 :: BITS ) ;
2513
- s. reserve ( 7 * u32:: BITS ) ;
2514
- assert ! ( s. capacity( ) >= 12 * u32 :: BITS ) ;
2515
- s. reserve_exact ( 7 * u32:: BITS ) ;
2516
- assert ! ( s. capacity( ) >= 12 * u32 :: BITS ) ;
2517
- s. reserve ( 7 * u32:: BITS + 1 ) ;
2518
- assert ! ( s. capacity( ) >= 12 * u32 :: BITS + 1 ) ;
2510
+ assert ! ( s. capacity( ) >= 5 * u32 :: BITS as usize ) ;
2511
+ s. reserve ( 2 * u32:: BITS as usize ) ;
2512
+ assert ! ( s. capacity( ) >= 7 * u32 :: BITS as usize ) ;
2513
+ s. reserve ( 7 * u32:: BITS as usize ) ;
2514
+ assert ! ( s. capacity( ) >= 12 * u32 :: BITS as usize ) ;
2515
+ s. reserve_exact ( 7 * u32:: BITS as usize ) ;
2516
+ assert ! ( s. capacity( ) >= 12 * u32 :: BITS as usize ) ;
2517
+ s. reserve ( 7 * u32:: BITS as usize + 1 ) ;
2518
+ assert ! ( s. capacity( ) >= 12 * u32 :: BITS as usize + 1 ) ;
2519
2519
// Check that length hasn't changed
2520
- assert_eq ! ( s. len( ) , 5 * u32 :: BITS ) ;
2520
+ assert_eq ! ( s. len( ) , 5 * u32 :: BITS as usize ) ;
2521
2521
s. push ( true ) ;
2522
2522
s. push ( false ) ;
2523
2523
s. push ( true ) ;
2524
- assert_eq ! ( s[ 5 * u32 :: BITS - 1 ] , true ) ;
2525
- assert_eq ! ( s[ 5 * u32 :: BITS - 0 ] , true ) ;
2526
- assert_eq ! ( s[ 5 * u32 :: BITS + 1 ] , false ) ;
2527
- assert_eq ! ( s[ 5 * u32 :: BITS + 2 ] , true ) ;
2524
+ assert_eq ! ( s[ 5 * u32 :: BITS as usize - 1 ] , true ) ;
2525
+ assert_eq ! ( s[ 5 * u32 :: BITS as usize - 0 ] , true ) ;
2526
+ assert_eq ! ( s[ 5 * u32 :: BITS as usize + 1 ] , false ) ;
2527
+ assert_eq ! ( s[ 5 * u32 :: BITS as usize + 2 ] , true ) ;
2528
2528
}
2529
2529
2530
2530
#[ test]
@@ -2577,7 +2577,7 @@ mod bit_vec_bench {
2577
2577
let mut bit_vec = 0 as usize ;
2578
2578
b. iter ( || {
2579
2579
for _ in 0 ..100 {
2580
- bit_vec |= 1 << ( ( r. next_u32 ( ) as usize ) % u32:: BITS ) ;
2580
+ bit_vec |= 1 << ( ( r. next_u32 ( ) as usize ) % u32:: BITS as usize ) ;
2581
2581
}
2582
2582
black_box ( & bit_vec) ;
2583
2583
} ) ;
@@ -2610,10 +2610,10 @@ mod bit_vec_bench {
2610
2610
#[ bench]
2611
2611
fn bench_bit_set_small ( b : & mut Bencher ) {
2612
2612
let mut r = rng ( ) ;
2613
- let mut bit_vec = BitVec :: from_elem ( u32:: BITS , false ) ;
2613
+ let mut bit_vec = BitVec :: from_elem ( u32:: BITS as usize , false ) ;
2614
2614
b. iter ( || {
2615
2615
for _ in 0 ..100 {
2616
- bit_vec. set ( ( r. next_u32 ( ) as usize ) % u32:: BITS , true ) ;
2616
+ bit_vec. set ( ( r. next_u32 ( ) as usize ) % u32:: BITS as usize , true ) ;
2617
2617
}
2618
2618
black_box ( & bit_vec) ;
2619
2619
} ) ;
@@ -2630,7 +2630,7 @@ mod bit_vec_bench {
2630
2630
2631
2631
#[ bench]
2632
2632
fn bench_bit_vec_small_iter ( b : & mut Bencher ) {
2633
- let bit_vec = BitVec :: from_elem ( u32:: BITS , false ) ;
2633
+ let bit_vec = BitVec :: from_elem ( u32:: BITS as usize , false ) ;
2634
2634
b. iter ( || {
2635
2635
let mut sum = 0 ;
2636
2636
for _ in 0 ..10 {
@@ -3072,7 +3072,7 @@ mod bit_set_bench {
3072
3072
let mut bit_vec = BitSet :: new ( ) ;
3073
3073
b. iter ( || {
3074
3074
for _ in 0 ..100 {
3075
- bit_vec. insert ( ( r. next_u32 ( ) as usize ) % u32:: BITS ) ;
3075
+ bit_vec. insert ( ( r. next_u32 ( ) as usize ) % u32:: BITS as usize ) ;
3076
3076
}
3077
3077
black_box ( & bit_vec) ;
3078
3078
} ) ;
0 commit comments