orx_tree/traversal/
enumerations.rs1use 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}