From 9caee1f3680c8c027adba016c6a1f9d0c5aa99a9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Danie=CC=88l=20de=20Kok?= Date: Fri, 2 Aug 2024 13:54:38 +0000 Subject: [PATCH] Parent links --- backends/v3/src/radix.rs | 21 +++++++++++++-------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/backends/v3/src/radix.rs b/backends/v3/src/radix.rs index c7236e97..2a70707a 100644 --- a/backends/v3/src/radix.rs +++ b/backends/v3/src/radix.rs @@ -24,7 +24,7 @@ pub struct RadixTrie { impl RadixTrie { pub fn new() -> Self { - let root = TrieNode::new(vec![], vec![], 0); + let root = TrieNode::new(vec![], vec![], 0, None); let mut nodes = SlotMap::new(); let root = nodes.insert(root); RadixTrie { @@ -90,11 +90,11 @@ impl RadixTrie { let blocks = &blocks[shared_prefix_len..]; self.insert_(child_id, key, blocks) } else { - let child = TrieNode::new(key.to_vec(), blocks.to_vec(), self.time); + let child = TrieNode::new(key.to_vec(), blocks.to_vec(), self.time, Some(node_id)); let child_id = self.nodes.insert(child); let node = self.nodes.get_mut(node_id).unwrap(); node.children.insert(key[0], child_id); - return key.len(); + key.len() } } @@ -105,9 +105,12 @@ impl RadixTrie { let rest_blocks = node.blocks.split_off(prefix_len); let first = rest_key[0]; - let new_id = self - .nodes - .insert(TrieNode::new(rest_key, rest_blocks, self.time)); + let new_id = self.nodes.insert(TrieNode::new( + rest_key, + rest_blocks, + self.time, + Some(node_id), + )); let node = self.nodes.get_mut(node_id).unwrap(); node.children.insert(first, new_id); @@ -115,19 +118,21 @@ impl RadixTrie { } struct TrieNode { + blocks: Vec, children: HashMap, key: Vec, - blocks: Vec, last_accessed: u64, + parent: Option, } impl TrieNode { - fn new(key: Vec, blocks: Vec, last_accessed: u64) -> Self { + fn new(key: Vec, blocks: Vec, last_accessed: u64, parent: Option) -> Self { TrieNode { children: HashMap::new(), key, blocks, last_accessed, + parent, } } }