MCPcopy Create free account
hub / github.com/NodeDB-Lab/nodedb / remove_node_edges

Method remove_node_edges

nodedb-graph/src/csr/index/mutation.rs:113–162  ·  view source on GitHub ↗

Remove ALL edges touching a node. Returns the number of edges removed.

(&mut self, node: &str)

Source from the content-addressed store, hash-verified

111
112 /// Remove ALL edges touching a node. Returns the number of edges removed.
113 pub fn remove_node_edges(&mut self, node: &str) -> usize {
114 let Some(&node_id) = self.node_to_id.get(node) else {
115 return 0;
116 };
117 let mut removed = 0;
118
119 // Collect outgoing edges then remove reverse references.
120 let out_edges: Vec<(u32, u32)> = self.dense_iter_out(node_id).collect();
121 for (label_id, dst_id) in &out_edges {
122 let in_buf = &self.buffer_in[*dst_id as usize];
123 if let Some(pos) = in_buf
124 .iter()
125 .position(|&(l, s)| l == *label_id && s == node_id)
126 {
127 self.buffer_in[*dst_id as usize].swap_remove(pos);
128 if self.has_weights {
129 self.buffer_in_weights[*dst_id as usize].swap_remove(pos);
130 }
131 }
132 self.deleted_edges.insert((node_id, *label_id, *dst_id));
133 removed += 1;
134 }
135 self.buffer_out[node_id as usize].clear();
136 if self.has_weights {
137 self.buffer_out_weights[node_id as usize].clear();
138 }
139
140 // Collect incoming edges then remove reverse references.
141 let in_edges: Vec<(u32, u32)> = self.dense_iter_in(node_id).collect();
142 for (label_id, src_id) in &in_edges {
143 let out_buf = &self.buffer_out[*src_id as usize];
144 if let Some(pos) = out_buf
145 .iter()
146 .position(|&(l, d)| l == *label_id && d == node_id)
147 {
148 self.buffer_out[*src_id as usize].swap_remove(pos);
149 if self.has_weights {
150 self.buffer_out_weights[*src_id as usize].swap_remove(pos);
151 }
152 }
153 self.deleted_edges.insert((*src_id, *label_id, node_id));
154 removed += 1;
155 }
156 self.buffer_in[node_id as usize].clear();
157 if self.has_weights {
158 self.buffer_in_weights[node_id as usize].clear();
159 }
160
161 removed
162 }
163
164 /// Remove all edges touching any node whose ID starts with `prefix`.
165 ///

Callers 7

remove_node_edges_allFunction · 0.80
execute_bulk_deleteMethod · 0.80
execute_truncateMethod · 0.80
execute_point_deleteMethod · 0.80
tx_point_deleteMethod · 0.80
sweep_dangling_edgesMethod · 0.80

Calls 7

collectMethod · 0.80
dense_iter_outMethod · 0.80
dense_iter_inMethod · 0.80
getMethod · 0.45
iterMethod · 0.45
insertMethod · 0.45
clearMethod · 0.45

Tested by 1

remove_node_edges_allFunction · 0.64