pub struct TrieHardSized<'a, T, I> { /* private fields */ }Expand description
Inner representation of a trie-hard trie that is generic to a specific size of integer.
Implementations§
Source§impl<'a, T> TrieHardSized<'a, T, u8>where
T: Copy,
impl<'a, T> TrieHardSized<'a, T, u8>where
T: Copy,
Sourcepub fn get<K: AsRef<[u8]>>(&self, key: K) -> Option<T>
pub fn get<K: AsRef<[u8]>>(&self, key: K) -> Option<T>
Get the value stored for the given key. Any key type can be used
here as long as the type implements AsRef<[u8]>. The byte slice
referenced will serve as the actual key.
let trie = ["and", "ant", "dad", "do", "dot"]
.into_iter()
.collect::<TrieHard<'_, _>>();
let TrieHard::U8(sized_trie) = trie else {
unreachable!()
};
assert!(sized_trie.get("dad".to_owned()).is_some());
assert!(sized_trie.get(b"do").is_some());
assert!(sized_trie.get(b"don't".to_vec()).is_none());Sourcepub fn get_from_bytes(&self, key: &[u8]) -> Option<T>
pub fn get_from_bytes(&self, key: &[u8]) -> Option<T>
Get the value stored for the given byte-slice key.
let trie = ["and", "ant", "dad", "do", "dot"]
.into_iter()
.collect::<TrieHard<'_, _>>();
let TrieHard::U8(sized_trie) = trie else {
unreachable!()
};
assert!(sized_trie.get_from_bytes(b"dad").is_some());
assert!(sized_trie.get_from_bytes(b"do").is_some());
assert!(sized_trie.get_from_bytes(b"don't").is_none());Sourcepub fn iter(&self) -> TrieIterSized<'_, 'a, T, u8> ⓘ
pub fn iter(&self) -> TrieIterSized<'_, 'a, T, u8> ⓘ
Create an iterator over the entire trie. Emitted items will be ordered by their keys
let trie = ["dad", "ant", "and", "dot", "do"]
.into_iter()
.collect::<TrieHard<'_, _>>();
let TrieHard::U8(sized_trie) = trie else {
unreachable!()
};
assert_eq!(
sized_trie.iter().map(|(_, v)| v).collect::<Vec<_>>(),
["and", "ant", "dad", "do", "dot"]
);Sourcepub fn prefix_search<K: AsRef<[u8]>>(
&self,
prefix: K,
) -> TrieIterSized<'_, 'a, T, u8> ⓘ
pub fn prefix_search<K: AsRef<[u8]>>( &self, prefix: K, ) -> TrieIterSized<'_, 'a, T, u8> ⓘ
Create an iterator over the portion of the trie starting with the given prefix
let trie = ["dad", "ant", "and", "dot", "do"]
.into_iter()
.collect::<TrieHard<'_, _>>();
let TrieHard::U8(sized_trie) = trie else {
unreachable!()
};
assert_eq!(
sized_trie.prefix_search("d").map(|(_, v)| v).collect::<Vec<_>>(),
["dad", "do", "dot"]
);Source§impl<'a, T> TrieHardSized<'a, T, u16>where
T: Copy,
impl<'a, T> TrieHardSized<'a, T, u16>where
T: Copy,
Sourcepub fn get<K: AsRef<[u8]>>(&self, key: K) -> Option<T>
pub fn get<K: AsRef<[u8]>>(&self, key: K) -> Option<T>
Get the value stored for the given key. Any key type can be used
here as long as the type implements AsRef<[u8]>. The byte slice
referenced will serve as the actual key.
let trie = ["and", "ant", "dad", "do", "dot"]
.into_iter()
.collect::<TrieHard<'_, _>>();
let TrieHard::U8(sized_trie) = trie else {
unreachable!()
};
assert!(sized_trie.get("dad".to_owned()).is_some());
assert!(sized_trie.get(b"do").is_some());
assert!(sized_trie.get(b"don't".to_vec()).is_none());Sourcepub fn get_from_bytes(&self, key: &[u8]) -> Option<T>
pub fn get_from_bytes(&self, key: &[u8]) -> Option<T>
Get the value stored for the given byte-slice key.
let trie = ["and", "ant", "dad", "do", "dot"]
.into_iter()
.collect::<TrieHard<'_, _>>();
let TrieHard::U8(sized_trie) = trie else {
unreachable!()
};
assert!(sized_trie.get_from_bytes(b"dad").is_some());
assert!(sized_trie.get_from_bytes(b"do").is_some());
assert!(sized_trie.get_from_bytes(b"don't").is_none());Sourcepub fn iter(&self) -> TrieIterSized<'_, 'a, T, u16> ⓘ
pub fn iter(&self) -> TrieIterSized<'_, 'a, T, u16> ⓘ
Create an iterator over the entire trie. Emitted items will be ordered by their keys
let trie = ["dad", "ant", "and", "dot", "do"]
.into_iter()
.collect::<TrieHard<'_, _>>();
let TrieHard::U8(sized_trie) = trie else {
unreachable!()
};
assert_eq!(
sized_trie.iter().map(|(_, v)| v).collect::<Vec<_>>(),
["and", "ant", "dad", "do", "dot"]
);Sourcepub fn prefix_search<K: AsRef<[u8]>>(
&self,
prefix: K,
) -> TrieIterSized<'_, 'a, T, u16> ⓘ
pub fn prefix_search<K: AsRef<[u8]>>( &self, prefix: K, ) -> TrieIterSized<'_, 'a, T, u16> ⓘ
Create an iterator over the portion of the trie starting with the given prefix
let trie = ["dad", "ant", "and", "dot", "do"]
.into_iter()
.collect::<TrieHard<'_, _>>();
let TrieHard::U8(sized_trie) = trie else {
unreachable!()
};
assert_eq!(
sized_trie.prefix_search("d").map(|(_, v)| v).collect::<Vec<_>>(),
["dad", "do", "dot"]
);Source§impl<'a, T> TrieHardSized<'a, T, u32>where
T: Copy,
impl<'a, T> TrieHardSized<'a, T, u32>where
T: Copy,
Sourcepub fn get<K: AsRef<[u8]>>(&self, key: K) -> Option<T>
pub fn get<K: AsRef<[u8]>>(&self, key: K) -> Option<T>
Get the value stored for the given key. Any key type can be used
here as long as the type implements AsRef<[u8]>. The byte slice
referenced will serve as the actual key.
let trie = ["and", "ant", "dad", "do", "dot"]
.into_iter()
.collect::<TrieHard<'_, _>>();
let TrieHard::U8(sized_trie) = trie else {
unreachable!()
};
assert!(sized_trie.get("dad".to_owned()).is_some());
assert!(sized_trie.get(b"do").is_some());
assert!(sized_trie.get(b"don't".to_vec()).is_none());Sourcepub fn get_from_bytes(&self, key: &[u8]) -> Option<T>
pub fn get_from_bytes(&self, key: &[u8]) -> Option<T>
Get the value stored for the given byte-slice key.
let trie = ["and", "ant", "dad", "do", "dot"]
.into_iter()
.collect::<TrieHard<'_, _>>();
let TrieHard::U8(sized_trie) = trie else {
unreachable!()
};
assert!(sized_trie.get_from_bytes(b"dad").is_some());
assert!(sized_trie.get_from_bytes(b"do").is_some());
assert!(sized_trie.get_from_bytes(b"don't").is_none());Sourcepub fn iter(&self) -> TrieIterSized<'_, 'a, T, u32> ⓘ
pub fn iter(&self) -> TrieIterSized<'_, 'a, T, u32> ⓘ
Create an iterator over the entire trie. Emitted items will be ordered by their keys
let trie = ["dad", "ant", "and", "dot", "do"]
.into_iter()
.collect::<TrieHard<'_, _>>();
let TrieHard::U8(sized_trie) = trie else {
unreachable!()
};
assert_eq!(
sized_trie.iter().map(|(_, v)| v).collect::<Vec<_>>(),
["and", "ant", "dad", "do", "dot"]
);Sourcepub fn prefix_search<K: AsRef<[u8]>>(
&self,
prefix: K,
) -> TrieIterSized<'_, 'a, T, u32> ⓘ
pub fn prefix_search<K: AsRef<[u8]>>( &self, prefix: K, ) -> TrieIterSized<'_, 'a, T, u32> ⓘ
Create an iterator over the portion of the trie starting with the given prefix
let trie = ["dad", "ant", "and", "dot", "do"]
.into_iter()
.collect::<TrieHard<'_, _>>();
let TrieHard::U8(sized_trie) = trie else {
unreachable!()
};
assert_eq!(
sized_trie.prefix_search("d").map(|(_, v)| v).collect::<Vec<_>>(),
["dad", "do", "dot"]
);Source§impl<'a, T> TrieHardSized<'a, T, u64>where
T: Copy,
impl<'a, T> TrieHardSized<'a, T, u64>where
T: Copy,
Sourcepub fn get<K: AsRef<[u8]>>(&self, key: K) -> Option<T>
pub fn get<K: AsRef<[u8]>>(&self, key: K) -> Option<T>
Get the value stored for the given key. Any key type can be used
here as long as the type implements AsRef<[u8]>. The byte slice
referenced will serve as the actual key.
let trie = ["and", "ant", "dad", "do", "dot"]
.into_iter()
.collect::<TrieHard<'_, _>>();
let TrieHard::U8(sized_trie) = trie else {
unreachable!()
};
assert!(sized_trie.get("dad".to_owned()).is_some());
assert!(sized_trie.get(b"do").is_some());
assert!(sized_trie.get(b"don't".to_vec()).is_none());Sourcepub fn get_from_bytes(&self, key: &[u8]) -> Option<T>
pub fn get_from_bytes(&self, key: &[u8]) -> Option<T>
Get the value stored for the given byte-slice key.
let trie = ["and", "ant", "dad", "do", "dot"]
.into_iter()
.collect::<TrieHard<'_, _>>();
let TrieHard::U8(sized_trie) = trie else {
unreachable!()
};
assert!(sized_trie.get_from_bytes(b"dad").is_some());
assert!(sized_trie.get_from_bytes(b"do").is_some());
assert!(sized_trie.get_from_bytes(b"don't").is_none());Sourcepub fn iter(&self) -> TrieIterSized<'_, 'a, T, u64> ⓘ
pub fn iter(&self) -> TrieIterSized<'_, 'a, T, u64> ⓘ
Create an iterator over the entire trie. Emitted items will be ordered by their keys
let trie = ["dad", "ant", "and", "dot", "do"]
.into_iter()
.collect::<TrieHard<'_, _>>();
let TrieHard::U8(sized_trie) = trie else {
unreachable!()
};
assert_eq!(
sized_trie.iter().map(|(_, v)| v).collect::<Vec<_>>(),
["and", "ant", "dad", "do", "dot"]
);Sourcepub fn prefix_search<K: AsRef<[u8]>>(
&self,
prefix: K,
) -> TrieIterSized<'_, 'a, T, u64> ⓘ
pub fn prefix_search<K: AsRef<[u8]>>( &self, prefix: K, ) -> TrieIterSized<'_, 'a, T, u64> ⓘ
Create an iterator over the portion of the trie starting with the given prefix
let trie = ["dad", "ant", "and", "dot", "do"]
.into_iter()
.collect::<TrieHard<'_, _>>();
let TrieHard::U8(sized_trie) = trie else {
unreachable!()
};
assert_eq!(
sized_trie.prefix_search("d").map(|(_, v)| v).collect::<Vec<_>>(),
["dad", "do", "dot"]
);Source§impl<'a, T> TrieHardSized<'a, T, u128>where
T: Copy,
impl<'a, T> TrieHardSized<'a, T, u128>where
T: Copy,
Sourcepub fn get<K: AsRef<[u8]>>(&self, key: K) -> Option<T>
pub fn get<K: AsRef<[u8]>>(&self, key: K) -> Option<T>
Get the value stored for the given key. Any key type can be used
here as long as the type implements AsRef<[u8]>. The byte slice
referenced will serve as the actual key.
let trie = ["and", "ant", "dad", "do", "dot"]
.into_iter()
.collect::<TrieHard<'_, _>>();
let TrieHard::U8(sized_trie) = trie else {
unreachable!()
};
assert!(sized_trie.get("dad".to_owned()).is_some());
assert!(sized_trie.get(b"do").is_some());
assert!(sized_trie.get(b"don't".to_vec()).is_none());Sourcepub fn get_from_bytes(&self, key: &[u8]) -> Option<T>
pub fn get_from_bytes(&self, key: &[u8]) -> Option<T>
Get the value stored for the given byte-slice key.
let trie = ["and", "ant", "dad", "do", "dot"]
.into_iter()
.collect::<TrieHard<'_, _>>();
let TrieHard::U8(sized_trie) = trie else {
unreachable!()
};
assert!(sized_trie.get_from_bytes(b"dad").is_some());
assert!(sized_trie.get_from_bytes(b"do").is_some());
assert!(sized_trie.get_from_bytes(b"don't").is_none());Sourcepub fn iter(&self) -> TrieIterSized<'_, 'a, T, u128> ⓘ
pub fn iter(&self) -> TrieIterSized<'_, 'a, T, u128> ⓘ
Create an iterator over the entire trie. Emitted items will be ordered by their keys
let trie = ["dad", "ant", "and", "dot", "do"]
.into_iter()
.collect::<TrieHard<'_, _>>();
let TrieHard::U8(sized_trie) = trie else {
unreachable!()
};
assert_eq!(
sized_trie.iter().map(|(_, v)| v).collect::<Vec<_>>(),
["and", "ant", "dad", "do", "dot"]
);Sourcepub fn prefix_search<K: AsRef<[u8]>>(
&self,
prefix: K,
) -> TrieIterSized<'_, 'a, T, u128> ⓘ
pub fn prefix_search<K: AsRef<[u8]>>( &self, prefix: K, ) -> TrieIterSized<'_, 'a, T, u128> ⓘ
Create an iterator over the portion of the trie starting with the given prefix
let trie = ["dad", "ant", "and", "dot", "do"]
.into_iter()
.collect::<TrieHard<'_, _>>();
let TrieHard::U8(sized_trie) = trie else {
unreachable!()
};
assert_eq!(
sized_trie.prefix_search("d").map(|(_, v)| v).collect::<Vec<_>>(),
["dad", "do", "dot"]
);Source§impl<'a, T> TrieHardSized<'a, T, U256>where
T: Copy,
impl<'a, T> TrieHardSized<'a, T, U256>where
T: Copy,
Sourcepub fn get<K: AsRef<[u8]>>(&self, key: K) -> Option<T>
pub fn get<K: AsRef<[u8]>>(&self, key: K) -> Option<T>
Get the value stored for the given key. Any key type can be used
here as long as the type implements AsRef<[u8]>. The byte slice
referenced will serve as the actual key.
let trie = ["and", "ant", "dad", "do", "dot"]
.into_iter()
.collect::<TrieHard<'_, _>>();
let TrieHard::U8(sized_trie) = trie else {
unreachable!()
};
assert!(sized_trie.get("dad".to_owned()).is_some());
assert!(sized_trie.get(b"do").is_some());
assert!(sized_trie.get(b"don't".to_vec()).is_none());Sourcepub fn get_from_bytes(&self, key: &[u8]) -> Option<T>
pub fn get_from_bytes(&self, key: &[u8]) -> Option<T>
Get the value stored for the given byte-slice key.
let trie = ["and", "ant", "dad", "do", "dot"]
.into_iter()
.collect::<TrieHard<'_, _>>();
let TrieHard::U8(sized_trie) = trie else {
unreachable!()
};
assert!(sized_trie.get_from_bytes(b"dad").is_some());
assert!(sized_trie.get_from_bytes(b"do").is_some());
assert!(sized_trie.get_from_bytes(b"don't").is_none());Sourcepub fn iter(&self) -> TrieIterSized<'_, 'a, T, U256> ⓘ
pub fn iter(&self) -> TrieIterSized<'_, 'a, T, U256> ⓘ
Create an iterator over the entire trie. Emitted items will be ordered by their keys
let trie = ["dad", "ant", "and", "dot", "do"]
.into_iter()
.collect::<TrieHard<'_, _>>();
let TrieHard::U8(sized_trie) = trie else {
unreachable!()
};
assert_eq!(
sized_trie.iter().map(|(_, v)| v).collect::<Vec<_>>(),
["and", "ant", "dad", "do", "dot"]
);Sourcepub fn prefix_search<K: AsRef<[u8]>>(
&self,
prefix: K,
) -> TrieIterSized<'_, 'a, T, U256> ⓘ
pub fn prefix_search<K: AsRef<[u8]>>( &self, prefix: K, ) -> TrieIterSized<'_, 'a, T, U256> ⓘ
Create an iterator over the portion of the trie starting with the given prefix
let trie = ["dad", "ant", "and", "dot", "do"]
.into_iter()
.collect::<TrieHard<'_, _>>();
let TrieHard::U8(sized_trie) = trie else {
unreachable!()
};
assert_eq!(
sized_trie.prefix_search("d").map(|(_, v)| v).collect::<Vec<_>>(),
["dad", "do", "dot"]
);Trait Implementations§
Source§impl<'a, T: Clone, I: Clone> Clone for TrieHardSized<'a, T, I>
impl<'a, T: Clone, I: Clone> Clone for TrieHardSized<'a, T, I>
Source§fn clone(&self) -> TrieHardSized<'a, T, I>
fn clone(&self) -> TrieHardSized<'a, T, I>
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read more