Struct qp_trie::Trie[][src]

pub struct Trie<K, V> { /* fields omitted */ }

A QP-trie. QP stands for - depending on who you ask - either "quelques-bits popcount" or "quad-bit popcount". In any case, the fact of the matter is that this is a compressed radix trie with a branching factor of 16. It acts as a key-value map where the keys are any value which can be converted to a slice of bytes.

The following example uses the provided string wrapper. Unfortunately, String/str cannot be used directly because they do not implement Borrow<[u8]> (as they do not hash the same way as a byte slice.) As a stopgap, qp_trie::wrapper::{BString, BStr} are provided, as are the .whatever_str() convenience methods on qp_trie::Trie<BString, _>.

Example


let mut trie = Trie::new();

trie.insert_str("abbc", 1);
trie.insert_str("abcd", 2);
trie.insert_str("bcde", 3);
trie.insert_str("bdde", 4);
trie.insert_str("bddf", 5);

// This will print the following string:
//
// `{"abbc": 1, "abcd": 2, "bcde": 3, "bdde": 4, "bddf": 5}`

println!("{:?}", trie);

assert_eq!(trie.get_str("abcd"), Some(&2));
assert_eq!(trie.get_str("bcde"), Some(&3));

// We can take subtries, removing all elements of the trie with a given prefix.
let mut subtrie = trie.remove_prefix_str("b");

assert_eq!(trie.get_str("abbc"), Some(&1));
assert_eq!(trie.get_str("abcd"), Some(&2));
assert_eq!(trie.get_str("bcde"), None);
assert_eq!(trie.get_str("bdde"), None);
assert_eq!(trie.get_str("bddf"), None);

assert_eq!(subtrie.get_str("abbc"), None);
assert_eq!(subtrie.get_str("abcd"), None);
assert_eq!(subtrie.get_str("bcde"), Some(&3));
assert_eq!(subtrie.get_str("bdde"), Some(&4));
assert_eq!(subtrie.get_str("bddf"), Some(&5));

// We can remove elements:
assert_eq!(trie.remove_str("abbc"), Some(1));
assert_eq!(trie.get_str("abbc"), None);

// We can mutate values:
*subtrie.get_mut_str("bdde").unwrap() = 0;
assert_eq!(subtrie.get_str("bdde"), Some(&0));

Methods

impl<K, V> Trie<K, V>
[src]

Create a new, empty trie.

Important traits for Iter<'a, K, V>

Iterate over all elements in the trie.

Important traits for IterMut<'a, K, V>

Iterate over all elements in the trie, given a mutable reference to the associated value.

Iterate over all keys in the trie.

Iterate over all values in the trie.

Iterate over all values in the trie, mutably.

Remove all entries from the trie, leaving it empty.

Returns true if the trie has no entries.

impl<K: Borrow<[u8]>, V> Trie<K, V>
[src]

Important traits for Iter<'a, K, V>

Iterate over all elements with a given prefix.

Important traits for IterMut<'a, K, V>

Iterate over all elements with a given prefix, but given a mutable reference to the associated value.

Get an immutable view into the trie, providing only values keyed with the given prefix.

Get the longest common prefix of all the nodes in the trie and the given key.

Count the number of entries in the tree. This is currently slow - it traverses the entire trie!

TODO: Speed this up by tracking the size of the trie for each insert/removal.

Returns true if there is an entry for the given key.

Get an immutable reference to the value associated with a given key, if it is in the tree.

Get a mutable reference to the value associated with a given key, if it is in the tree.

Insert a key/value pair into the trie, returning the old value if an entry already existed.

Remove the key/value pair associated with a given key from the trie, returning Some(val) if a corresponding key/value pair was found.

Remove all elements beginning with a given prefix from the trie, producing a subtrie.

Get the corresponding entry for the given key.

impl<V> Trie<BString, V>
[src]

Important traits for Iter<'a, K, V>

Convenience function for iterating over suffixes with a string.

Important traits for IterMut<'a, K, V>

Convenience function for iterating over suffixes with a string.

Convenience function for viewing subtries wit a string prefix.

Returns true if there is an entry for the given string key.

Convenience function for getting with a string.

Convenience function for getting mutably with a string.

Convenience function for inserting with a string.

Convenience function for removing with a string.

Convenience function for removing a prefix with a string.

Trait Implementations

impl<K: Clone, V: Clone> Clone for Trie<K, V>
[src]

Returns a copy of the value. Read more

Performs copy-assignment from source. Read more

impl<K: PartialEq, V: PartialEq> PartialEq for Trie<K, V>
[src]

This method tests for self and other values to be equal, and is used by ==. Read more

This method tests for !=.

impl<K: Eq, V: Eq> Eq for Trie<K, V>
[src]

impl<K: Default, V: Default> Default for Trie<K, V>
[src]

Returns the "default value" for a type. Read more

impl<K: Debug + ToOwned, V: Debug> Debug for Trie<K, V>
[src]

Formats the value using the given formatter. Read more

impl<K, V> IntoIterator for Trie<K, V>
[src]

Which kind of iterator are we turning this into?

The type of the elements being iterated over.

Creates an iterator from a value. Read more

impl<K: Borrow<[u8]>, V> FromIterator<(K, V)> for Trie<K, V>
[src]

Creates a value from an iterator. Read more

impl<K: Borrow<[u8]>, V> Extend<(K, V)> for Trie<K, V>
[src]

Extends a collection with the contents of an iterator. Read more

impl<'a, K: Borrow<[u8]>, V, Q: ?Sized> Index<&'a Q> for Trie<K, V> where
    K: Borrow<Q>,
    Q: Borrow<[u8]>, 
[src]

The returned type after indexing.

Performs the indexing (container[index]) operation.

impl<'a, K: Borrow<[u8]>, V, Q: ?Sized> IndexMut<&'a Q> for Trie<K, V> where
    K: Borrow<Q>,
    Q: Borrow<[u8]>, 
[src]

Performs the mutable indexing (container[index]) operation.

Auto Trait Implementations

impl<K, V> Send for Trie<K, V> where
    K: Send,
    V: Send

impl<K, V> Sync for Trie<K, V> where
    K: Sync,
    V: Sync