Struct ZeroTrieSimpleAscii
struct ZeroTrieSimpleAscii<Store: ?Sized> { ... }
A data structure that compactly maps from ASCII strings to integers.
For more information, see ZeroTrie.
Examples
use LiteMap;
use ZeroTrieSimpleAscii;
let mut map = new_vec;
map.insert;
map.insert;
map.insert;
let trie = try_from?;
assert_eq!;
assert_eq!;
assert_eq!;
assert_eq!;
# Ok::
The trie can only store ASCII bytes; a string with non-ASCII always returns None:
use ZeroTrieSimpleAscii;
// A trie with two values: "abc" and "abcdef"
let trie = from_bytes;
assert!;
Implementations
impl ZeroTrieSimpleAscii<[u8]>
fn from_bytes(trie: &[u8]) -> &SelfCasts from a byte slice to a reference to a trie with the same lifetime.
If the bytes are not a valid trie, unexpected behavior may occur.
impl<'a> ZeroTrieSimpleAscii<&'a [u8]>
fn into_cursor(self: Self) -> ZeroTrieSimpleAsciiCursor<'a>Same as [
ZeroTrieSimpleAscii::cursor()] but moves self to avoid having to doubly anchor the trie to the stack.
impl<N: usize> ZeroTrieSimpleAscii<[u8; N]>
const fn from_sorted_u8_tuples(tuples: &[(&[u8], usize)]) -> SelfConst Constructor: Creates an
ZeroTrieSimpleAsciifrom a sorted slice of keys and values.This function needs to know the exact length of the resulting trie at compile time. To figure out
N, first setNto be too large (say 0xFFFF), then look at the resulting compile error which will tell you how to setN, like this:the evaluated program panicked at 'Buffer too large. Size needed: 17'
That error message says you need to set
Nto 17.Also see
Self::from_sorted_str_tuples.Panics
Panics if
itemsis not sorted or ifNis not correct.Examples
Create a
constZeroTrieSimpleAscii at compile time:use ZeroTrieSimpleAscii; // The required capacity for this trie happens to be 17 bytes const TRIE: = from_sorted_u8_tuples; assert_eq!; assert_eq!; assert_eq!; assert_eq!;Panics if strings are not sorted:
# use zerotrie::ZeroTrieSimpleAscii; const TRIE: ZeroTrieSimpleAscii<[u8; 17]> = ZeroTrieSimpleAscii::from_sorted_u8_tuples(&[ (b"foo", 1), (b"bar", 2), (b"bazzoo", 3), ]);Panics if capacity is too small:
# use zerotrie::ZeroTrieSimpleAscii; const TRIE: ZeroTrieSimpleAscii<[u8; 15]> = ZeroTrieSimpleAscii::from_sorted_u8_tuples(&[ (b"bar", 2), (b"bazzoo", 3), (b"foo", 1), ]);Panics if capacity is too large:
# use zerotrie::ZeroTrieSimpleAscii; const TRIE: ZeroTrieSimpleAscii<[u8; 20]> = ZeroTrieSimpleAscii::from_sorted_u8_tuples(&[ (b"bar", 2), (b"bazzoo", 3), (b"foo", 1), ]);const fn from_sorted_str_tuples(tuples: &[(&str, usize)]) -> SelfConst Constructor: Creates an
ZeroTrieSimpleAsciifrom a sorted slice of keys and values.This function needs to know the exact length of the resulting trie at compile time. To figure out
N, first setNto be too large (say 0xFFFF), then look at the resulting compile error which will tell you how to setN, like this:the evaluated program panicked at 'Buffer too large. Size needed: 17'
That error message says you need to set
Nto 17.Also see
Self::from_sorted_u8_tuples.Panics
Panics if
itemsis not sorted, ifNis not correct, or if any of the strings contain non-ASCII characters.Examples
Create a
constZeroTrieSimpleAscii at compile time:use ZeroTrieSimpleAscii; // The required capacity for this trie happens to be 17 bytes const TRIE: = from_sorted_str_tuples; assert_eq!; assert_eq!; assert_eq!; assert_eq!;Panics if the strings are not ASCII:
# use zerotrie::ZeroTrieSimpleAscii; const TRIE: ZeroTrieSimpleAscii<[u8; 100]> = ZeroTrieSimpleAscii::from_sorted_str_tuples(&[ ("bár", 2), ("båzzöo", 3), ("foo", 1), ]);
impl<Store> ZeroTrieSimpleAscii<Store>
fn get<K>(self: &Self, key: K) -> Option<usize> where K: AsRef<[u8]>Queries the trie for a string.
fn is_empty(self: &Self) -> boolReturns
trueif the trie is empty.fn byte_len(self: &Self) -> usizeReturns the size of the trie in number of bytes.
To get the number of keys in the trie, use
.iter().count():use ZeroTrieSimpleAscii; // A trie with two values: "abc" and "abcdef" let trie: & = from_bytes; assert_eq!; assert_eq!;fn as_bytes(self: &Self) -> &[u8]Returns the bytes contained in the underlying store.
fn as_borrowed(self: &Self) -> &ZeroTrieSimpleAscii<[u8]>Returns this trie as a reference transparent over a byte slice.
fn as_borrowed_slice(self: &Self) -> ZeroTrieSimpleAscii<&[u8]>Returns a trie with a store borrowing from this trie.
impl<Store> ZeroTrieSimpleAscii<Store>
const fn from_store(store: Store) -> SelfCreate a trie directly from a store.
If the store does not contain valid bytes, unexpected behavior may occur.
fn into_store(self: Self) -> StoreTakes the byte store from this trie.
fn convert_store<X: From<Store>>(self: Self) -> ZeroTrieSimpleAscii<X>Converts this trie's store to a different store implementing the
Fromtrait.For example, use this to change
ZeroTrieSimpleAscii<Vec<u8>>toZeroTrieSimpleAscii<Cow<[u8]>>.Examples
use Cow; use ZeroTrieSimpleAscii; let trie: = from_bytes.to_owned; let cow: = trie.convert_store; assert_eq!;
impl<Store> ZeroTrieSimpleAscii<Store>
const fn into_zerotrie(self: Self) -> ZeroTrie<Store>Wrap this specific ZeroTrie variant into a ZeroTrie.
impl<Store> ZeroTrieSimpleAscii<Store>
fn cursor(self: &Self) -> ZeroTrieSimpleAsciiCursor<'_>Gets a cursor into the current trie.
Useful to query a trie with data that is not a slice.
This is currently supported only on
ZeroTrieSimpleAsciiandZeroAsciiIgnoreCaseTrie.Examples
Get a value out of a trie by writing it to the cursor:
use Write; use ZeroTrieSimpleAscii; // A trie with two values: "abc" and "abcdef" let trie = from_bytes; // Get out the value for "abc" let mut cursor = trie.cursor; write!; assert_eq!;Find the longest prefix match:
use ZeroTrieSimpleAscii; // A trie with two values: "abc" and "abcdef" let trie = from_bytes; // Find the longest prefix of the string "abcdxy": let query = b"abcdxy"; let mut longest_prefix = 0; let mut cursor = trie.cursor; for in query.iter.enumerate // The longest prefix is "abc" which is length 3: assert_eq!;
impl Borrow for ZeroTrieSimpleAscii<&[u8]>
fn borrow(self: &Self) -> &ZeroTrieSimpleAscii<[u8]>
impl<'zf, Store1, Store2> ZeroFrom for ZeroTrieSimpleAscii<Store2>
fn zero_from(other: &'zf ZeroTrieSimpleAscii<Store1>) -> Self
impl<Store> AsRef for ZeroTrieSimpleAscii<Store>
fn as_ref(self: &Self) -> &ZeroTrieSimpleAscii<[u8]>
impl<Store> Freeze for ZeroTrieSimpleAscii<Store>
impl<Store> RefUnwindSafe for ZeroTrieSimpleAscii<Store>
impl<Store> Send for ZeroTrieSimpleAscii<Store>
impl<Store> Sync for ZeroTrieSimpleAscii<Store>
impl<Store> Unpin for ZeroTrieSimpleAscii<Store>
impl<Store> UnsafeUnpin for ZeroTrieSimpleAscii<Store>
impl<Store> UnwindSafe for ZeroTrieSimpleAscii<Store>
impl<Store: $crate::clone::Clone + ?Sized> Clone for ZeroTrieSimpleAscii<Store>
fn clone(self: &Self) -> ZeroTrieSimpleAscii<Store>
impl<Store: $crate::cmp::Eq + ?Sized> Eq for ZeroTrieSimpleAscii<Store>
impl<Store: $crate::cmp::PartialEq + ?Sized> PartialEq for ZeroTrieSimpleAscii<Store>
fn eq(self: &Self, other: &ZeroTrieSimpleAscii<Store>) -> bool
impl<Store: $crate::default::Default + ?Sized> Default for ZeroTrieSimpleAscii<Store>
fn default() -> ZeroTrieSimpleAscii<Store>
impl<Store: $crate::fmt::Debug + ?Sized> Debug for ZeroTrieSimpleAscii<Store>
fn fmt(self: &Self, f: &mut Formatter<'_>) -> Result
impl<Store: $crate::marker::Copy + ?Sized> Copy for ZeroTrieSimpleAscii<Store>
impl<Store: ?Sized> StructuralPartialEq for ZeroTrieSimpleAscii<Store>
impl<T> Any for ZeroTrieSimpleAscii<Store>
fn type_id(self: &Self) -> TypeId
impl<T> Borrow for ZeroTrieSimpleAscii<Store>
fn borrow(self: &Self) -> &T
impl<T> BorrowMut for ZeroTrieSimpleAscii<Store>
fn borrow_mut(self: &mut Self) -> &mut T
impl<T> CloneToUninit for ZeroTrieSimpleAscii<Store>
unsafe fn clone_to_uninit(self: &Self, dest: *mut u8)
impl<T> ErasedDestructor for ZeroTrieSimpleAscii<Store>
impl<T> From for ZeroTrieSimpleAscii<Store>
fn from(t: T) -> TReturns the argument unchanged.
impl<T> ToOwned for ZeroTrieSimpleAscii<Store>
fn to_owned(self: &Self) -> Tfn clone_into(self: &Self, target: &mut T)
impl<T, U> Into for ZeroTrieSimpleAscii<Store>
fn into(self: Self) -> UCalls
U::from(self).That is, this conversion is whatever the implementation of
[From]<T> for Uchooses to do.
impl<T, U> TryFrom for ZeroTrieSimpleAscii<Store>
fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>
impl<T, U> TryInto for ZeroTrieSimpleAscii<Store>
fn try_into(self: Self) -> Result<U, <U as TryFrom<T>>::Error>