@@ -68,34 +68,34 @@ impl<T: Idx> fmt::Debug for IdxSet<T> {
68
68
}
69
69
70
70
impl < T : Idx > IdxSet < T > {
71
- fn new ( init : Word , universe_size : usize ) -> Self {
72
- let num_words = ( universe_size + ( BITS_PER_WORD - 1 ) ) / BITS_PER_WORD ;
71
+ fn new ( init : Word , domain_size : usize ) -> Self {
72
+ let num_words = ( domain_size + ( BITS_PER_WORD - 1 ) ) / BITS_PER_WORD ;
73
73
IdxSet {
74
74
_pd : Default :: default ( ) ,
75
75
bits : vec ! [ init; num_words] ,
76
76
}
77
77
}
78
78
79
- /// Creates set holding every element whose index falls in range 0..universe_size .
80
- pub fn new_filled ( universe_size : usize ) -> Self {
81
- let mut result = Self :: new ( !0 , universe_size ) ;
82
- result. trim_to ( universe_size ) ;
79
+ /// Creates set holding every element whose index falls in range 0..domain_size .
80
+ pub fn new_filled ( domain_size : usize ) -> Self {
81
+ let mut result = Self :: new ( !0 , domain_size ) ;
82
+ result. trim_to ( domain_size ) ;
83
83
result
84
84
}
85
85
86
86
/// Creates set holding no elements.
87
- pub fn new_empty ( universe_size : usize ) -> Self {
88
- Self :: new ( 0 , universe_size )
87
+ pub fn new_empty ( domain_size : usize ) -> Self {
88
+ Self :: new ( 0 , domain_size )
89
89
}
90
90
91
91
/// Duplicates as a hybrid set.
92
92
pub fn to_hybrid ( & self ) -> HybridIdxSet < T > {
93
- // This universe_size may be slightly larger than the one specified
93
+ // This domain_size may be slightly larger than the one specified
94
94
// upon creation, due to rounding up to a whole word. That's ok.
95
- let universe_size = self . bits . len ( ) * BITS_PER_WORD ;
95
+ let domain_size = self . bits . len ( ) * BITS_PER_WORD ;
96
96
97
97
// Note: we currently don't bother trying to make a Sparse set.
98
- HybridIdxSet :: Dense ( self . to_owned ( ) , universe_size )
98
+ HybridIdxSet :: Dense ( self . to_owned ( ) , domain_size )
99
99
}
100
100
101
101
/// Removes all elements
@@ -105,29 +105,29 @@ impl<T: Idx> IdxSet<T> {
105
105
}
106
106
}
107
107
108
- /// Sets all elements up to `universe_size `
109
- pub fn set_up_to ( & mut self , universe_size : usize ) {
108
+ /// Sets all elements up to `domain_size `
109
+ pub fn set_up_to ( & mut self , domain_size : usize ) {
110
110
for b in & mut self . bits {
111
111
* b = !0 ;
112
112
}
113
- self . trim_to ( universe_size ) ;
113
+ self . trim_to ( domain_size ) ;
114
114
}
115
115
116
- /// Clear all elements above `universe_size `.
117
- fn trim_to ( & mut self , universe_size : usize ) {
116
+ /// Clear all elements above `domain_size `.
117
+ fn trim_to ( & mut self , domain_size : usize ) {
118
118
// `trim_block` is the first block where some bits have
119
119
// to be cleared.
120
- let trim_block = universe_size / BITS_PER_WORD ;
120
+ let trim_block = domain_size / BITS_PER_WORD ;
121
121
122
122
// all the blocks above it have to be completely cleared.
123
123
if trim_block < self . bits . len ( ) {
124
124
for b in & mut self . bits [ trim_block+1 ..] {
125
125
* b = 0 ;
126
126
}
127
127
128
- // at that block, the `universe_size % BITS_PER_WORD` lsbs
128
+ // at that block, the `domain_size % BITS_PER_WORD` LSBs
129
129
// should remain.
130
- let remaining_bits = universe_size % BITS_PER_WORD ;
130
+ let remaining_bits = domain_size % BITS_PER_WORD ;
131
131
let mask = ( 1 <<remaining_bits) -1 ;
132
132
self . bits [ trim_block] &= mask;
133
133
}
@@ -293,8 +293,8 @@ impl<T: Idx> SparseIdxSet<T> {
293
293
}
294
294
}
295
295
296
- fn to_dense ( & self , universe_size : usize ) -> IdxSet < T > {
297
- let mut dense = IdxSet :: new_empty ( universe_size ) ;
296
+ fn to_dense ( & self , domain_size : usize ) -> IdxSet < T > {
297
+ let mut dense = IdxSet :: new_empty ( domain_size ) ;
298
298
for elem in self . 0 . iter ( ) {
299
299
dense. add ( elem) ;
300
300
}
@@ -323,28 +323,24 @@ impl<'a, T: Idx> Iterator for SparseIter<'a, T> {
323
323
/// Like IdxSet, but with a hybrid representation: sparse when there are few
324
324
/// elements in the set, but dense when there are many. It's especially
325
325
/// efficient for sets that typically have a small number of elements, but a
326
- /// large `universe_size `, and are cleared frequently.
326
+ /// large `domain_size `, and are cleared frequently.
327
327
#[ derive( Clone , Debug ) ]
328
328
pub enum HybridIdxSet < T : Idx > {
329
329
Sparse ( SparseIdxSet < T > , usize ) ,
330
330
Dense ( IdxSet < T > , usize ) ,
331
331
}
332
332
333
333
impl < T : Idx > HybridIdxSet < T > {
334
- pub fn new_empty ( universe_size : usize ) -> Self {
335
- HybridIdxSet :: Sparse ( SparseIdxSet :: new ( ) , universe_size )
334
+ pub fn new_empty ( domain_size : usize ) -> Self {
335
+ HybridIdxSet :: Sparse ( SparseIdxSet :: new ( ) , domain_size )
336
336
}
337
337
338
- fn universe_size ( & mut self ) -> usize {
339
- match * self {
338
+ pub fn clear ( & mut self ) {
339
+ let domain_size = match * self {
340
340
HybridIdxSet :: Sparse ( _, size) => size,
341
341
HybridIdxSet :: Dense ( _, size) => size,
342
- }
343
- }
344
-
345
- pub fn clear ( & mut self ) {
346
- let universe_size = self . universe_size ( ) ;
347
- * self = HybridIdxSet :: new_empty ( universe_size) ;
342
+ } ;
343
+ * self = HybridIdxSet :: new_empty ( domain_size) ;
348
344
}
349
345
350
346
/// Returns true iff set `self` contains `elem`.
@@ -374,11 +370,11 @@ impl<T: Idx> HybridIdxSet<T> {
374
370
// appease the borrow checker.
375
371
let dummy = HybridIdxSet :: Sparse ( SparseIdxSet :: new ( ) , 0 ) ;
376
372
match mem:: replace ( self , dummy) {
377
- HybridIdxSet :: Sparse ( sparse, universe_size ) => {
378
- let mut dense = sparse. to_dense ( universe_size ) ;
373
+ HybridIdxSet :: Sparse ( sparse, domain_size ) => {
374
+ let mut dense = sparse. to_dense ( domain_size ) ;
379
375
let changed = dense. add ( elem) ;
380
376
assert ! ( changed) ;
381
- mem:: replace ( self , HybridIdxSet :: Dense ( dense, universe_size ) ) ;
377
+ mem:: replace ( self , HybridIdxSet :: Dense ( dense, domain_size ) ) ;
382
378
changed
383
379
}
384
380
_ => panic ! ( "impossible" ) ,
@@ -401,7 +397,7 @@ impl<T: Idx> HybridIdxSet<T> {
401
397
/// Converts to a dense set, consuming itself in the process.
402
398
pub fn to_dense ( self ) -> IdxSet < T > {
403
399
match self {
404
- HybridIdxSet :: Sparse ( sparse, universe_size ) => sparse. to_dense ( universe_size ) ,
400
+ HybridIdxSet :: Sparse ( sparse, domain_size ) => sparse. to_dense ( domain_size ) ,
405
401
HybridIdxSet :: Dense ( dense, _) => dense,
406
402
}
407
403
}
0 commit comments