1
- use crate :: bitmap:: bitmap_8k:: { bit, key, Bitmap8K , BITMAP_LENGTH } ;
2
- use crate :: bitmap:: store:: Store ;
3
- use crate :: bitmap:: store:: Store :: Bitmap ;
4
1
use std:: cmp:: Ordering ;
5
2
use std:: cmp:: Ordering :: * ;
6
3
use std:: convert:: { TryFrom , TryInto } ;
7
4
use std:: fmt:: { Display , Formatter } ;
8
5
use std:: ops:: { BitAnd , BitAndAssign , BitOr , BitXor , BitXorAssign , RangeInclusive , Sub , SubAssign } ;
9
6
7
+ use super :: bitmap_store:: { bit, key, BitmapStore , BITMAP_LENGTH } ;
8
+
10
9
#[ derive( Clone , Eq , PartialEq ) ]
11
- pub struct SortedU16Vec {
10
+ pub struct ArrayStore {
12
11
vec : Vec < u16 > ,
13
12
}
14
13
15
- impl SortedU16Vec {
16
- pub fn new ( ) -> SortedU16Vec {
17
- SortedU16Vec { vec : vec ! [ ] }
14
+ impl ArrayStore {
15
+ pub fn new ( ) -> ArrayStore {
16
+ ArrayStore { vec : vec ! [ ] }
18
17
}
19
18
20
19
///
@@ -25,11 +24,11 @@ impl SortedU16Vec {
25
24
/// # Panics
26
25
///
27
26
/// When debug_assertions are enabled and the above invariants are not met
28
- pub fn from_vec_unchecked ( vec : Vec < u16 > ) -> SortedU16Vec {
27
+ pub fn from_vec_unchecked ( vec : Vec < u16 > ) -> ArrayStore {
29
28
if cfg ! ( debug_assertions) {
30
29
vec. try_into ( ) . unwrap ( )
31
30
} else {
32
- SortedU16Vec { vec }
31
+ ArrayStore { vec }
33
32
}
34
33
}
35
34
@@ -131,14 +130,14 @@ impl SortedU16Vec {
131
130
}
132
131
}
133
132
134
- pub fn to_bitmap_store ( & self ) -> Store {
133
+ pub fn to_bitmap_store ( & self ) -> BitmapStore {
135
134
let mut bits = Box :: new ( [ 0 ; BITMAP_LENGTH ] ) ;
136
135
let len = self . len ( ) as u64 ;
137
136
138
137
for & index in self . iter ( ) {
139
138
bits[ key ( index) ] |= 1 << bit ( index) ;
140
139
}
141
- Bitmap ( Bitmap8K :: from_unchecked ( len, bits) )
140
+ BitmapStore :: from_unchecked ( len, bits)
142
141
}
143
142
144
143
pub fn len ( & self ) -> u64 {
@@ -166,9 +165,9 @@ impl SortedU16Vec {
166
165
}
167
166
}
168
167
169
- impl Default for SortedU16Vec {
168
+ impl Default for ArrayStore {
170
169
fn default ( ) -> Self {
171
- SortedU16Vec :: new ( )
170
+ ArrayStore :: new ( )
172
171
}
173
172
}
174
173
@@ -199,7 +198,7 @@ impl Display for Error {
199
198
200
199
impl std:: error:: Error for Error { }
201
200
202
- impl TryFrom < Vec < u16 > > for SortedU16Vec {
201
+ impl TryFrom < Vec < u16 > > for ArrayStore {
203
202
type Error = Error ;
204
203
205
204
fn try_from ( value : Vec < u16 > ) -> Result < Self , Self :: Error > {
@@ -215,12 +214,12 @@ impl TryFrom<Vec<u16>> for SortedU16Vec {
215
214
}
216
215
}
217
216
218
- Ok ( SortedU16Vec { vec } )
217
+ Ok ( ArrayStore { vec : value } )
219
218
}
220
219
}
221
220
222
- impl BitOr < Self > for & SortedU16Vec {
223
- type Output = SortedU16Vec ;
221
+ impl BitOr < Self > for & ArrayStore {
222
+ type Output = ArrayStore ;
224
223
225
224
fn bitor ( self , rhs : Self ) -> Self :: Output {
226
225
let mut vec = {
@@ -255,12 +254,12 @@ impl BitOr<Self> for &SortedU16Vec {
255
254
vec. extend_from_slice ( & self . vec [ i..] ) ;
256
255
vec. extend_from_slice ( & rhs. vec [ j..] ) ;
257
256
258
- SortedU16Vec { vec }
257
+ ArrayStore { vec }
259
258
}
260
259
}
261
260
262
- impl BitAnd < Self > for & SortedU16Vec {
263
- type Output = SortedU16Vec ;
261
+ impl BitAnd < Self > for & ArrayStore {
262
+ type Output = ArrayStore ;
264
263
265
264
fn bitand ( self , rhs : Self ) -> Self :: Output {
266
265
let mut vec = Vec :: new ( ) ;
@@ -282,11 +281,11 @@ impl BitAnd<Self> for &SortedU16Vec {
282
281
}
283
282
}
284
283
285
- SortedU16Vec { vec }
284
+ ArrayStore { vec }
286
285
}
287
286
}
288
287
289
- impl BitAndAssign < & Self > for SortedU16Vec {
288
+ impl BitAndAssign < & Self > for ArrayStore {
290
289
fn bitand_assign ( & mut self , rhs : & Self ) {
291
290
let mut i = 0 ;
292
291
self . vec . retain ( |x| {
@@ -296,14 +295,14 @@ impl BitAndAssign<&Self> for SortedU16Vec {
296
295
}
297
296
}
298
297
299
- impl BitAndAssign < & Bitmap8K > for SortedU16Vec {
300
- fn bitand_assign ( & mut self , rhs : & Bitmap8K ) {
298
+ impl BitAndAssign < & BitmapStore > for ArrayStore {
299
+ fn bitand_assign ( & mut self , rhs : & BitmapStore ) {
301
300
self . vec . retain ( |x| rhs. contains ( * x) ) ;
302
301
}
303
302
}
304
303
305
- impl Sub < Self > for & SortedU16Vec {
306
- type Output = SortedU16Vec ;
304
+ impl Sub < Self > for & ArrayStore {
305
+ type Output = ArrayStore ;
307
306
308
307
fn sub ( self , rhs : Self ) -> Self :: Output {
309
308
let mut vec = Vec :: new ( ) ;
@@ -330,11 +329,11 @@ impl Sub<Self> for &SortedU16Vec {
330
329
// Store remaining elements of the left array
331
330
vec. extend_from_slice ( & self . vec [ i..] ) ;
332
331
333
- SortedU16Vec { vec }
332
+ ArrayStore { vec }
334
333
}
335
334
}
336
335
337
- impl SubAssign < & Self > for SortedU16Vec {
336
+ impl SubAssign < & Self > for ArrayStore {
338
337
fn sub_assign ( & mut self , rhs : & Self ) {
339
338
let mut i = 0 ;
340
339
self . vec . retain ( |x| {
@@ -344,14 +343,14 @@ impl SubAssign<&Self> for SortedU16Vec {
344
343
}
345
344
}
346
345
347
- impl SubAssign < & Bitmap8K > for SortedU16Vec {
348
- fn sub_assign ( & mut self , rhs : & Bitmap8K ) {
346
+ impl SubAssign < & BitmapStore > for ArrayStore {
347
+ fn sub_assign ( & mut self , rhs : & BitmapStore ) {
349
348
self . vec . retain ( |x| !rhs. contains ( * x) ) ;
350
349
}
351
350
}
352
351
353
- impl BitXor < Self > for & SortedU16Vec {
354
- type Output = SortedU16Vec ;
352
+ impl BitXor < Self > for & ArrayStore {
353
+ type Output = ArrayStore ;
355
354
356
355
fn bitxor ( self , rhs : Self ) -> Self :: Output {
357
356
let mut vec = Vec :: new ( ) ;
@@ -382,11 +381,11 @@ impl BitXor<Self> for &SortedU16Vec {
382
381
vec. extend_from_slice ( & self . vec [ i..] ) ;
383
382
vec. extend_from_slice ( & rhs. vec [ j..] ) ;
384
383
385
- SortedU16Vec { vec }
384
+ ArrayStore { vec }
386
385
}
387
386
}
388
387
389
- impl BitXorAssign < & Self > for SortedU16Vec {
388
+ impl BitXorAssign < & Self > for ArrayStore {
390
389
fn bitxor_assign ( & mut self , rhs : & Self ) {
391
390
let mut i1 = 0usize ;
392
391
let mut iter2 = rhs. vec . iter ( ) ;
@@ -418,25 +417,26 @@ impl BitXorAssign<&Self> for SortedU16Vec {
418
417
#[ cfg( test) ]
419
418
mod tests {
420
419
use super :: * ;
420
+ use crate :: bitmap:: store:: Store ;
421
421
422
422
fn into_vec ( s : Store ) -> Vec < u16 > {
423
423
match s {
424
424
Store :: Array ( vec) => vec. vec ,
425
- Store :: Bitmap ( bits) => into_vec ( bits. to_array_store ( ) ) ,
425
+ Store :: Bitmap ( bits) => bits. to_array_store ( ) . vec ,
426
426
}
427
427
}
428
428
429
429
fn into_bitmap_store ( s : Store ) -> Store {
430
430
match s {
431
- Store :: Array ( vec) => vec. to_bitmap_store ( ) ,
432
- Bitmap ( ..) => s,
431
+ Store :: Array ( vec) => Store :: Bitmap ( vec. to_bitmap_store ( ) ) ,
432
+ Store :: Bitmap ( ..) => s,
433
433
}
434
434
}
435
435
436
436
#[ test]
437
437
#[ allow( clippy:: reversed_empty_ranges) ]
438
438
fn test_array_insert_invalid_range ( ) {
439
- let mut store = Store :: Array ( SortedU16Vec :: from_vec_unchecked ( vec ! [ 1 , 2 , 8 , 9 ] ) ) ;
439
+ let mut store = Store :: Array ( ArrayStore :: from_vec_unchecked ( vec ! [ 1 , 2 , 8 , 9 ] ) ) ;
440
440
441
441
// Insert a range with start > end.
442
442
let new = store. insert_range ( 6 ..=1 ) ;
@@ -447,7 +447,7 @@ mod tests {
447
447
448
448
#[ test]
449
449
fn test_array_insert_range ( ) {
450
- let mut store = Store :: Array ( SortedU16Vec :: from_vec_unchecked ( vec ! [ 1 , 2 , 8 , 9 ] ) ) ;
450
+ let mut store = Store :: Array ( ArrayStore :: from_vec_unchecked ( vec ! [ 1 , 2 , 8 , 9 ] ) ) ;
451
451
452
452
let new = store. insert_range ( 4 ..=5 ) ;
453
453
assert_eq ! ( new, 2 ) ;
@@ -457,7 +457,7 @@ mod tests {
457
457
458
458
#[ test]
459
459
fn test_array_insert_range_left_overlap ( ) {
460
- let mut store = Store :: Array ( SortedU16Vec :: from_vec_unchecked ( vec ! [ 1 , 2 , 8 , 9 ] ) ) ;
460
+ let mut store = Store :: Array ( ArrayStore :: from_vec_unchecked ( vec ! [ 1 , 2 , 8 , 9 ] ) ) ;
461
461
462
462
let new = store. insert_range ( 2 ..=5 ) ;
463
463
assert_eq ! ( new, 3 ) ;
@@ -467,7 +467,7 @@ mod tests {
467
467
468
468
#[ test]
469
469
fn test_array_insert_range_right_overlap ( ) {
470
- let mut store = Store :: Array ( SortedU16Vec :: from_vec_unchecked ( vec ! [ 1 , 2 , 8 , 9 ] ) ) ;
470
+ let mut store = Store :: Array ( ArrayStore :: from_vec_unchecked ( vec ! [ 1 , 2 , 8 , 9 ] ) ) ;
471
471
472
472
let new = store. insert_range ( 4 ..=8 ) ;
473
473
assert_eq ! ( new, 4 ) ;
@@ -477,7 +477,7 @@ mod tests {
477
477
478
478
#[ test]
479
479
fn test_array_insert_range_full_overlap ( ) {
480
- let mut store = Store :: Array ( SortedU16Vec :: from_vec_unchecked ( vec ! [ 1 , 2 , 8 , 9 ] ) ) ;
480
+ let mut store = Store :: Array ( ArrayStore :: from_vec_unchecked ( vec ! [ 1 , 2 , 8 , 9 ] ) ) ;
481
481
482
482
let new = store. insert_range ( 1 ..=9 ) ;
483
483
assert_eq ! ( new, 5 ) ;
@@ -488,7 +488,7 @@ mod tests {
488
488
#[ test]
489
489
#[ allow( clippy:: reversed_empty_ranges) ]
490
490
fn test_bitmap_insert_invalid_range ( ) {
491
- let store = Store :: Array ( SortedU16Vec :: from_vec_unchecked ( vec ! [ 1 , 2 , 8 , 9 ] ) ) ;
491
+ let store = Store :: Array ( ArrayStore :: from_vec_unchecked ( vec ! [ 1 , 2 , 8 , 9 ] ) ) ;
492
492
let mut store = into_bitmap_store ( store) ;
493
493
494
494
// Insert a range with start > end.
@@ -500,7 +500,7 @@ mod tests {
500
500
501
501
#[ test]
502
502
fn test_bitmap_insert_same_key_overlap ( ) {
503
- let store = Store :: Array ( SortedU16Vec :: from_vec_unchecked ( vec ! [ 1 , 2 , 3 , 62 , 63 ] ) ) ;
503
+ let store = Store :: Array ( ArrayStore :: from_vec_unchecked ( vec ! [ 1 , 2 , 3 , 62 , 63 ] ) ) ;
504
504
let mut store = into_bitmap_store ( store) ;
505
505
506
506
let new = store. insert_range ( 1 ..=62 ) ;
@@ -511,7 +511,7 @@ mod tests {
511
511
512
512
#[ test]
513
513
fn test_bitmap_insert_range ( ) {
514
- let store = Store :: Array ( SortedU16Vec :: from_vec_unchecked ( vec ! [ 1 , 2 , 130 ] ) ) ;
514
+ let store = Store :: Array ( ArrayStore :: from_vec_unchecked ( vec ! [ 1 , 2 , 130 ] ) ) ;
515
515
let mut store = into_bitmap_store ( store) ;
516
516
517
517
let new = store. insert_range ( 4 ..=128 ) ;
@@ -526,7 +526,7 @@ mod tests {
526
526
527
527
#[ test]
528
528
fn test_bitmap_insert_range_left_overlap ( ) {
529
- let store = Store :: Array ( SortedU16Vec :: from_vec_unchecked ( vec ! [ 1 , 2 , 130 ] ) ) ;
529
+ let store = Store :: Array ( ArrayStore :: from_vec_unchecked ( vec ! [ 1 , 2 , 130 ] ) ) ;
530
530
let mut store = into_bitmap_store ( store) ;
531
531
532
532
let new = store. insert_range ( 1 ..=128 ) ;
@@ -541,7 +541,7 @@ mod tests {
541
541
542
542
#[ test]
543
543
fn test_bitmap_insert_range_right_overlap ( ) {
544
- let store = Store :: Array ( SortedU16Vec :: from_vec_unchecked ( vec ! [ 1 , 2 , 130 ] ) ) ;
544
+ let store = Store :: Array ( ArrayStore :: from_vec_unchecked ( vec ! [ 1 , 2 , 130 ] ) ) ;
545
545
let mut store = into_bitmap_store ( store) ;
546
546
547
547
let new = store. insert_range ( 4 ..=132 ) ;
@@ -555,7 +555,7 @@ mod tests {
555
555
556
556
#[ test]
557
557
fn test_bitmap_insert_range_full_overlap ( ) {
558
- let store = Store :: Array ( SortedU16Vec :: from_vec_unchecked ( vec ! [ 1 , 2 , 130 ] ) ) ;
558
+ let store = Store :: Array ( ArrayStore :: from_vec_unchecked ( vec ! [ 1 , 2 , 130 ] ) ) ;
559
559
let mut store = into_bitmap_store ( store) ;
560
560
561
561
let new = store. insert_range ( 1 ..=134 ) ;
0 commit comments