Skip to main content

DynamicSeenCache

Struct DynamicSeenCache 

Source
pub struct DynamicSeenCache { /* private fields */ }
Expand description

A duplicate cache whose size is chosen when it is built, rather than at compile time.

SeenCache fixes its capacity in the type, which suits a microcontroller that knows its own limits. A gateway, or any caller reaching this through a language binding, does not know the size until it runs, and a const generic cannot cross a foreign function boundary at all. This is the same cache with its slots on the heap, so both share one implementation and answer identically.

Requires the alloc feature.

§Examples

use pamoja_mesh::DynamicSeenCache;

// A busy relay remembers more packets than a leaf node needs to.
let mut seen = DynamicSeenCache::new(1024);
assert!(seen.record((0x42, 1)));
assert!(!seen.record((0x42, 1)));
assert_eq!(seen.capacity(), 1024);

Implementations§

Source§

impl DynamicSeenCache

Source

pub fn new(capacity: usize) -> Self

Creates an empty cache remembering up to capacity packets.

§Arguments
  • capacity - how many recently seen packets to remember. A capacity of zero is allowed and makes every packet read as new, which relays every copy.
§Returns

A cache holding no keys.

Source

pub fn capacity(&self) -> usize

Returns how many packets this cache remembers.

§Returns

The capacity it was created with.

Source

pub fn contains(&self, key: (u32, u16)) -> bool

Reports whether a key is currently remembered.

§Arguments
  • key - the packet key to look for, from dedup_key.
§Returns

true if the key is in the cache.

Source

pub fn record(&mut self, key: (u32, u16)) -> bool

Records a key, reporting whether it was new.

§Arguments
  • key - the packet key to record, from dedup_key.
§Returns

true if the packet is new, false if it is a duplicate.

Trait Implementations§

Source§

impl Clone for DynamicSeenCache

Source§

fn clone(&self) -> DynamicSeenCache

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for DynamicSeenCache

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.