icentral_predecessor_map/
predecessor_map.rs

1crate::ix!();
2
3
4/// 1 means grey
5///
6#[derive(Clone,Debug)]
7pub struct PredecessorMap {
8    name: String,
9    data: MaybeIndexedMap<NodeId>,
10}
11
12impl PredecessorMap {
13
14    pub fn new_from_nodes(nodes: Vec<NodeId>, name: &str) -> Self {
15
16        debug!("creating new PredecessorMap named {} from {} nodes", name, nodes.len());
17
18        let mut builder = Self::empty_mapped(name);
19
20        for node in nodes {
21
22            builder.set_predecessor_for_node(
23                node,
24                NodeId::bad()
25            );
26        }
27
28        builder
29    }
30
31    pub fn empty_indexed(name: &str) -> Self {
32
33        debug!("creating new empty_indexed PredecessorMap named {}", name);
34
35        Self {
36            name: name.to_owned(),
37            data: MaybeIndexedMap::empty_indexed()
38        }
39    }
40
41    pub fn empty_mapped(name: &str) -> Self {
42
43        debug!("creating new empty_mapped PredecessorMap named {}", name);
44
45        Self {
46            name: name.to_owned(),
47            data: MaybeIndexedMap::empty_mapped()
48        }
49    }
50
51    pub fn new(len: usize, name: &str) -> Self {
52
53        debug!("creating new PredecessorMap named {} of len {}", name, len);
54
55        Self {
56            name: name.to_owned(),
57            data: MaybeIndexedMap::new(len,NodeId::bad()),
58        }
59    }
60
61    pub fn len(&self) -> usize {
62        self.data.len()
63    }
64
65    pub fn has_predecessor(&self, node: NodeId) -> bool {
66
67        let has_predecessor = self.predecessor_for_node(node) != NodeId::bad();
68
69        debug!("in {}, checking whether node {} has predecessor in the map -- has? {}", self.name, node, has_predecessor);
70
71        has_predecessor 
72    }
73
74    pub fn is_tree_root(&self, node: NodeId) -> bool {
75
76        let is_root = self.predecessor_for_node(node) == NodeId::bad();
77
78        debug!("in {}, checking whether node {} is the tree_root -- is? {}", self.name, node, is_root);
79
80        is_root
81    }
82
83    pub fn predecessor_for_node(&self, node: NodeId) -> NodeId {
84
85        debug!("in {}, getting predecessor for node {}", self.name, node);
86
87        self.data[node]
88    }
89
90    pub fn set_predecessor_for_node(&mut self, node: NodeId, val: NodeId) {
91
92        debug!("in {}, setting predecessor for node {} to {}", self.name, node, val);
93
94        self.data.set(node, val);
95    }
96
97    pub fn reinit(&mut self, len: usize) {
98
99        debug!("reinitializing PredecessorMap {} with len {}", self.name, len);
100
101        self.data.refill(len,NodeId::bad());
102    }
103}