use core::{
iter::{FusedIterator, Zip},
slice,
};
#[derive(Debug)]
pub struct IterMut<'a, K, V>(Zip<slice::Iter<'a, K>, slice::IterMut<'a, V>>);
impl<'a, K, V> IterMut<'a, K, V>
where
K: 'a,
V: 'a,
{
pub(super) fn new(keys: &'a [K], values: &'a mut [V]) -> Self {
Self(keys.iter().zip(values.iter_mut()))
}
}
impl<'a, K, V> Iterator for IterMut<'a, K, V>
where
K: 'a,
V: 'a,
{
type Item = (&'a K, &'a mut V);
fn next(&mut self) -> Option<Self::Item> {
self.0.next()
}
fn size_hint(&self) -> (usize, Option<usize>) {
self.0.size_hint()
}
}
impl<'a, K, V> DoubleEndedIterator for IterMut<'a, K, V>
where
K: 'a,
V: 'a,
{
fn next_back(&mut self) -> Option<Self::Item> {
self.0.next_back()
}
}
impl<'a, K, V> ExactSizeIterator for IterMut<'a, K, V> {}
impl<'a, K, V> FusedIterator for IterMut<'a, K, V> {}