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> {}