Struct libp2p::kad::kbucket::KBucketsTable[][src]

pub struct KBucketsTable<TKey, TVal> { /* fields omitted */ }

A KBucketsTable represents a Kademlia routing table.

Implementations

impl<TKey, TVal> KBucketsTable<TKey, TVal> where
    TKey: Clone + AsRef<KeyBytes>,
    TVal: Clone
[src]

pub fn new(
    local_key: TKey,
    pending_timeout: Duration
) -> KBucketsTable<TKey, TVal>
[src]

Creates a new, empty Kademlia routing table with entries partitioned into buckets as per the Kademlia protocol.

The given pending_timeout specifies the duration after creation of a PendingEntry after which it becomes eligible for insertion into a full bucket, replacing the least-recently (dis)connected node.

pub fn local_key(&self) -> &TKey[src]

Returns the local key.

pub fn entry(&'a mut self, key: &'a TKey) -> Entry<'a, TKey, TVal>[src]

Returns an Entry for the given key, representing the state of the entry in the routing table.

pub fn iter(
    &'a mut self
) -> impl Iterator<Item = KBucketRef<'a, TKey, TVal>> + 'a
[src]

Returns an iterator over all buckets.

The buckets are ordered by proximity to the local_key, i.e. the first bucket is the closest bucket (containing at most one key).

pub fn bucket<K>(&mut self, key: &K) -> Option<KBucketRef<'_, TKey, TVal>> where
    K: AsRef<KeyBytes>, 
[src]

Returns the bucket for the distance to the given key.

Returns None if the given key refers to the local key.

pub fn take_applied_pending(&mut self) -> Option<AppliedPending<TKey, TVal>>[src]

Consumes the next applied pending entry, if any.

When an entry is attempted to be inserted and the respective bucket is full, it may be recorded as pending insertion after a timeout, see InsertResult::Pending.

If the oldest currently disconnected entry in the respective bucket does not change its status until the timeout of pending entry expires, it is evicted and the pending entry inserted instead. These insertions of pending entries happens lazily, whenever the KBucketsTable is accessed, and the corresponding buckets are updated accordingly. The fact that a pending entry was applied is recorded in the KBucketsTable in the form of AppliedPending results, which must be consumed by calling this function.

pub fn closest_keys<T>(
    &'a mut self,
    target: &'a T
) -> impl Iterator<Item = TKey> + 'a where
    T: Clone + AsRef<KeyBytes>, 
[src]

Returns an iterator over the keys closest to target, ordered by increasing distance.

pub fn closest<T>(
    &'a mut self,
    target: &'a T
) -> impl Iterator<Item = EntryView<TKey, TVal>> + 'a where
    T: Clone + AsRef<KeyBytes>,
    TVal: Clone
[src]

Returns an iterator over the nodes closest to the target key, ordered by increasing distance.

pub fn count_nodes_between<T>(&mut self, target: &T) -> usize where
    T: AsRef<KeyBytes>, 
[src]

Counts the number of nodes between the local node and the node closest to target.

The number of nodes between the local node and the target are calculated by backtracking from the target towards the local key.

Trait Implementations

impl<TKey, TVal> Clone for KBucketsTable<TKey, TVal> where
    TKey: Clone,
    TVal: Clone
[src]

impl<TKey, TVal> Debug for KBucketsTable<TKey, TVal> where
    TKey: Debug,
    TVal: Debug
[src]

Auto Trait Implementations

impl<TKey, TVal> RefUnwindSafe for KBucketsTable<TKey, TVal> where
    TKey: RefUnwindSafe,
    TVal: RefUnwindSafe

impl<TKey, TVal> Send for KBucketsTable<TKey, TVal> where
    TKey: Send,
    TVal: Send

impl<TKey, TVal> Sync for KBucketsTable<TKey, TVal> where
    TKey: Sync,
    TVal: Sync

impl<TKey, TVal> Unpin for KBucketsTable<TKey, TVal> where
    TKey: Unpin,
    TVal: Unpin

impl<TKey, TVal> UnwindSafe for KBucketsTable<TKey, TVal> where
    TKey: UnwindSafe,
    TVal: UnwindSafe

Blanket Implementations

impl<T> Any for T where
    T: 'static + ?Sized
[src]

impl<T> Borrow<T> for T where
    T: ?Sized
[src]

impl<T> BorrowMut<T> for T where
    T: ?Sized
[src]

impl<T> From<T> for T[src]

impl<T, U> Into<U> for T where
    U: From<T>, 
[src]

impl<T> Same<T> for T[src]

type Output = T

Should always be Self

impl<T> ToOwned for T where
    T: Clone
[src]

type Owned = T

The resulting type after obtaining ownership.

impl<T, U> TryFrom<U> for T where
    U: Into<T>, 
[src]

type Error = Infallible

The type returned in the event of a conversion error.

impl<T, U> TryInto<U> for T where
    U: TryFrom<T>, 
[src]

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

The type returned in the event of a conversion error.

impl<V, T> VZip<V> for T where
    V: MultiLane<T>, 
[src]