summaryrefslogtreecommitdiff
path: root/libs/db/src/trie.rs
diff options
context:
space:
mode:
Diffstat (limited to 'libs/db/src/trie.rs')
-rw-r--r--libs/db/src/trie.rs36
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;