From 33cc3f5116e2f1813a54d5038151e0898a670af2 Mon Sep 17 00:00:00 2001 From: Folyd <lyshuhow@gmail.com> Date: Sun, 18 Apr 2021 19:52:20 +0800 Subject: [PATCH 1/2] Stablize {HashMap,BTreeMap}::into_{keys,values} --- library/alloc/src/collections/btree/map.rs | 30 ++++++++++------------ library/std/src/collections/hash/map.rs | 30 +++++++++------------- 2 files changed, 26 insertions(+), 34 deletions(-) diff --git a/library/alloc/src/collections/btree/map.rs b/library/alloc/src/collections/btree/map.rs index 971244718b4ad..02e2924623c9d 100644 --- a/library/alloc/src/collections/btree/map.rs +++ b/library/alloc/src/collections/btree/map.rs @@ -398,12 +398,12 @@ impl<K, V: fmt::Debug> fmt::Debug for ValuesMut<'_, K, V> { /// See its documentation for more. /// /// [`into_keys`]: BTreeMap::into_keys -#[unstable(feature = "map_into_keys_values", issue = "75294")] +#[stable(feature = "map_into_keys_values", since = "1.53.0")] pub struct IntoKeys<K, V> { inner: IntoIter<K, V>, } -#[unstable(feature = "map_into_keys_values", issue = "75294")] +#[stable(feature = "map_into_keys_values", since = "1.53.0")] impl<K: fmt::Debug, V> fmt::Debug for IntoKeys<K, V> { fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { f.debug_list().entries(self.inner.iter().map(|(key, _)| key)).finish() @@ -416,12 +416,12 @@ impl<K: fmt::Debug, V> fmt::Debug for IntoKeys<K, V> { /// See its documentation for more. /// /// [`into_values`]: BTreeMap::into_values -#[unstable(feature = "map_into_keys_values", issue = "75294")] +#[stable(feature = "map_into_keys_values", since = "1.53.0")] pub struct IntoValues<K, V> { inner: IntoIter<K, V>, } -#[unstable(feature = "map_into_keys_values", issue = "75294")] +#[stable(feature = "map_into_keys_values", since = "1.53.0")] impl<K, V: fmt::Debug> fmt::Debug for IntoValues<K, V> { fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { f.debug_list().entries(self.inner.iter().map(|(_, val)| val)).finish() @@ -1242,7 +1242,6 @@ impl<K, V> BTreeMap<K, V> { /// # Examples /// /// ``` - /// #![feature(map_into_keys_values)] /// use std::collections::BTreeMap; /// /// let mut a = BTreeMap::new(); @@ -1253,7 +1252,7 @@ impl<K, V> BTreeMap<K, V> { /// assert_eq!(keys, [1, 2]); /// ``` #[inline] - #[unstable(feature = "map_into_keys_values", issue = "75294")] + #[stable(feature = "map_into_keys_values", since = "1.53.0")] pub fn into_keys(self) -> IntoKeys<K, V> { IntoKeys { inner: self.into_iter() } } @@ -1265,7 +1264,6 @@ impl<K, V> BTreeMap<K, V> { /// # Examples /// /// ``` - /// #![feature(map_into_keys_values)] /// use std::collections::BTreeMap; /// /// let mut a = BTreeMap::new(); @@ -1276,7 +1274,7 @@ impl<K, V> BTreeMap<K, V> { /// assert_eq!(values, ["hello", "goodbye"]); /// ``` #[inline] - #[unstable(feature = "map_into_keys_values", issue = "75294")] + #[stable(feature = "map_into_keys_values", since = "1.53.0")] pub fn into_values(self) -> IntoValues<K, V> { IntoValues { inner: self.into_iter() } } @@ -1776,7 +1774,7 @@ impl<'a, K, V> Range<'a, K, V> { } } -#[unstable(feature = "map_into_keys_values", issue = "75294")] +#[stable(feature = "map_into_keys_values", since = "1.53.0")] impl<K, V> Iterator for IntoKeys<K, V> { type Item = K; @@ -1801,24 +1799,24 @@ impl<K, V> Iterator for IntoKeys<K, V> { } } -#[unstable(feature = "map_into_keys_values", issue = "75294")] +#[stable(feature = "map_into_keys_values", since = "1.53.0")] impl<K, V> DoubleEndedIterator for IntoKeys<K, V> { fn next_back(&mut self) -> Option<K> { self.inner.next_back().map(|(k, _)| k) } } -#[unstable(feature = "map_into_keys_values", issue = "75294")] +#[stable(feature = "map_into_keys_values", since = "1.53.0")] impl<K, V> ExactSizeIterator for IntoKeys<K, V> { fn len(&self) -> usize { self.inner.len() } } -#[unstable(feature = "map_into_keys_values", issue = "75294")] +#[stable(feature = "map_into_keys_values", since = "1.53.0")] impl<K, V> FusedIterator for IntoKeys<K, V> {} -#[unstable(feature = "map_into_keys_values", issue = "75294")] +#[stable(feature = "map_into_keys_values", since = "1.53.0")] impl<K, V> Iterator for IntoValues<K, V> { type Item = V; @@ -1835,21 +1833,21 @@ impl<K, V> Iterator for IntoValues<K, V> { } } -#[unstable(feature = "map_into_keys_values", issue = "75294")] +#[stable(feature = "map_into_keys_values", since = "1.53.0")] impl<K, V> DoubleEndedIterator for IntoValues<K, V> { fn next_back(&mut self) -> Option<V> { self.inner.next_back().map(|(_, v)| v) } } -#[unstable(feature = "map_into_keys_values", issue = "75294")] +#[stable(feature = "map_into_keys_values", since = "1.53.0")] impl<K, V> ExactSizeIterator for IntoValues<K, V> { fn len(&self) -> usize { self.inner.len() } } -#[unstable(feature = "map_into_keys_values", issue = "75294")] +#[stable(feature = "map_into_keys_values", since = "1.53.0")] impl<K, V> FusedIterator for IntoValues<K, V> {} #[stable(feature = "btree_range", since = "1.17.0")] diff --git a/library/std/src/collections/hash/map.rs b/library/std/src/collections/hash/map.rs index 3dcc5cd2b5911..32c868fb4ab04 100644 --- a/library/std/src/collections/hash/map.rs +++ b/library/std/src/collections/hash/map.rs @@ -962,7 +962,6 @@ where /// # Examples /// /// ``` - /// #![feature(map_into_keys_values)] /// use std::collections::HashMap; /// /// let mut map = HashMap::new(); @@ -973,7 +972,7 @@ where /// let vec: Vec<&str> = map.into_keys().collect(); /// ``` #[inline] - #[unstable(feature = "map_into_keys_values", issue = "75294")] + #[stable(feature = "map_into_keys_values", since = "1.53.0")] pub fn into_keys(self) -> IntoKeys<K, V> { IntoKeys { inner: self.into_iter() } } @@ -985,7 +984,6 @@ where /// # Examples /// /// ``` - /// #![feature(map_into_keys_values)] /// use std::collections::HashMap; /// /// let mut map = HashMap::new(); @@ -996,7 +994,7 @@ where /// let vec: Vec<i32> = map.into_values().collect(); /// ``` #[inline] - #[unstable(feature = "map_into_keys_values", issue = "75294")] + #[stable(feature = "map_into_keys_values", since = "1.53.0")] pub fn into_values(self) -> IntoValues<K, V> { IntoValues { inner: self.into_iter() } } @@ -1405,15 +1403,13 @@ pub struct ValuesMut<'a, K: 'a, V: 'a> { /// # Example /// /// ``` -/// #![feature(map_into_keys_values)] -/// /// use std::collections::HashMap; /// /// let mut map = HashMap::new(); /// map.insert("a", 1); /// let iter_keys = map.into_keys(); /// ``` -#[unstable(feature = "map_into_keys_values", issue = "75294")] +#[stable(feature = "map_into_keys_values", since = "1.53.0")] pub struct IntoKeys<K, V> { inner: IntoIter<K, V>, } @@ -1428,15 +1424,13 @@ pub struct IntoKeys<K, V> { /// # Example /// /// ``` -/// #![feature(map_into_keys_values)] -/// /// use std::collections::HashMap; /// /// let mut map = HashMap::new(); /// map.insert("a", 1); /// let iter_keys = map.into_values(); /// ``` -#[unstable(feature = "map_into_keys_values", issue = "75294")] +#[stable(feature = "map_into_keys_values", since = "1.53.0")] pub struct IntoValues<K, V> { inner: IntoIter<K, V>, } @@ -2137,7 +2131,7 @@ impl<K, V: fmt::Debug> fmt::Debug for ValuesMut<'_, K, V> { } } -#[unstable(feature = "map_into_keys_values", issue = "75294")] +#[stable(feature = "map_into_keys_values", since = "1.53.0")] impl<K, V> Iterator for IntoKeys<K, V> { type Item = K; @@ -2150,24 +2144,24 @@ impl<K, V> Iterator for IntoKeys<K, V> { self.inner.size_hint() } } -#[unstable(feature = "map_into_keys_values", issue = "75294")] +#[stable(feature = "map_into_keys_values", since = "1.53.0")] impl<K, V> ExactSizeIterator for IntoKeys<K, V> { #[inline] fn len(&self) -> usize { self.inner.len() } } -#[unstable(feature = "map_into_keys_values", issue = "75294")] +#[stable(feature = "map_into_keys_values", since = "1.53.0")] impl<K, V> FusedIterator for IntoKeys<K, V> {} -#[unstable(feature = "map_into_keys_values", issue = "75294")] +#[stable(feature = "map_into_keys_values", since = "1.53.0")] impl<K: Debug, V> fmt::Debug for IntoKeys<K, V> { fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { f.debug_list().entries(self.inner.iter().map(|(k, _)| k)).finish() } } -#[unstable(feature = "map_into_keys_values", issue = "75294")] +#[stable(feature = "map_into_keys_values", since = "1.53.0")] impl<K, V> Iterator for IntoValues<K, V> { type Item = V; @@ -2180,17 +2174,17 @@ impl<K, V> Iterator for IntoValues<K, V> { self.inner.size_hint() } } -#[unstable(feature = "map_into_keys_values", issue = "75294")] +#[stable(feature = "map_into_keys_values", since = "1.53.0")] impl<K, V> ExactSizeIterator for IntoValues<K, V> { #[inline] fn len(&self) -> usize { self.inner.len() } } -#[unstable(feature = "map_into_keys_values", issue = "75294")] +#[stable(feature = "map_into_keys_values", since = "1.53.0")] impl<K, V> FusedIterator for IntoValues<K, V> {} -#[unstable(feature = "map_into_keys_values", issue = "75294")] +#[stable(feature = "map_into_keys_values", since = "1.53.0")] impl<K, V: Debug> fmt::Debug for IntoValues<K, V> { fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { f.debug_list().entries(self.inner.iter().map(|(_, v)| v)).finish() From b6f3dbb65d0be4ecf94bb87f859db1f66b79f74d Mon Sep 17 00:00:00 2001 From: Mara Bos <m-ou.se@m-ou.se> Date: Wed, 5 May 2021 16:40:06 +0200 Subject: [PATCH 2/2] Bump map_into_keys_values stable version to 1.54.0. --- library/alloc/src/collections/btree/map.rs | 28 +++++++++++----------- library/std/src/collections/hash/map.rs | 24 +++++++++---------- 2 files changed, 26 insertions(+), 26 deletions(-) diff --git a/library/alloc/src/collections/btree/map.rs b/library/alloc/src/collections/btree/map.rs index 02e2924623c9d..0a46387c34e9c 100644 --- a/library/alloc/src/collections/btree/map.rs +++ b/library/alloc/src/collections/btree/map.rs @@ -398,12 +398,12 @@ impl<K, V: fmt::Debug> fmt::Debug for ValuesMut<'_, K, V> { /// See its documentation for more. /// /// [`into_keys`]: BTreeMap::into_keys -#[stable(feature = "map_into_keys_values", since = "1.53.0")] +#[stable(feature = "map_into_keys_values", since = "1.54.0")] pub struct IntoKeys<K, V> { inner: IntoIter<K, V>, } -#[stable(feature = "map_into_keys_values", since = "1.53.0")] +#[stable(feature = "map_into_keys_values", since = "1.54.0")] impl<K: fmt::Debug, V> fmt::Debug for IntoKeys<K, V> { fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { f.debug_list().entries(self.inner.iter().map(|(key, _)| key)).finish() @@ -416,12 +416,12 @@ impl<K: fmt::Debug, V> fmt::Debug for IntoKeys<K, V> { /// See its documentation for more. /// /// [`into_values`]: BTreeMap::into_values -#[stable(feature = "map_into_keys_values", since = "1.53.0")] +#[stable(feature = "map_into_keys_values", since = "1.54.0")] pub struct IntoValues<K, V> { inner: IntoIter<K, V>, } -#[stable(feature = "map_into_keys_values", since = "1.53.0")] +#[stable(feature = "map_into_keys_values", since = "1.54.0")] impl<K, V: fmt::Debug> fmt::Debug for IntoValues<K, V> { fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { f.debug_list().entries(self.inner.iter().map(|(_, val)| val)).finish() @@ -1252,7 +1252,7 @@ impl<K, V> BTreeMap<K, V> { /// assert_eq!(keys, [1, 2]); /// ``` #[inline] - #[stable(feature = "map_into_keys_values", since = "1.53.0")] + #[stable(feature = "map_into_keys_values", since = "1.54.0")] pub fn into_keys(self) -> IntoKeys<K, V> { IntoKeys { inner: self.into_iter() } } @@ -1274,7 +1274,7 @@ impl<K, V> BTreeMap<K, V> { /// assert_eq!(values, ["hello", "goodbye"]); /// ``` #[inline] - #[stable(feature = "map_into_keys_values", since = "1.53.0")] + #[stable(feature = "map_into_keys_values", since = "1.54.0")] pub fn into_values(self) -> IntoValues<K, V> { IntoValues { inner: self.into_iter() } } @@ -1774,7 +1774,7 @@ impl<'a, K, V> Range<'a, K, V> { } } -#[stable(feature = "map_into_keys_values", since = "1.53.0")] +#[stable(feature = "map_into_keys_values", since = "1.54.0")] impl<K, V> Iterator for IntoKeys<K, V> { type Item = K; @@ -1799,24 +1799,24 @@ impl<K, V> Iterator for IntoKeys<K, V> { } } -#[stable(feature = "map_into_keys_values", since = "1.53.0")] +#[stable(feature = "map_into_keys_values", since = "1.54.0")] impl<K, V> DoubleEndedIterator for IntoKeys<K, V> { fn next_back(&mut self) -> Option<K> { self.inner.next_back().map(|(k, _)| k) } } -#[stable(feature = "map_into_keys_values", since = "1.53.0")] +#[stable(feature = "map_into_keys_values", since = "1.54.0")] impl<K, V> ExactSizeIterator for IntoKeys<K, V> { fn len(&self) -> usize { self.inner.len() } } -#[stable(feature = "map_into_keys_values", since = "1.53.0")] +#[stable(feature = "map_into_keys_values", since = "1.54.0")] impl<K, V> FusedIterator for IntoKeys<K, V> {} -#[stable(feature = "map_into_keys_values", since = "1.53.0")] +#[stable(feature = "map_into_keys_values", since = "1.54.0")] impl<K, V> Iterator for IntoValues<K, V> { type Item = V; @@ -1833,21 +1833,21 @@ impl<K, V> Iterator for IntoValues<K, V> { } } -#[stable(feature = "map_into_keys_values", since = "1.53.0")] +#[stable(feature = "map_into_keys_values", since = "1.54.0")] impl<K, V> DoubleEndedIterator for IntoValues<K, V> { fn next_back(&mut self) -> Option<V> { self.inner.next_back().map(|(_, v)| v) } } -#[stable(feature = "map_into_keys_values", since = "1.53.0")] +#[stable(feature = "map_into_keys_values", since = "1.54.0")] impl<K, V> ExactSizeIterator for IntoValues<K, V> { fn len(&self) -> usize { self.inner.len() } } -#[stable(feature = "map_into_keys_values", since = "1.53.0")] +#[stable(feature = "map_into_keys_values", since = "1.54.0")] impl<K, V> FusedIterator for IntoValues<K, V> {} #[stable(feature = "btree_range", since = "1.17.0")] diff --git a/library/std/src/collections/hash/map.rs b/library/std/src/collections/hash/map.rs index 32c868fb4ab04..84c7e2e9ea243 100644 --- a/library/std/src/collections/hash/map.rs +++ b/library/std/src/collections/hash/map.rs @@ -972,7 +972,7 @@ where /// let vec: Vec<&str> = map.into_keys().collect(); /// ``` #[inline] - #[stable(feature = "map_into_keys_values", since = "1.53.0")] + #[stable(feature = "map_into_keys_values", since = "1.54.0")] pub fn into_keys(self) -> IntoKeys<K, V> { IntoKeys { inner: self.into_iter() } } @@ -994,7 +994,7 @@ where /// let vec: Vec<i32> = map.into_values().collect(); /// ``` #[inline] - #[stable(feature = "map_into_keys_values", since = "1.53.0")] + #[stable(feature = "map_into_keys_values", since = "1.54.0")] pub fn into_values(self) -> IntoValues<K, V> { IntoValues { inner: self.into_iter() } } @@ -1409,7 +1409,7 @@ pub struct ValuesMut<'a, K: 'a, V: 'a> { /// map.insert("a", 1); /// let iter_keys = map.into_keys(); /// ``` -#[stable(feature = "map_into_keys_values", since = "1.53.0")] +#[stable(feature = "map_into_keys_values", since = "1.54.0")] pub struct IntoKeys<K, V> { inner: IntoIter<K, V>, } @@ -1430,7 +1430,7 @@ pub struct IntoKeys<K, V> { /// map.insert("a", 1); /// let iter_keys = map.into_values(); /// ``` -#[stable(feature = "map_into_keys_values", since = "1.53.0")] +#[stable(feature = "map_into_keys_values", since = "1.54.0")] pub struct IntoValues<K, V> { inner: IntoIter<K, V>, } @@ -2131,7 +2131,7 @@ impl<K, V: fmt::Debug> fmt::Debug for ValuesMut<'_, K, V> { } } -#[stable(feature = "map_into_keys_values", since = "1.53.0")] +#[stable(feature = "map_into_keys_values", since = "1.54.0")] impl<K, V> Iterator for IntoKeys<K, V> { type Item = K; @@ -2144,24 +2144,24 @@ impl<K, V> Iterator for IntoKeys<K, V> { self.inner.size_hint() } } -#[stable(feature = "map_into_keys_values", since = "1.53.0")] +#[stable(feature = "map_into_keys_values", since = "1.54.0")] impl<K, V> ExactSizeIterator for IntoKeys<K, V> { #[inline] fn len(&self) -> usize { self.inner.len() } } -#[stable(feature = "map_into_keys_values", since = "1.53.0")] +#[stable(feature = "map_into_keys_values", since = "1.54.0")] impl<K, V> FusedIterator for IntoKeys<K, V> {} -#[stable(feature = "map_into_keys_values", since = "1.53.0")] +#[stable(feature = "map_into_keys_values", since = "1.54.0")] impl<K: Debug, V> fmt::Debug for IntoKeys<K, V> { fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { f.debug_list().entries(self.inner.iter().map(|(k, _)| k)).finish() } } -#[stable(feature = "map_into_keys_values", since = "1.53.0")] +#[stable(feature = "map_into_keys_values", since = "1.54.0")] impl<K, V> Iterator for IntoValues<K, V> { type Item = V; @@ -2174,17 +2174,17 @@ impl<K, V> Iterator for IntoValues<K, V> { self.inner.size_hint() } } -#[stable(feature = "map_into_keys_values", since = "1.53.0")] +#[stable(feature = "map_into_keys_values", since = "1.54.0")] impl<K, V> ExactSizeIterator for IntoValues<K, V> { #[inline] fn len(&self) -> usize { self.inner.len() } } -#[stable(feature = "map_into_keys_values", since = "1.53.0")] +#[stable(feature = "map_into_keys_values", since = "1.54.0")] impl<K, V> FusedIterator for IntoValues<K, V> {} -#[stable(feature = "map_into_keys_values", since = "1.53.0")] +#[stable(feature = "map_into_keys_values", since = "1.54.0")] impl<K, V: Debug> fmt::Debug for IntoValues<K, V> { fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { f.debug_list().entries(self.inner.iter().map(|(_, v)| v)).finish()