diff --git a/compiler/collections/src/vec_map.rs b/compiler/collections/src/vec_map.rs index 33ef76d4c0..8a38fcdb7b 100644 --- a/compiler/collections/src/vec_map.rs +++ b/compiler/collections/src/vec_map.rs @@ -13,6 +13,13 @@ impl Default for VecMap { } } +impl VecMap { + pub fn len(&self) -> usize { + debug_assert_eq!(self.keys.len(), self.values.len()); + self.keys.len() + } +} + impl VecMap { pub fn with_capacity(capacity: usize) -> Self { Self { @@ -21,11 +28,6 @@ impl VecMap { } } - pub fn len(&self) -> usize { - debug_assert_eq!(self.keys.len(), self.values.len()); - self.keys.len() - } - pub fn is_empty(&self) -> bool { debug_assert_eq!(self.keys.len(), self.values.len()); self.keys.is_empty() @@ -95,10 +97,6 @@ impl VecMap { self.keys.iter().zip(self.values.iter()) } - pub fn into_iter(self) -> impl ExactSizeIterator { - self.keys.into_iter().zip(self.values.into_iter()) - } - pub fn keys(&self) -> impl ExactSizeIterator { self.keys.iter() } @@ -157,6 +155,7 @@ impl IntoIterator for VecMap { fn into_iter(self) -> Self::IntoIter { IntoIter { + len: self.len(), keys: self.keys.into_iter(), values: self.values.into_iter(), } @@ -164,6 +163,7 @@ impl IntoIterator for VecMap { } pub struct IntoIter { + len: usize, keys: std::vec::IntoIter, values: std::vec::IntoIter, } @@ -178,3 +178,9 @@ impl Iterator for IntoIter { } } } + +impl ExactSizeIterator for IntoIter { + fn len(&self) -> usize { + self.len + } +}