Skip to main content

TreeCoordinate

Struct TreeCoordinate 

Source
pub struct TreeCoordinate(/* private fields */);
Expand description

A node’s coordinates in the spanning tree.

Coordinates are the path from the node to the root: [self, parent, grandparent, ..., root]

Each entry carries the node address plus declaration metadata (sequence and timestamp) for the wire protocol. Routing operations (distance, LCA) use only the node addresses.

The coordinate enables greedy routing via tree distance calculation. Two nodes can compute the hops between them by finding their lowest common ancestor (LCA) in the tree.

Implementations§

Source§

impl TreeCoordinate

Source

pub fn new(path: Vec<CoordEntry>) -> Result<Self, TreeError>

Create a coordinate from a path of entries (self to root).

The path must be non-empty and ordered from the node to the root.

Source

pub fn from_addrs(addrs: Vec<NodeAddr>) -> Result<Self, TreeError>

Create a coordinate from node addresses only (no metadata).

Convenience constructor for cases where only routing is needed. Each entry gets sequence=0, timestamp=0.

Source

pub fn root(node_addr: NodeAddr) -> Self

Create a coordinate for a root node.

Source

pub fn root_with_meta( node_addr: NodeAddr, sequence: u64, timestamp: u64, ) -> Self

Create a root coordinate with metadata.

Source

pub fn node_addr(&self) -> &NodeAddr

The node this coordinate belongs to (first element).

Source

pub fn root_id(&self) -> &NodeAddr

The root of the tree (last element).

Source

pub fn parent_id(&self) -> &NodeAddr

The immediate parent (second element, or self if root).

Source

pub fn depth(&self) -> usize

Depth in the tree (0 = root).

Source

pub fn entries(&self) -> &[CoordEntry]

The full path of entries with metadata.

Source

pub fn node_addrs(&self) -> impl DoubleEndedIterator<Item = &NodeAddr>

Iterator over node addresses in the path (self to root).

Use this for routing operations (distance, LCA, ancestor checks) that only need the address path.

Source

pub fn is_root(&self) -> bool

Check if this coordinate is a root (length 1).

Source

pub fn distance_to(&self, other: &TreeCoordinate) -> usize

Calculate tree distance to another coordinate.

Distance is hops through the lowest common ancestor (LCA). If the coordinates have different roots, returns usize::MAX.

Source

pub fn lca_depth(&self, other: &TreeCoordinate) -> usize

Find the depth of the lowest common ancestor.

Since coordinates are self-to-root, common ancestry is a suffix match. Returns the depth (from root) of the LCA.

Source

pub fn lca(&self, other: &TreeCoordinate) -> Option<&NodeAddr>

Get the lowest common ancestor node ID.

Source

pub fn has_ancestor(&self, other: &NodeAddr) -> bool

Check if other is an ancestor (appears in our path after self).

Source

pub fn contains(&self, other: &NodeAddr) -> bool

Check if other is in our ancestry (including self).

Source

pub fn ancestor_at(&self, depth: usize) -> Option<&NodeAddr>

Get the ancestor at a specific depth from self.

ancestor_at(0) returns self, ancestor_at(1) returns parent, etc.

Trait Implementations§

Source§

impl Clone for TreeCoordinate

Source§

fn clone(&self) -> TreeCoordinate

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 TreeCoordinate

Source§

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

Formats the value using the given formatter. Read more
Source§

impl PartialEq for TreeCoordinate

Source§

fn eq(&self, other: &TreeCoordinate) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 (const: unstable) · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
Source§

impl Eq for TreeCoordinate

Source§

impl StructuralPartialEq for TreeCoordinate

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<Q, K> Equivalent<K> for Q
where Q: Eq + ?Sized, K: Borrow<Q> + ?Sized,

Source§

fn equivalent(&self, key: &K) -> bool

Checks if this value is equivalent to the given key. Read more
Source§

impl<Q, K> Equivalent<K> for Q
where Q: Eq + ?Sized, K: Borrow<Q> + ?Sized,

Source§

fn equivalent(&self, key: &K) -> bool

Compare self to key and return true if they are equal.
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
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> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> if into_left is true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
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.
Source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V

Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more