pub struct TSTMap<Value> { /* private fields */ }Expand description
Symbol table with string keys, implemented using a ternary search
trie (TSTMap).
There is character on each node of the trie, value and links for children. Each node has 3 children: smaller (lt), equal (eq), larger (gt). It could be used as associative array for strings as keys. Also it provides extra features, like getting all keys, values with common prefix.
§Examples
use tst::TSTMap;
let mut m = TSTMap::new();
m.insert("first", 1);
m.insert("second", 2);
m.insert("firstthird", 3);
m.insert("firstsecond", 12);
m.insert("xirst", -13);
// iterate
for (key, value) in m.iter() {
println!("{}: {}", key, value);
}
assert_eq!(Some(&1), m.get("first"));
assert_eq!(5, m.len());
// calculating longest prefix
assert_eq!("firstsecond", m.longest_prefix("firstsecondthird"));
// get values with common prefix
for (key, value) in m.prefix_iter("first") {
println!("{}: {}", key, value);
}
// get sum by wildcard iterator
assert_eq!(-12, m.wildcard_iter(".irst").fold(0, |sum, (_, val)| sum + val));Root struct for TSTMap, which holds root and size.
Implementations§
Source§impl<Value> TSTMap<Value>
impl<Value> TSTMap<Value>
Sourcepub fn new() -> Self
pub fn new() -> Self
Constructs a new, empty TSTMap<Value>.
§Examples
use tst::TSTMap;
let mut t: TSTMap<i64> = TSTMap::new();Sourcepub fn len(&self) -> usize
pub fn len(&self) -> usize
Returns the number of elements in the container.
§Examples
use tst::TSTMap;
let mut m = TSTMap::new();
assert_eq!(0, m.len());
m.insert("ab", 2);
m.insert("x", 1);
assert_eq!(2, m.len());Sourcepub fn entry(&mut self, key: &str) -> Entry<'_, Value>
pub fn entry(&mut self, key: &str) -> Entry<'_, Value>
Gets the given key’s corresponding entry in the TSTMap for in-place manipulation.
§Examples
use tst::TSTMap;
let mut count: TSTMap<usize> = TSTMap::new();
for x in vec!["abc","bad","abd","cdddd","abc","bade"] {
*count.entry(x).or_insert(0) += 1;
}
assert_eq!(2, count["abc"]);
assert_eq!(1, count["abd"]);Sourcepub fn remove(&mut self, key: &str) -> Option<Value>
pub fn remove(&mut self, key: &str) -> Option<Value>
Removes a key from the TSTMap, returning the value at the key if the key
was previously in the TSTMap.
§Examples
use tst::TSTMap;
let mut m = TSTMap::new();
m.insert("abc", 100);
assert_eq!(Some(100), m.remove("abc"));
assert_eq!(None, m.remove("abc"));Sourcepub fn get(&self, key: &str) -> Option<&Value>
pub fn get(&self, key: &str) -> Option<&Value>
Returns a reference to the value corresponding to the key or None.
§Examples
use tst::TSTMap;
let mut m = TSTMap::new();
m.insert("first", 13);
assert_eq!(Some(&13), m.get("first"));
assert_eq!(None, m.get("second"));Sourcepub fn get_mut(&mut self, key: &str) -> Option<&mut Value>
pub fn get_mut(&mut self, key: &str) -> Option<&mut Value>
Returns a mutable reference to the value corresponding to the key.
§Examples
use tst::TSTMap;
let mut m = TSTMap::new();
m.insert("first", 13);
if let Some(x) = m.get_mut("first") {
*x = -13;
}
assert_eq!(-13, m["first"]);Sourcepub fn contains_key(&self, key: &str) -> bool
pub fn contains_key(&self, key: &str) -> bool
Returns true if the TSTMap contains a value for the specified key.
§Examples
use tst::TSTMap;
let mut m = TSTMap::new();
m.insert("abc", 1);
assert!(!m.contains_key("ab"));
assert!(m.contains_key("abc"))Sourcepub fn is_empty(&self) -> bool
pub fn is_empty(&self) -> bool
Returns true if the TSTMap contains no elements.
§Examples
use tst::TSTMap;
let mut m = TSTMap::new();
assert!(m.is_empty());
m.insert("abc", 1);
assert!(!m.is_empty());Sourcepub fn clear(&mut self)
pub fn clear(&mut self)
Clears the TSTMap.
§Examples
use tst::TSTMap;
let mut m = TSTMap::new();
m.insert("abc", 1);
m.insert("abd", 100);
m.clear();
assert!(m.is_empty());
assert_eq!(None, m.get("abc"));Sourcepub fn wildcard_iter(&self, pat: &str) -> WildCardIter<'_, Value> ⓘ
pub fn wildcard_iter(&self, pat: &str) -> WildCardIter<'_, Value> ⓘ
An iterator returning all nodes matching wildcard pattern pat.
Iterator element type is (String, V)
§Examples
use tst::TSTMap;
let mut m = TSTMap::new();
m.insert("a", 1);
m.insert("b", 2);
m.insert("c", 3);
for (k, v) in m.wildcard_iter(".") {
println!("{} -> {}", k, v);
}Sourcepub fn wildcard_iter_mut(&mut self, pat: &str) -> WildCardIterMut<'_, Value> ⓘ
pub fn wildcard_iter_mut(&mut self, pat: &str) -> WildCardIterMut<'_, Value> ⓘ
An mutable iterator returning all nodes matching wildcard pattern pat.
§Examples
use tst::TSTMap;
let mut m = TSTMap::new();
m.insert("a", 1);
m.insert("b", 2);
m.insert("c", 3);
for (k, v) in m.wildcard_iter_mut(".") {
*v += 10;
}
assert_eq!(11, m["a"]);
assert_eq!(12, m["b"]);
assert_eq!(13, m["c"]);Sourcepub fn prefix_iter(&self, pref: &str) -> Iter<'_, Value> ⓘ
pub fn prefix_iter(&self, pref: &str) -> Iter<'_, Value> ⓘ
Method returns iterator over all values with common prefix pref in the TSTMap.
§Examples
use tst::TSTMap;
let mut m = TSTMap::new();
m.insert("abc", 1);
m.insert("abcd", 1);
m.insert("abce", 1);
m.insert("abca", 1);
m.insert("zxd", 1);
m.insert("add", 1);
m.insert("abcdef", 1);
for (key, value) in m.prefix_iter("abc") {
println!("{}: {}", key, value);
}
Sourcepub fn prefix_iter_mut(&mut self, pref: &str) -> IterMut<'_, Value> ⓘ
pub fn prefix_iter_mut(&mut self, pref: &str) -> IterMut<'_, Value> ⓘ
Method returns mutable iterator over all values with common prefix pref in the TSTMap.
§Examples
use tst::TSTMap;
let mut m = TSTMap::new();
m.insert("abc", 1);
m.insert("abcd", 1);
m.insert("abce", 1);
m.insert("abca", 1);
m.insert("zxd", 1);
m.insert("add", 1);
m.insert("abcdef", 1);
for (key, value) in m.prefix_iter_mut("abc") {
*value += 100;
}
assert_eq!(101, m["abc"]);
assert_eq!(101, m["abcdef"]);Sourcepub fn iter(&self) -> Iter<'_, Value> ⓘ
pub fn iter(&self) -> Iter<'_, Value> ⓘ
Gets an iterator over the entries of the TSTMap.
§Examples
use tst::TSTMap;
let mut m = TSTMap::new();
m.insert("abc", 1);
m.insert("bbc", 2);
m.insert("cccda", 3);
for (key, value) in m.iter() {
println!("{}: {}", key, value);
}
let (first_key, first_value) = m.iter().next().unwrap();
assert_eq!((first_key, *first_value), ("abc".to_string(), 1));Sourcepub fn iter_mut(&mut self) -> IterMut<'_, Value> ⓘ
pub fn iter_mut(&mut self) -> IterMut<'_, Value> ⓘ
Gets a mutable iterator over the entries of the TSTMap.
§Examples
use tst::TSTMap;
let mut m = TSTMap::new();
m.insert("a", 1);
m.insert("b", 2);
m.insert("c", 3);
for (key, value) in m.iter_mut() {
if key != "a" {
*value += 10;
}
}
assert_eq!(1, m["a"]);
assert_eq!(12, m["b"]);Sourcepub fn keys(&self) -> KeysIter<'_, Value> ⓘ
pub fn keys(&self) -> KeysIter<'_, Value> ⓘ
An iterator visiting all keys in arbitrary order. Iterator element type is String
§Examples
use tst::TSTMap;
let mut m = TSTMap::new();
m.insert("a", 1);
m.insert("b", 2);
m.insert("c", 3);
for key in m.keys() {
println!("{}", key);
}Sourcepub fn values(&self) -> ValuesIter<'_, Value> ⓘ
pub fn values(&self) -> ValuesIter<'_, Value> ⓘ
An iterator visiting all values in arbitrary order. Iterator element type is &V
§Examples
use tst::TSTMap;
let mut m = TSTMap::new();
m.insert("a", 1);
m.insert("b", 2);
m.insert("c", 3);
for value in m.values() {
println!("{}", value);
}Source§impl<'x, Value: 'x> TSTMap<Value>
impl<'x, Value: 'x> TSTMap<Value>
Sourcepub fn longest_prefix(&self, pref: &'x str) -> &'x str
pub fn longest_prefix(&self, pref: &'x str) -> &'x str
Method returns longest prefix pref in the TSTMap.
§Examples
use tst::TSTMap;
let mut m = TSTMap::new();
m.insert("abc", 1);
m.insert("abcd", 1);
m.insert("abce", 1);
m.insert("abca", 1);
m.insert("zxd", 1);
m.insert("add", 1);
m.insert("abcdef", 1);
assert_eq!("abcd", m.longest_prefix("abcde"));Trait Implementations§
Source§impl<'x, Value> Extend<(&'x str, Value)> for TSTMap<Value>
impl<'x, Value> Extend<(&'x str, Value)> for TSTMap<Value>
Source§fn extend<I: IntoIterator<Item = (&'x str, Value)>>(&mut self, iter: I)
fn extend<I: IntoIterator<Item = (&'x str, Value)>>(&mut self, iter: I)
Source§fn extend_one(&mut self, item: A)
fn extend_one(&mut self, item: A)
extend_one)Source§fn extend_reserve(&mut self, additional: usize)
fn extend_reserve(&mut self, additional: usize)
extend_one)Source§impl<'x, Value> FromIterator<(&'x str, Value)> for TSTMap<Value>
impl<'x, Value> FromIterator<(&'x str, Value)> for TSTMap<Value>
Source§impl<Value> IntoIterator for TSTMap<Value>
impl<Value> IntoIterator for TSTMap<Value>
Source§fn into_iter(self) -> IntoIter<Value> ⓘ
fn into_iter(self) -> IntoIter<Value> ⓘ
Creates a consuming iterator, that is, one that moves each key-value
pair out of the TSTMap in arbitrary order. The TSTMap cannot be used after
calling this.
§Examples
use tst::TSTMap;
let mut m = TSTMap::new();
m.insert("a", 1);
m.insert("b", 2);
m.insert("c", 3);
let vec: Vec<(String, isize)> = m.into_iter().collect();