orx_iterable/obj_safe/transformations/
reversed.rs

1use orx_self_or::SoM;
2
3use crate::{
4    obj_safe::{CollectionMutObj, CollectionObj, IterableObj},
5    transformations::{Reversed, ReversedCol},
6    Collection, CollectionMut, Iterable,
7};
8use std::boxed::Box;
9
10impl<I> IterableObj for Reversed<I>
11where
12    I: Iterable,
13    I::Iter: DoubleEndedIterator,
14{
15    type Item = I::Item;
16
17    fn boxed_iter(&self) -> Box<dyn Iterator<Item = Self::Item> + '_> {
18        Box::new(self.it.iter().rev())
19    }
20}
21
22// col
23
24impl<'a, I, E> IterableObj for &'a ReversedCol<I, E>
25where
26    I: Collection,
27    E: SoM<I>,
28    for<'b> <I::Iterable<'b> as Iterable>::Iter: DoubleEndedIterator,
29{
30    type Item = &'a I::Item;
31
32    fn boxed_iter(&self) -> Box<dyn Iterator<Item = Self::Item> + '_> {
33        Box::new(self.it.get_ref().iter().rev())
34    }
35}
36
37impl<I, E> CollectionObj for ReversedCol<I, E>
38where
39    I: Collection,
40    E: SoM<I>,
41    for<'b> <I::Iterable<'b> as Iterable>::Iter: DoubleEndedIterator,
42{
43    type Item = I::Item;
44
45    fn boxed_iter(&self) -> Box<dyn Iterator<Item = &Self::Item> + '_> {
46        Box::new(self.iter())
47    }
48}
49
50impl<I, E> CollectionMutObj for ReversedCol<I, E>
51where
52    I: CollectionMut,
53    E: SoM<I>,
54    for<'b> <I::Iterable<'b> as Iterable>::Iter: DoubleEndedIterator,
55    for<'b> I::IterMut<'b>: DoubleEndedIterator,
56{
57    fn boxed_iter_mut(&mut self) -> Box<dyn Iterator<Item = &mut Self::Item> + '_> {
58        Box::new(self.it.get_mut().iter_mut().rev())
59    }
60}