@@ -9,7 +9,7 @@ use core::ops::{Index, RangeBounds};
99use core:: ptr;
1010
1111use super :: borrow:: DormantMutRef ;
12- use super :: navigate:: LeafRange ;
12+ use super :: navigate:: { LazyLeafRange , LeafRange } ;
1313use super :: node:: { self , marker, ForceResult :: * , Handle , NodeRef , Root } ;
1414use super :: search:: SearchResult :: * ;
1515
@@ -278,7 +278,7 @@ where
278278/// [`iter`]: BTreeMap::iter
279279#[ stable( feature = "rust1" , since = "1.0.0" ) ]
280280pub struct Iter < ' a , K : ' a , V : ' a > {
281- range : Range < ' a , K , V > ,
281+ range : LazyLeafRange < marker :: Immut < ' a > , K , V > ,
282282 length : usize ,
283283}
284284
@@ -296,10 +296,20 @@ impl<K: fmt::Debug, V: fmt::Debug> fmt::Debug for Iter<'_, K, V> {
296296///
297297/// [`iter_mut`]: BTreeMap::iter_mut
298298#[ stable( feature = "rust1" , since = "1.0.0" ) ]
299- #[ derive( Debug ) ]
300299pub struct IterMut < ' a , K : ' a , V : ' a > {
301- range : RangeMut < ' a , K , V > ,
300+ range : LazyLeafRange < marker :: ValMut < ' a > , K , V > ,
302301 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+ }
303313}
304314
305315/// An owning iterator over the entries of a `BTreeMap`.
@@ -310,16 +320,15 @@ pub struct IterMut<'a, K: 'a, V: 'a> {
310320/// [`into_iter`]: IntoIterator::into_iter
311321#[ stable( feature = "rust1" , since = "1.0.0" ) ]
312322pub struct IntoIter < K , V > {
313- range : LeafRange < marker:: Dying , K , V > ,
323+ range : LazyLeafRange < marker:: Dying , K , V > ,
314324 length : usize ,
315325}
316326
317327impl < K , V > IntoIter < K , V > {
318328 /// Returns an iterator of references over the remaining items.
319329 #[ inline]
320330 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 }
323332 }
324333}
325334
@@ -1298,7 +1307,7 @@ impl<'a, K: 'a, V: 'a> Iterator for Iter<'a, K, V> {
12981307 None
12991308 } else {
13001309 self . length -= 1 ;
1301- Some ( unsafe { self . range . inner . next_unchecked ( ) } )
1310+ Some ( unsafe { self . range . next_unchecked ( ) } )
13021311 }
13031312 }
13041313
@@ -1329,7 +1338,7 @@ impl<'a, K: 'a, V: 'a> DoubleEndedIterator for Iter<'a, K, V> {
13291338 None
13301339 } else {
13311340 self . length -= 1 ;
1332- Some ( unsafe { self . range . inner . next_back_unchecked ( ) } )
1341+ Some ( unsafe { self . range . next_back_unchecked ( ) } )
13331342 }
13341343 }
13351344}
@@ -1367,7 +1376,7 @@ impl<'a, K: 'a, V: 'a> Iterator for IterMut<'a, K, V> {
13671376 None
13681377 } else {
13691378 self . length -= 1 ;
1370- Some ( unsafe { self . range . inner . next_unchecked ( ) } )
1379+ Some ( unsafe { self . range . next_unchecked ( ) } )
13711380 }
13721381 }
13731382
@@ -1395,7 +1404,7 @@ impl<'a, K: 'a, V: 'a> DoubleEndedIterator for IterMut<'a, K, V> {
13951404 None
13961405 } else {
13971406 self . length -= 1 ;
1398- Some ( unsafe { self . range . inner . next_back_unchecked ( ) } )
1407+ Some ( unsafe { self . range . next_back_unchecked ( ) } )
13991408 }
14001409 }
14011410}
@@ -1414,7 +1423,7 @@ impl<'a, K, V> IterMut<'a, K, V> {
14141423 /// Returns an iterator of references over the remaining items.
14151424 #[ inline]
14161425 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 }
14181427 }
14191428}
14201429
@@ -1430,7 +1439,7 @@ impl<K, V> IntoIterator for BTreeMap<K, V> {
14301439
14311440 IntoIter { range : full_range, length : me. length }
14321441 } else {
1433- IntoIter { range : LeafRange :: none ( ) , length : 0 }
1442+ IntoIter { range : LazyLeafRange :: none ( ) , length : 0 }
14341443 }
14351444 }
14361445}
@@ -1888,14 +1897,6 @@ impl<'a, K, V> Iterator for RangeMut<'a, K, V> {
18881897 }
18891898}
18901899
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-
18991900#[ stable( feature = "btree_range" , since = "1.17.0" ) ]
19001901impl < ' a , K , V > DoubleEndedIterator for RangeMut < ' a , K , V > {
19011902 fn next_back ( & mut self ) -> Option < ( & ' a K , & ' a mut V ) > {
@@ -2038,9 +2039,9 @@ impl<K, V> BTreeMap<K, V> {
20382039 if let Some ( root) = & self . root {
20392040 let full_range = root. reborrow ( ) . full_range ( ) ;
20402041
2041- Iter { range : Range { inner : full_range } , length : self . length }
2042+ Iter { range : full_range, length : self . length }
20422043 } else {
2043- Iter { range : Range { inner : LeafRange :: none ( ) } , length : 0 }
2044+ Iter { range : LazyLeafRange :: none ( ) , length : 0 }
20442045 }
20452046 }
20462047
@@ -2070,15 +2071,9 @@ impl<K, V> BTreeMap<K, V> {
20702071 if let Some ( root) = & mut self . root {
20712072 let full_range = root. borrow_valmut ( ) . full_range ( ) ;
20722073
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 }
20772075 } else {
2078- IterMut {
2079- range : RangeMut { inner : LeafRange :: none ( ) , _marker : PhantomData } ,
2080- length : 0 ,
2081- }
2076+ IterMut { range : LazyLeafRange :: none ( ) , length : 0 , _marker : PhantomData }
20822077 }
20832078 }
20842079
0 commit comments