1pub struct RevIntoIter<T: IntoIterator + Copy>
2 where T::IntoIter: DoubleEndedIterator
3{
4 original: T
5}
6
7pub trait Rev: IntoIterator + Copy
8 where Self::IntoIter: DoubleEndedIterator
9{
10 fn rev(self) -> RevIntoIter<Self> {
18 RevIntoIter { original: self }
19 }
20}
21
22impl<T: IntoIterator + Copy> Rev for T
23 where T::IntoIter: DoubleEndedIterator
24{
25}
26
27impl<T: IntoIterator + Copy> IntoIterator for RevIntoIter<T>
28 where T::IntoIter: DoubleEndedIterator
29{
30 type Item = T::Item;
31 type IntoIter = std::iter::Rev<T::IntoIter>;
32 fn into_iter(self) -> Self::IntoIter {
33 self.original.into_iter().rev()
34 }
35}
36
37impl<T: IntoIterator + Copy> Copy for RevIntoIter<T>
38 where T::IntoIter: DoubleEndedIterator
39{
40}
41
42impl<T: IntoIterator + Copy> Clone for RevIntoIter<T>
43 where T::IntoIter: DoubleEndedIterator
44{
45 fn clone(&self) -> Self {
46 Self { original: self.original }
47 }
48}