@@ -9,7 +9,7 @@ use core::ops::{Index, RangeBounds};
9
9
use core:: ptr;
10
10
11
11
use super :: borrow:: DormantMutRef ;
12
- use super :: navigate:: LeafRange ;
12
+ use super :: navigate:: { LazyLeafRange , LeafRange } ;
13
13
use super :: node:: { self , marker, ForceResult :: * , Handle , NodeRef , Root } ;
14
14
use super :: search:: SearchResult :: * ;
15
15
@@ -278,7 +278,7 @@ where
278
278
/// [`iter`]: BTreeMap::iter
279
279
#[ stable( feature = "rust1" , since = "1.0.0" ) ]
280
280
pub struct Iter < ' a , K : ' a , V : ' a > {
281
- range : Range < ' a , K , V > ,
281
+ range : LazyLeafRange < marker :: Immut < ' a > , K , V > ,
282
282
length : usize ,
283
283
}
284
284
@@ -296,10 +296,20 @@ impl<K: fmt::Debug, V: fmt::Debug> fmt::Debug for Iter<'_, K, V> {
296
296
///
297
297
/// [`iter_mut`]: BTreeMap::iter_mut
298
298
#[ stable( feature = "rust1" , since = "1.0.0" ) ]
299
- #[ derive( Debug ) ]
300
299
pub struct IterMut < ' a , K : ' a , V : ' a > {
301
- range : RangeMut < ' a , K , V > ,
300
+ range : LazyLeafRange < marker :: ValMut < ' a > , K , V > ,
302
301
length : usize ,
302
+
303
+ // Be invariant in `K` and `V`
304
+ _marker : PhantomData < & ' a mut ( K , V ) > ,
305
+ }
306
+
307
+ #[ stable( feature = "collection_debug" , since = "1.17.0" ) ]
308
+ impl < K : fmt:: Debug , V : fmt:: Debug > fmt:: Debug for IterMut < ' _ , K , V > {
309
+ fn fmt ( & self , f : & mut fmt:: Formatter < ' _ > ) -> fmt:: Result {
310
+ let range = Iter { range : self . range . reborrow ( ) , length : self . length } ;
311
+ f. debug_list ( ) . entries ( range) . finish ( )
312
+ }
303
313
}
304
314
305
315
/// An owning iterator over the entries of a `BTreeMap`.
@@ -310,16 +320,15 @@ pub struct IterMut<'a, K: 'a, V: 'a> {
310
320
/// [`into_iter`]: IntoIterator::into_iter
311
321
#[ stable( feature = "rust1" , since = "1.0.0" ) ]
312
322
pub struct IntoIter < K , V > {
313
- range : LeafRange < marker:: Dying , K , V > ,
323
+ range : LazyLeafRange < marker:: Dying , K , V > ,
314
324
length : usize ,
315
325
}
316
326
317
327
impl < K , V > IntoIter < K , V > {
318
328
/// Returns an iterator of references over the remaining items.
319
329
#[ inline]
320
330
pub ( super ) fn iter ( & self ) -> Iter < ' _ , K , V > {
321
- let range = Range { inner : self . range . reborrow ( ) } ;
322
- Iter { range : range, length : self . length }
331
+ Iter { range : self . range . reborrow ( ) , length : self . length }
323
332
}
324
333
}
325
334
@@ -1298,7 +1307,7 @@ impl<'a, K: 'a, V: 'a> Iterator for Iter<'a, K, V> {
1298
1307
None
1299
1308
} else {
1300
1309
self . length -= 1 ;
1301
- Some ( unsafe { self . range . inner . next_unchecked ( ) } )
1310
+ Some ( unsafe { self . range . next_unchecked ( ) } )
1302
1311
}
1303
1312
}
1304
1313
@@ -1329,7 +1338,7 @@ impl<'a, K: 'a, V: 'a> DoubleEndedIterator for Iter<'a, K, V> {
1329
1338
None
1330
1339
} else {
1331
1340
self . length -= 1 ;
1332
- Some ( unsafe { self . range . inner . next_back_unchecked ( ) } )
1341
+ Some ( unsafe { self . range . next_back_unchecked ( ) } )
1333
1342
}
1334
1343
}
1335
1344
}
@@ -1367,7 +1376,7 @@ impl<'a, K: 'a, V: 'a> Iterator for IterMut<'a, K, V> {
1367
1376
None
1368
1377
} else {
1369
1378
self . length -= 1 ;
1370
- Some ( unsafe { self . range . inner . next_unchecked ( ) } )
1379
+ Some ( unsafe { self . range . next_unchecked ( ) } )
1371
1380
}
1372
1381
}
1373
1382
@@ -1395,7 +1404,7 @@ impl<'a, K: 'a, V: 'a> DoubleEndedIterator for IterMut<'a, K, V> {
1395
1404
None
1396
1405
} else {
1397
1406
self . length -= 1 ;
1398
- Some ( unsafe { self . range . inner . next_back_unchecked ( ) } )
1407
+ Some ( unsafe { self . range . next_back_unchecked ( ) } )
1399
1408
}
1400
1409
}
1401
1410
}
@@ -1414,7 +1423,7 @@ impl<'a, K, V> IterMut<'a, K, V> {
1414
1423
/// Returns an iterator of references over the remaining items.
1415
1424
#[ inline]
1416
1425
pub ( super ) fn iter ( & self ) -> Iter < ' _ , K , V > {
1417
- Iter { range : self . range . iter ( ) , length : self . length }
1426
+ Iter { range : self . range . reborrow ( ) , length : self . length }
1418
1427
}
1419
1428
}
1420
1429
@@ -1430,7 +1439,7 @@ impl<K, V> IntoIterator for BTreeMap<K, V> {
1430
1439
1431
1440
IntoIter { range : full_range, length : me. length }
1432
1441
} else {
1433
- IntoIter { range : LeafRange :: none ( ) , length : 0 }
1442
+ IntoIter { range : LazyLeafRange :: none ( ) , length : 0 }
1434
1443
}
1435
1444
}
1436
1445
}
@@ -1888,14 +1897,6 @@ impl<'a, K, V> Iterator for RangeMut<'a, K, V> {
1888
1897
}
1889
1898
}
1890
1899
1891
- impl < ' a , K , V > RangeMut < ' a , K , V > {
1892
- /// Returns an iterator of references over the remaining items.
1893
- #[ inline]
1894
- pub ( super ) fn iter ( & self ) -> Range < ' _ , K , V > {
1895
- Range { inner : self . inner . reborrow ( ) }
1896
- }
1897
- }
1898
-
1899
1900
#[ stable( feature = "btree_range" , since = "1.17.0" ) ]
1900
1901
impl < ' a , K , V > DoubleEndedIterator for RangeMut < ' a , K , V > {
1901
1902
fn next_back ( & mut self ) -> Option < ( & ' a K , & ' a mut V ) > {
@@ -2038,9 +2039,9 @@ impl<K, V> BTreeMap<K, V> {
2038
2039
if let Some ( root) = & self . root {
2039
2040
let full_range = root. reborrow ( ) . full_range ( ) ;
2040
2041
2041
- Iter { range : Range { inner : full_range } , length : self . length }
2042
+ Iter { range : full_range, length : self . length }
2042
2043
} else {
2043
- Iter { range : Range { inner : LeafRange :: none ( ) } , length : 0 }
2044
+ Iter { range : LazyLeafRange :: none ( ) , length : 0 }
2044
2045
}
2045
2046
}
2046
2047
@@ -2070,15 +2071,9 @@ impl<K, V> BTreeMap<K, V> {
2070
2071
if let Some ( root) = & mut self . root {
2071
2072
let full_range = root. borrow_valmut ( ) . full_range ( ) ;
2072
2073
2073
- IterMut {
2074
- range : RangeMut { inner : full_range, _marker : PhantomData } ,
2075
- length : self . length ,
2076
- }
2074
+ IterMut { range : full_range, length : self . length , _marker : PhantomData }
2077
2075
} else {
2078
- IterMut {
2079
- range : RangeMut { inner : LeafRange :: none ( ) , _marker : PhantomData } ,
2080
- length : 0 ,
2081
- }
2076
+ IterMut { range : LazyLeafRange :: none ( ) , length : 0 , _marker : PhantomData }
2082
2077
}
2083
2078
}
2084
2079
0 commit comments