orx_tree/traversal/
enumeration.rs1use super::{node_item::NodeItem, node_item_mut::NodeItemMut};
2use crate::{TreeVariant, aliases::Col, memory::MemoryPolicy, pinned_storage::PinnedStorage};
3use orx_selfref_col::NodePtr;
4
5pub trait Enumeration: Clone {
6 type Item<D>;
7
8 fn map_node_data<D, M, E>(element: Self::Item<D>, map: M) -> Self::Item<E>
9 where
10 M: FnOnce(D) -> E;
11
12 fn node_data<D>(element: &Self::Item<D>) -> &D;
13
14 fn from_element_ptr<'a, V, M, P, D>(
15 col: &'a Col<V, M, P>,
16 element_ptr: Self::Item<NodePtr<V>>,
17 ) -> Self::Item<D>
18 where
19 V: TreeVariant,
20 M: MemoryPolicy,
21 P: PinnedStorage,
22 D: NodeItem<'a, V, M, P>,
23 {
24 let map = |ptr| D::from_ptr(col, ptr);
25 Self::map_node_data(element_ptr, map)
26 }
27
28 fn from_element_ptr_mut<'a, V, M, P, E>(
29 col: &'a Col<V, M, P>,
30 element_ptr: Self::Item<NodePtr<V>>,
31 ) -> Self::Item<E>
32 where
33 V: TreeVariant,
34 M: MemoryPolicy,
35 P: PinnedStorage,
36 E: NodeItemMut<'a, V, M, P>,
37 {
38 let map = |ptr: NodePtr<V>| E::from_ptr(col, ptr);
39 Self::map_node_data(element_ptr, map)
40 }
41}