orx_tree/traversal/
enumerations.rs

1use super::enumeration::Enumeration;
2
3#[derive(Clone)]
4pub struct Val;
5impl Enumeration for Val {
6    type Item<D> = D;
7
8    #[inline(always)]
9    fn node_data<D>(element: &Self::Item<D>) -> &D {
10        element
11    }
12
13    #[inline(always)]
14    fn map_node_data<D, M, E>(element: Self::Item<D>, map: M) -> Self::Item<E>
15    where
16        M: FnOnce(D) -> E,
17    {
18        map(element)
19    }
20}
21
22#[derive(Clone)]
23pub struct DepthVal;
24impl Enumeration for DepthVal {
25    type Item<D> = (usize, D);
26
27    #[inline(always)]
28    fn node_data<D>(element: &Self::Item<D>) -> &D {
29        &element.1
30    }
31
32    #[inline(always)]
33    fn map_node_data<D, M, E>(element: Self::Item<D>, map: M) -> Self::Item<E>
34    where
35        M: FnOnce(D) -> E,
36    {
37        (element.0, map(element.1))
38    }
39}
40
41#[derive(Clone)]
42pub struct SiblingIdxVal;
43impl Enumeration for SiblingIdxVal {
44    type Item<D> = (usize, D);
45
46    #[inline(always)]
47    fn node_data<D>(element: &Self::Item<D>) -> &D {
48        &element.1
49    }
50
51    #[inline(always)]
52    fn map_node_data<D, M, E>(element: Self::Item<D>, map: M) -> Self::Item<E>
53    where
54        M: FnOnce(D) -> E,
55    {
56        (element.0, map(element.1))
57    }
58}
59
60#[derive(Clone)]
61pub struct DepthSiblingIdxVal;
62impl Enumeration for DepthSiblingIdxVal {
63    type Item<D> = (usize, usize, D);
64
65    #[inline(always)]
66    fn node_data<D>(element: &Self::Item<D>) -> &D {
67        &element.2
68    }
69
70    #[inline(always)]
71    fn map_node_data<D, M, E>(element: Self::Item<D>, map: M) -> Self::Item<E>
72    where
73        M: FnOnce(D) -> E,
74    {
75        (element.0, element.1, map(element.2))
76    }
77}