flange_flat_tree/tree/
builder.rs1use crate::VecTree;
2pub struct Builder<A> {
27 nav_builder: crate::navigator::Builder,
28 values: Vec<A>,
29}
30
31impl<A> Builder<A> {
32 pub fn new() -> Builder<A> {
33 Builder {
34 nav_builder: crate::navigator::Builder::default(),
35 values: Vec::new(),
36 }
37 }
38
39 pub fn with_capacity(c: usize) -> Builder<A> {
40 Builder {
41 nav_builder: crate::navigator::Builder::with_capacity(c),
42 values: Vec::with_capacity(c),
43 }
44 }
45
46 pub fn get(&self, index: usize) -> Option<&A> {
47 self.values.get(index)
48 }
49
50 pub fn get_mut(&mut self, index: usize) -> Option<&mut A> {
51 self.values.get_mut(index)
52 }
53
54 pub fn start_element(&mut self, el: A) -> usize {
55 self.values.push(el);
56 self.nav_builder.start_element()
57 }
58
59 pub fn end_element(&mut self) -> usize {
60 self.nav_builder.end_element()
61 }
62
63 pub fn start_end_element(&mut self, el: A) -> usize {
64 self.values.push(el);
65 self.nav_builder.start_end_element()
66 }
67}
68
69impl<A> Default for Builder<A> {
70 fn default() -> Self {
71 Self::new()
72 }
73}
74
75impl<A> Builder<A> {
76 pub fn build(self) -> VecTree<A> {
77 VecTree {
78 nav: self.nav_builder.build(),
79 values: self.values,
80 }
81 }
82}