icentral_workspace_map/
workspace_map.rs

1crate::ix!();
2
3#[derive(Clone,Debug)]
4pub struct WorkspaceMap {
5    name: String,
6    data: MaybeIndexedMap<ICentralWorkspace>,
7}
8
9impl Default for WorkspaceMap {
10
11    fn default() -> Self {
12        Self::empty_indexed("default_workspace_map")
13    }
14}
15
16impl WorkspaceMap {
17
18    pub fn empty_indexed(name: &str) -> Self {
19
20        Self {
21            name: name.to_owned(),
22            data: MaybeIndexedMap::empty_indexed()
23        }
24    }
25
26    pub fn empty_mapped(name: &str) -> Self {
27
28        Self {
29            name: name.to_owned(),
30            data: MaybeIndexedMap::empty_mapped()
31        }
32    }
33
34    pub fn new(graph_len: usize, name: &str) -> Self {
35
36        let mut data = MaybeIndexedMap::empty_indexed();
37
38        data.reserve(graph_len);
39
40        for idx in 0..graph_len {
41
42            let name = format!["workspace_for_{}",nodeid![idx]];
43
44            let workspace = ICentralWorkspace::new_init_all(graph_len, &name);
45
46            data.set(nodeid![idx], workspace);
47        }
48
49        Self { 
50            name: name.to_owned(),
51            data 
52        }
53    }
54
55    pub fn len(&self) -> usize {
56        self.data.len()
57    }
58
59    pub fn has_workspace(&self, node: NodeId) -> bool {
60        self.data.contains(node)
61    }
62
63    pub fn workspace_ref(&self, node: NodeId)
64    -> &ICentralWorkspace 
65    {
66        &self.data[node]
67    }
68
69    pub fn workspace_mut(&mut self, node: NodeId)
70    -> &mut ICentralWorkspace 
71    {
72        &mut self.data[node]
73    }
74
75    pub fn set_workspace_for_node(&mut self, node: NodeId, val: ICentralWorkspace) {
76        self.data[node] = val;
77    }
78
79    /*
80    pub fn reinit(&mut self, graph_len: usize) {
81        self.data.reserve(graph_len);
82        self.data.refill(graph_len,ICentralWorkspace::new_init_all(graph_len));
83    }
84    */
85
86    /// this could possibly be parallelized in the
87    /// future
88    ///
89    pub fn bbfs(&mut self, 
90        config:    Option<BBFSConfig>, 
91        component: &Component)
92    {
93        for node in NodeIdRange::new(0,self.len()) {
94
95            let workspace = self.workspace_mut(node);
96
97            bbfs(
98                None, 
99                workspace, 
100                component, 
101                node 
102            );
103        }
104    }
105
106    /// this could possibly be parallelized in the
107    /// future
108    ///
109    pub fn bbfs_rbfs(&mut self, 
110        scores:    &mut BetweennessScores,
111        config:    Option<BBFSConfig>, 
112        component: &mut Component)
113    {
114        for node in NodeIdRange::new(0,self.len()) {
115
116            let workspace = self.workspace_mut(node);
117
118            bbfs(
119                None, 
120                workspace, 
121                component, 
122                node 
123            );
124
125            rbfs(
126                scores, 
127                component, 
128                node, 
129                workspace, 
130                None,
131            );
132        }
133    }
134}