impl ExactSizeIterator for VecMap

This commit is contained in:
Ayaz Hafiz 2022-05-06 14:10:16 -04:00
parent abb9bb8169
commit a0950e9321
No known key found for this signature in database
GPG key ID: 0E2A37416A25EF58

View file

@ -13,6 +13,13 @@ impl<K, V> Default for VecMap<K, V> {
}
}
impl<K, V> VecMap<K, V> {
pub fn len(&self) -> usize {
debug_assert_eq!(self.keys.len(), self.values.len());
self.keys.len()
}
}
impl<K: PartialEq, V> VecMap<K, V> {
pub fn with_capacity(capacity: usize) -> Self {
Self {
@ -21,11 +28,6 @@ impl<K: PartialEq, V> VecMap<K, V> {
}
}
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<K: PartialEq, V> VecMap<K, V> {
self.keys.iter().zip(self.values.iter())
}
pub fn into_iter(self) -> impl ExactSizeIterator<Item = (K, V)> {
self.keys.into_iter().zip(self.values.into_iter())
}
pub fn keys(&self) -> impl ExactSizeIterator<Item = &K> {
self.keys.iter()
}
@ -157,6 +155,7 @@ impl<K, V> IntoIterator for VecMap<K, V> {
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<K, V> IntoIterator for VecMap<K, V> {
}
pub struct IntoIter<K, V> {
len: usize,
keys: std::vec::IntoIter<K>,
values: std::vec::IntoIter<V>,
}
@ -178,3 +178,9 @@ impl<K, V> Iterator for IntoIter<K, V> {
}
}
}
impl<K, V> ExactSizeIterator for IntoIter<K, V> {
fn len(&self) -> usize {
self.len
}
}