icentral_node_stack/
node_stack.rs

1crate::ix!();
2
3#[derive(Clone,Debug)]
4pub struct NodeIdStack {
5    name: String,
6    data: Vec<NodeId>,
7}
8
9impl NodeIdStack {
10
11    pub fn new(first: NodeId, name: &str) -> Self {
12
13        debug!("creating new NodeIdStack named {} from initial node {}", name, first);
14
15        let mut stack = NodeIdStack::empty(name);
16
17        stack.push(first);
18
19        stack
20    }
21
22    pub fn len(&self) -> usize {
23        self.data.len()
24    }
25}
26
27impl CreateNamedEmpty for NodeIdStack {
28
29    fn empty(name: &str) -> Self {
30        Self {
31            name: name.to_owned(),
32            data: vec![],
33        }
34    }
35}
36
37impl Clear for NodeIdStack {
38
39    fn clear(&mut self) {
40
41        debug!("clearing NodeIdStack {} of len: {}", self.name, self.len());
42
43        self.data.clear();
44    }
45}
46
47impl NodeAtIndex for NodeIdStack {
48
49    fn node_at_index(&self, idx: usize) -> NodeId {
50        self.data[idx]
51    }
52}
53
54impl SetNodeAtIndex for NodeIdStack {
55
56    fn set_node_at_index(&mut self, idx: usize, n: NodeId) {
57
58        debug!("setting node {} at idx {} of NodeIdStack {}", n, idx, self.name);
59
60        self.data[idx] = n;
61    }
62}
63
64impl Push for NodeIdStack {
65
66    type Item = NodeId;
67
68    fn push(&mut self, n: Self::Item) {
69
70        debug!("pushing node {} into NodeIdStack {}", n, self.name);
71
72        self.data.push(n);
73    }
74}
75
76impl Pop for NodeIdStack {
77
78    type Item = NodeId;
79
80    fn pop(&mut self) -> Option<Self::Item> {
81
82        let n = self.data.pop();
83
84        debug!("popped node {:?} from NodeIdStack, {}", n, self.name);
85
86        n
87    }
88}