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

Method avl_insert

nodedb/src/engine/kv/sorted_index/tree.rs:268–295  ·  view source on GitHub ↗
(&mut self, idx: u32, sort_key: Vec<u8>, primary_key: Vec<u8>)

Source from the content-addressed store, hash-verified

266 }
267
268 fn avl_insert(&mut self, idx: u32, sort_key: Vec<u8>, primary_key: Vec<u8>) -> u32 {
269 if idx == NULL {
270 return self.alloc_node(sort_key, primary_key);
271 }
272
273 let n = &self.nodes[idx as usize];
274 let cmp = Self::cmp_keys(&sort_key, &primary_key, &n.sort_key, &n.primary_key);
275
276 match cmp {
277 std::cmp::Ordering::Less => {
278 let left = self.nodes[idx as usize].left;
279 let new_left = self.avl_insert(left, sort_key, primary_key);
280 self.nodes[idx as usize].left = new_left;
281 }
282 std::cmp::Ordering::Greater => {
283 let right = self.nodes[idx as usize].right;
284 let new_right = self.avl_insert(right, sort_key, primary_key);
285 self.nodes[idx as usize].right = new_right;
286 }
287 std::cmp::Ordering::Equal => {
288 // Exact duplicate (same sort_key + primary_key) — shouldn't happen
289 // since we check key_to_sort before inserting. No-op.
290 return idx;
291 }
292 }
293
294 self.rebalance(idx)
295 }
296
297 fn avl_remove(&mut self, idx: u32, sort_key: &[u8], primary_key: &[u8]) -> u32 {
298 if idx == NULL {

Callers 1

insertMethod · 0.80

Calls 2

alloc_nodeMethod · 0.80
rebalanceMethod · 0.45

Tested by

no test coverage detected