flange_flat_tree/tree/
vec_tree.rs

1/*! The vec tree is the basic data structure
2for a tree.
3It stores it values in a vector.
4
5When you use a `Builder` you reate a `VecTree`.
6*/
7
8use crate::navigator::Navigator;
9
10use super::subtree::subtree_impl::SubtreeImpl;
11use super::{tree_data::TreeData, Tree};
12
13pub struct VecTree<A> {
14    pub nav: Navigator,
15    pub values: Vec<A>,
16}
17
18impl<'a, A> TreeData for &'a VecTree<A> {
19    type Node = &'a A;
20
21    fn get(self, index: usize) -> Self::Node {
22        &self.values[index]
23    }
24
25    fn count(self) -> usize {
26        self.values.len()
27    }
28
29    fn get_nav(&self) -> &Navigator {
30        &self.nav
31    }
32}
33
34impl<'a, A> Tree<'a> for VecTree<A>
35where
36    A: 'a,
37{
38    type Node = &'a A;
39    type SubtreeType = SubtreeImpl<&'a VecTree<A>>;
40
41    fn at_pos(&'a self, index: usize) -> Self::SubtreeType {
42        SubtreeImpl::new(self, index)
43    }
44
45    fn get_nav(&self) -> &Navigator {
46        &self.nav
47    }
48}