diff options
Diffstat (limited to 'libs/db/src/trie.rs')
| -rw-r--r-- | libs/db/src/trie.rs | 36 |
1 files changed, 19 insertions, 17 deletions
diff --git a/libs/db/src/trie.rs b/libs/db/src/trie.rs index 38cbcd8..754d978 100644 --- a/libs/db/src/trie.rs +++ b/libs/db/src/trie.rs @@ -5,16 +5,15 @@ use serde::{Deserialize, Serialize}; use std::collections::HashMap; use unicode_segmentation::UnicodeSegmentation; -#[derive(Debug, Serialize, Deserialize, Default)] -pub struct TrieNode<'a> { +#[derive(Debug, Serialize, Deserialize, Default, Clone)] +pub struct TrieNode { is_final: bool, - #[serde(borrow = "'a")] - child_nodes: HashMap<&'a str, TrieNode<'a>>, + child_nodes: HashMap<String, TrieNode>, child_count: u64, } -impl<'a> TrieNode<'a> { - pub fn new<'b>(is_final: bool) -> TrieNode<'b> { +impl TrieNode { + pub fn new<'b>(is_final: bool) -> TrieNode { TrieNode { is_final, child_nodes: HashMap::new(), @@ -22,7 +21,7 @@ impl<'a> TrieNode<'a> { } } - pub fn new_root<'b>() -> TrieNode<'b> { + pub fn new_root<'b>() -> TrieNode { TrieNode { is_final: false, child_nodes: HashMap::new(), @@ -31,15 +30,14 @@ impl<'a> TrieNode<'a> { } } -#[derive(Debug, Serialize, Deserialize, Default)] -pub struct Trie<'a> { - #[serde(borrow = "'a")] - root_node: Box<TrieNode<'a>>, +#[derive(Debug, Serialize, Deserialize, Default, Clone)] +pub struct Trie { + root_node: Box<TrieNode>, } -impl<'a> Trie<'a> { +impl<'a> Trie { // Create a TrieStruct - pub fn new<'b>() -> Trie<'b> { + pub fn new<'b>() -> Trie { Trie { root_node: Box::new(TrieNode::new_root()), } @@ -62,12 +60,16 @@ impl<'a> Trie<'a> { } else { create = true; - current_node.child_nodes.insert(str, TrieNode::new(false)); + current_node + .child_nodes + .insert(str.to_string(), TrieNode::new(false)); current_node = current_node.child_nodes.get_mut(str).unwrap(); current_node.child_count = 1; } } else { - current_node.child_nodes.insert(str, TrieNode::new(false)); + current_node + .child_nodes + .insert(str.to_string(), TrieNode::new(false)); current_node = current_node.child_nodes.get_mut(str).unwrap(); // we will only have one final node current_node.child_count = 1; @@ -88,7 +90,7 @@ impl<'a> Trie<'a> { // Descend as far as possible into the tree for (_, str) in graphemes { // If we can descend further into the tree - if let Some(node) = current_node.child_nodes.get(&str) { + if let Some(node) = current_node.child_nodes.get(str) { current_node = node; builder += str; debug!("going into node {}", builder); @@ -124,7 +126,7 @@ impl<'a> Trie<'a> { .child_nodes .iter() .nth(weighted.sample(&mut rng)) - .expect("choosed value did not exist"); + .expect("choose value did not exist"); debug!("walking into node {}", key); current_node = node; |
