gat_lending_iterator/traits/
to_lending_iterator.rs

1use crate::{IntoLending, LendRefs, LendRefsMut, Windows, WindowsMut};
2
3/// An extension trait for iterators that allows turning them into lending iterators (over windows of elements).
4pub trait ToLendingIterator: IntoIterator {
5    /// Turns this iterator into a lending iterator over windows of elements (&\[Item\]).
6    ///
7    /// `Windows` is backed by a buffer that grows to at most size * 2.
8    /// This was chosen as a compromise between memory usage and time complexity:
9    /// if the buffer was limited to size `size`, we would need to shift all the elements
10    /// on every iteration.
11    fn windows(self, size: usize) -> Windows<Self::IntoIter>
12    where
13        Self: Sized,
14    {
15        Windows::new(self.into_iter(), size)
16    }
17
18    /// Turns this iterator into a lending iterator over mutable windows of elements (&mut \[Item\]).
19    ///
20    /// `WindowsMut` is backed by a buffer that grows to at most size * 2.
21    /// This was chosen as a compromise between memory usage and time complexity:
22    /// if the buffer was limited to size `size`, we would need to shift all the elements
23    /// on every iteration.
24    fn windows_mut(self, size: usize) -> WindowsMut<Self::IntoIter>
25    where
26        Self: Sized,
27    {
28        WindowsMut::new(self.into_iter(), size)
29    }
30
31    /// Turns this iterator into a lending iterator trivially.
32    fn into_lending(self) -> IntoLending<Self::IntoIter>
33    where
34        Self: Sized,
35    {
36        IntoLending::new(self.into_iter())
37    }
38
39    /// Turns this iterator into a lending iterator that lends references
40    /// to the iterator's items.
41    fn lend_refs(self) -> LendRefs<Self::IntoIter>
42    where
43        Self: Sized,
44    {
45        LendRefs::new(self.into_iter())
46    }
47
48    /// Turns this iterator into a lending iterator that lends mutable references
49    /// to the iterator's items.
50    fn lend_refs_mut(self) -> LendRefsMut<Self::IntoIter>
51    where
52        Self: Sized,
53    {
54        LendRefsMut::new(self.into_iter())
55    }
56}
57
58impl<I: IntoIterator> ToLendingIterator for I {}