pub struct LCTrieSet<P: IpPrefix>(/* private fields */);Expand description
A set of Ip prefixes based on a level-compressed trie
Implementations§
source§impl<P: IpPrefix> LCTrieSet<P>
impl<P: IpPrefix> LCTrieSet<P>
sourcepub fn len(&self) -> NonZeroUsize
pub fn len(&self) -> NonZeroUsize
Returns the size of the set.
Notice that it never equals zero since the top prefix is always present in the set.
pub fn info(&self)
sourcepub fn contains<Q>(&self, k: &Q) -> bool
pub fn contains<Q>(&self, k: &Q) -> bool
Checks if an element is present (exact match).
§Example
use std::net::Ipv4Addr;
let addr = Ipv4Addr::new(1,1,1,1);
let ip20 = Ipv4Prefix::new(addr, 20).unwrap();
let ip22 = Ipv4Prefix::new(addr, 22).unwrap();
let ip24 = Ipv4Prefix::new(addr, 24).unwrap();
let trie = Ipv4RTrieSet::from_iter([ip20,ip24]);
let lctrie = trie.compress();
assert_eq!( lctrie.contains(&ip20), true);
assert_eq!( lctrie.contains(&ip22), false);
assert_eq!( lctrie.contains(&ip24), true);sourcepub fn get<Q>(&self, k: &Q) -> Option<&P>
pub fn get<Q>(&self, k: &Q) -> Option<&P>
Gets the value associated with an exact match of the key.
To access to the longest prefix match, use Self::lookup.
To get a mutable access to a value, use [Self::get_mut].
§Example
use std::net::Ipv4Addr;
let mut trie = RTrieMap::with_root(42);
let addr = Ipv4Addr::new(1,1,1,1);
let ip20 = Ipv4Prefix::new(addr, 20).unwrap();
let ip22 = Ipv4Prefix::new(addr, 22).unwrap();
let ip24 = Ipv4Prefix::new(addr, 24).unwrap();
trie.insert(ip24, 24);
trie.insert(ip20, 20);
let lctrie = trie.compress();
assert_eq!( lctrie.get(&ip24), Some(&24));
assert_eq!( lctrie.get(&ip22), None);
assert_eq!( lctrie.get(&ip20), Some(&20));sourcepub fn lookup<Q>(&self, k: &Q) -> &P
pub fn lookup<Q>(&self, k: &Q) -> &P
Gets the longest prefix which matches the given key.
As the top prefix always matches, it never fails.
To access to the exact prefix match, use Self::get.
§Example
use std::net::Ipv4Addr;
let mut trie = Ipv4RTrieSet::new();
let addr = Ipv4Addr::new(1,1,1,1);
let ip20 = Ipv4Prefix::new(addr, 20).unwrap();
let ip22 = Ipv4Prefix::new(addr, 22).unwrap();
let ip24 = Ipv4Prefix::new(addr, 24).unwrap();
trie.insert(ip20);
trie.insert(ip24);
let lctrie = trie.compress();
assert_eq!( lctrie.lookup(&ip20), &ip20);
assert_eq!( lctrie.lookup(&ip22), &ip20);
assert_eq!( lctrie.lookup(&ip24), &ip24);
assert_eq!( lctrie.lookup(&addr), &ip24);Trait Implementations§
source§impl<P: IpRootPrefix> FromIterator<P> for LCTrieSet<P>
impl<P: IpRootPrefix> FromIterator<P> for LCTrieSet<P>
source§fn from_iter<I: IntoIterator<Item = P>>(iter: I) -> Self
fn from_iter<I: IntoIterator<Item = P>>(iter: I) -> Self
Creates a value from an iterator. Read more
Auto Trait Implementations§
impl<P> RefUnwindSafe for LCTrieSet<P>where
P: RefUnwindSafe,
impl<P> Send for LCTrieSet<P>where
P: Send,
impl<P> Sync for LCTrieSet<P>where
P: Sync,
impl<P> Unpin for LCTrieSet<P>where
P: Unpin,
impl<P> UnwindSafe for LCTrieSet<P>where
P: UnwindSafe,
Blanket Implementations§
source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more