@@ -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
@@ -291,7 +291,7 @@ where
291
291
/// [`iter`]: BTreeMap::iter
292
292
#[ stable( feature = "rust1" , since = "1.0.0" ) ]
293
293
pub struct Iter < ' a , K : ' a , V : ' a > {
294
- range : Range < ' a , K , V > ,
294
+ range : LazyLeafRange < marker :: Immut < ' a > , K , V > ,
295
295
length : usize ,
296
296
}
297
297
@@ -309,10 +309,20 @@ impl<K: fmt::Debug, V: fmt::Debug> fmt::Debug for Iter<'_, K, V> {
309
309
///
310
310
/// [`iter_mut`]: BTreeMap::iter_mut
311
311
#[ stable( feature = "rust1" , since = "1.0.0" ) ]
312
- #[ derive( Debug ) ]
313
312
pub struct IterMut < ' a , K : ' a , V : ' a > {
314
- range : RangeMut < ' a , K , V > ,
313
+ range : LazyLeafRange < marker :: ValMut < ' a > , K , V > ,
315
314
length : usize ,
315
+
316
+ // Be invariant in `K` and `V`
317
+ _marker : PhantomData < & ' a mut ( K , V ) > ,
318
+ }
319
+
320
+ #[ stable( feature = "collection_debug" , since = "1.17.0" ) ]
321
+ impl < K : fmt:: Debug , V : fmt:: Debug > fmt:: Debug for IterMut < ' _ , K , V > {
322
+ fn fmt ( & self , f : & mut fmt:: Formatter < ' _ > ) -> fmt:: Result {
323
+ let range = Iter { range : self . range . reborrow ( ) , length : self . length } ;
324
+ f. debug_list ( ) . entries ( range) . finish ( )
325
+ }
316
326
}
317
327
318
328
/// An owning iterator over the entries of a `BTreeMap`.
@@ -323,16 +333,15 @@ pub struct IterMut<'a, K: 'a, V: 'a> {
323
333
/// [`into_iter`]: IntoIterator::into_iter
324
334
#[ stable( feature = "rust1" , since = "1.0.0" ) ]
325
335
pub struct IntoIter < K , V > {
326
- range : LeafRange < marker:: Dying , K , V > ,
336
+ range : LazyLeafRange < marker:: Dying , K , V > ,
327
337
length : usize ,
328
338
}
329
339
330
340
impl < K , V > IntoIter < K , V > {
331
341
/// Returns an iterator of references over the remaining items.
332
342
#[ inline]
333
343
pub ( super ) fn iter ( & self ) -> Iter < ' _ , K , V > {
334
- let range = Range { inner : self . range . reborrow ( ) } ;
335
- Iter { range : range, length : self . length }
344
+ Iter { range : self . range . reborrow ( ) , length : self . length }
336
345
}
337
346
}
338
347
@@ -1312,7 +1321,7 @@ impl<'a, K: 'a, V: 'a> Iterator for Iter<'a, K, V> {
1312
1321
None
1313
1322
} else {
1314
1323
self . length -= 1 ;
1315
- Some ( unsafe { self . range . inner . next_unchecked ( ) } )
1324
+ Some ( unsafe { self . range . next_unchecked ( ) } )
1316
1325
}
1317
1326
}
1318
1327
@@ -1343,7 +1352,7 @@ impl<'a, K: 'a, V: 'a> DoubleEndedIterator for Iter<'a, K, V> {
1343
1352
None
1344
1353
} else {
1345
1354
self . length -= 1 ;
1346
- Some ( unsafe { self . range . inner . next_back_unchecked ( ) } )
1355
+ Some ( unsafe { self . range . next_back_unchecked ( ) } )
1347
1356
}
1348
1357
}
1349
1358
}
@@ -1381,7 +1390,7 @@ impl<'a, K: 'a, V: 'a> Iterator for IterMut<'a, K, V> {
1381
1390
None
1382
1391
} else {
1383
1392
self . length -= 1 ;
1384
- Some ( unsafe { self . range . inner . next_unchecked ( ) } )
1393
+ Some ( unsafe { self . range . next_unchecked ( ) } )
1385
1394
}
1386
1395
}
1387
1396
@@ -1409,7 +1418,7 @@ impl<'a, K: 'a, V: 'a> DoubleEndedIterator for IterMut<'a, K, V> {
1409
1418
None
1410
1419
} else {
1411
1420
self . length -= 1 ;
1412
- Some ( unsafe { self . range . inner . next_back_unchecked ( ) } )
1421
+ Some ( unsafe { self . range . next_back_unchecked ( ) } )
1413
1422
}
1414
1423
}
1415
1424
}
@@ -1428,7 +1437,7 @@ impl<'a, K, V> IterMut<'a, K, V> {
1428
1437
/// Returns an iterator of references over the remaining items.
1429
1438
#[ inline]
1430
1439
pub ( super ) fn iter ( & self ) -> Iter < ' _ , K , V > {
1431
- Iter { range : self . range . iter ( ) , length : self . length }
1440
+ Iter { range : self . range . reborrow ( ) , length : self . length }
1432
1441
}
1433
1442
}
1434
1443
@@ -1444,7 +1453,7 @@ impl<K, V> IntoIterator for BTreeMap<K, V> {
1444
1453
1445
1454
IntoIter { range : full_range, length : me. length }
1446
1455
} else {
1447
- IntoIter { range : LeafRange :: none ( ) , length : 0 }
1456
+ IntoIter { range : LazyLeafRange :: none ( ) , length : 0 }
1448
1457
}
1449
1458
}
1450
1459
}
@@ -1902,14 +1911,6 @@ impl<'a, K, V> Iterator for RangeMut<'a, K, V> {
1902
1911
}
1903
1912
}
1904
1913
1905
- impl < ' a , K , V > RangeMut < ' a , K , V > {
1906
- /// Returns an iterator of references over the remaining items.
1907
- #[ inline]
1908
- pub ( super ) fn iter ( & self ) -> Range < ' _ , K , V > {
1909
- Range { inner : self . inner . reborrow ( ) }
1910
- }
1911
- }
1912
-
1913
1914
#[ stable( feature = "btree_range" , since = "1.17.0" ) ]
1914
1915
impl < ' a , K , V > DoubleEndedIterator for RangeMut < ' a , K , V > {
1915
1916
fn next_back ( & mut self ) -> Option < ( & ' a K , & ' a mut V ) > {
@@ -2066,9 +2067,9 @@ impl<K, V> BTreeMap<K, V> {
2066
2067
if let Some ( root) = & self . root {
2067
2068
let full_range = root. reborrow ( ) . full_range ( ) ;
2068
2069
2069
- Iter { range : Range { inner : full_range } , length : self . length }
2070
+ Iter { range : full_range, length : self . length }
2070
2071
} else {
2071
- Iter { range : Range { inner : LeafRange :: none ( ) } , length : 0 }
2072
+ Iter { range : LazyLeafRange :: none ( ) , length : 0 }
2072
2073
}
2073
2074
}
2074
2075
@@ -2098,15 +2099,9 @@ impl<K, V> BTreeMap<K, V> {
2098
2099
if let Some ( root) = & mut self . root {
2099
2100
let full_range = root. borrow_valmut ( ) . full_range ( ) ;
2100
2101
2101
- IterMut {
2102
- range : RangeMut { inner : full_range, _marker : PhantomData } ,
2103
- length : self . length ,
2104
- }
2102
+ IterMut { range : full_range, length : self . length , _marker : PhantomData }
2105
2103
} else {
2106
- IterMut {
2107
- range : RangeMut { inner : LeafRange :: none ( ) , _marker : PhantomData } ,
2108
- length : 0 ,
2109
- }
2104
+ IterMut { range : LazyLeafRange :: none ( ) , length : 0 , _marker : PhantomData }
2110
2105
}
2111
2106
}
2112
2107
0 commit comments