micromap_rawl/
drain.rs

1use crate::Drain;
2use core::iter::FusedIterator;
3
4impl<K, V> Drop for Drain<'_, K, V> {
5    fn drop(&mut self) {
6        for pair in &mut self.iter {
7            unsafe { pair.assume_init_drop() };
8        }
9    }
10}
11
12impl<K: PartialEq, V> Iterator for Drain<'_, K, V> {
13    type Item = (K, V);
14
15    #[inline]
16    #[must_use]
17    fn next(&mut self) -> Option<Self::Item> {
18        self.iter.next().map(|p| unsafe { p.assume_init_read() })
19    }
20
21    #[inline]
22    fn size_hint(&self) -> (usize, Option<usize>) {
23        (self.iter.len(), Some(self.iter.len()))
24    }
25}
26
27impl<K: PartialEq, V> ExactSizeIterator for Drain<'_, K, V> {
28    #[inline]
29    fn len(&self) -> usize {
30        self.iter.len()
31    }
32}
33
34impl<K: PartialEq, V> FusedIterator for Drain<'_, K, V> {}