icentral_workspace_map/
workspace_map.rs1crate::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 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 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}