@@ -13,6 +13,7 @@ use core::ops::{BitAnd, BitOr, BitXor, RangeBounds, Sub};
13
13
14
14
use super :: map:: { BTreeMap , Keys } ;
15
15
use super :: merge_iter:: MergeIterInner ;
16
+ use super :: set_val:: SetValZST ;
16
17
use super :: Recover ;
17
18
18
19
use crate :: alloc:: { Allocator , Global } ;
@@ -81,7 +82,7 @@ pub struct BTreeSet<
81
82
T ,
82
83
#[ unstable( feature = "allocator_api" , issue = "32838" ) ] A : Allocator + Clone = Global ,
83
84
> {
84
- map : BTreeMap < T , ( ) , A > ,
85
+ map : BTreeMap < T , SetValZST , A > ,
85
86
}
86
87
87
88
#[ stable( feature = "rust1" , since = "1.0.0" ) ]
@@ -135,7 +136,7 @@ impl<T: Clone, A: Allocator + Clone> Clone for BTreeSet<T, A> {
135
136
#[ must_use = "iterators are lazy and do nothing unless consumed" ]
136
137
#[ stable( feature = "rust1" , since = "1.0.0" ) ]
137
138
pub struct Iter < ' a , T : ' a > {
138
- iter : Keys < ' a , T , ( ) > ,
139
+ iter : Keys < ' a , T , SetValZST > ,
139
140
}
140
141
141
142
#[ stable( feature = "collection_debug" , since = "1.17.0" ) ]
@@ -158,7 +159,7 @@ pub struct IntoIter<
158
159
T ,
159
160
#[ unstable( feature = "allocator_api" , issue = "32838" ) ] A : Allocator + Clone = Global ,
160
161
> {
161
- iter : super :: map:: IntoIter < T , ( ) , A > ,
162
+ iter : super :: map:: IntoIter < T , SetValZST , A > ,
162
163
}
163
164
164
165
/// An iterator over a sub-range of items in a `BTreeSet`.
@@ -171,7 +172,7 @@ pub struct IntoIter<
171
172
#[ derive( Debug ) ]
172
173
#[ stable( feature = "btree_range" , since = "1.17.0" ) ]
173
174
pub struct Range < ' a , T : ' a > {
174
- iter : super :: map:: Range < ' a , T , ( ) > ,
175
+ iter : super :: map:: Range < ' a , T , SetValZST > ,
175
176
}
176
177
177
178
/// A lazy iterator producing elements in the difference of `BTreeSet`s.
@@ -375,6 +376,11 @@ impl<T, A: Allocator + Clone> BTreeSet<T, A> {
375
376
/// `range((Excluded(4), Included(10)))` will yield a left-exclusive, right-inclusive
376
377
/// range from 4 to 10.
377
378
///
379
+ /// # Panics
380
+ ///
381
+ /// Panics if range `start > end`.
382
+ /// Panics if range `start == end` and both bounds are `Excluded`.
383
+ ///
378
384
/// # Examples
379
385
///
380
386
/// ```
@@ -905,7 +911,7 @@ impl<T, A: Allocator + Clone> BTreeSet<T, A> {
905
911
where
906
912
T : Ord ,
907
913
{
908
- self . map . insert ( value, ( ) ) . is_none ( )
914
+ self . map . insert ( value, SetValZST :: default ( ) ) . is_none ( )
909
915
}
910
916
911
917
/// Adds a value to the set, replacing the existing element, if any, that is
@@ -1210,7 +1216,7 @@ impl<T: Ord> FromIterator<T> for BTreeSet<T> {
1210
1216
1211
1217
impl < T : Ord , A : Allocator + Clone > BTreeSet < T , A > {
1212
1218
fn from_sorted_iter < I : Iterator < Item = T > > ( iter : I , alloc : A ) -> BTreeSet < T , A > {
1213
- let iter = iter. map ( |k| ( k, ( ) ) ) ;
1219
+ let iter = iter. map ( |k| ( k, SetValZST :: default ( ) ) ) ;
1214
1220
let map = BTreeMap :: bulk_build_from_sorted_iter ( iter, alloc) ;
1215
1221
BTreeSet { map }
1216
1222
}
@@ -1234,7 +1240,7 @@ impl<T: Ord, const N: usize> From<[T; N]> for BTreeSet<T> {
1234
1240
1235
1241
// use stable sort to preserve the insertion order.
1236
1242
arr. sort ( ) ;
1237
- let iter = IntoIterator :: into_iter ( arr) . map ( |k| ( k, ( ) ) ) ;
1243
+ let iter = IntoIterator :: into_iter ( arr) . map ( |k| ( k, SetValZST :: default ( ) ) ) ;
1238
1244
let map = BTreeMap :: bulk_build_from_sorted_iter ( iter, Global ) ;
1239
1245
BTreeSet { map }
1240
1246
}
@@ -1284,7 +1290,7 @@ pub struct DrainFilter<
1284
1290
F : ' a + FnMut ( & T ) -> bool ,
1285
1291
{
1286
1292
pred : F ,
1287
- inner : super :: map:: DrainFilterInner < ' a , T , ( ) > ,
1293
+ inner : super :: map:: DrainFilterInner < ' a , T , SetValZST > ,
1288
1294
/// The BTreeMap will outlive this IntoIter so we don't care about drop order for `alloc`.
1289
1295
alloc : A ,
1290
1296
}
@@ -1319,7 +1325,7 @@ where
1319
1325
1320
1326
fn next ( & mut self ) -> Option < T > {
1321
1327
let pred = & mut self . pred ;
1322
- let mut mapped_pred = |k : & T , _v : & mut ( ) | pred ( k) ;
1328
+ let mut mapped_pred = |k : & T , _v : & mut SetValZST | pred ( k) ;
1323
1329
self . inner . next ( & mut mapped_pred, self . alloc . clone ( ) ) . map ( |( k, _) | k)
1324
1330
}
1325
1331
0 commit comments