Topology

Struct Topology 

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

Topology.

This data type represents the topology of a graph, which allows to find the outgoing and incoming edges for each node in linear time. The topology does not retain edge weights, since we only need them during graph construction, as in our case, they’re not relevant for traversal. Moreover, it contains the Distance matrix that allows to find the shortest path between two nodes in the graph, or determine whether they’re reachable at all.

The graph topology must be considered immutable, as Adjacency lists can’t be mutated anyway, and represents the conversion of a graph into an executable form. It’s used during Traversal, so all nodes are visited in topological order.

Cloning is very cheap, since both incoming and outgoing edges are stored in Rc smart pointers, so they can be shared among multiple traversals.

Implementations§

Source§

impl Topology

Source

pub fn new<T, W>(builder: &Builder<T, W>) -> Self
where W: Clone,

Creates a topology of the given graph.

This method constructs a topology from a graph builder, one of the key components of an executable Graph. Thus, it’s usually not needed to create a topology manually, as it’s automatically created when the graph is built using the Builder::build method.

§Examples
use zrx_graph::{Graph, Topology};

// Create graph builder and add nodes
let mut builder = Graph::builder();
let a = builder.add_node("a");
let b = builder.add_node("b");
let c = builder.add_node("c");

// Create edges between nodes
builder.add_edge(a, b, 0)?;
builder.add_edge(b, c, 0)?;

// Create topology
let topology = Topology::new(&builder);
Source§

impl Topology

Source

pub fn outgoing(&self) -> &Adjacency

Returns a reference to the outgoing edges.

Source

pub fn incoming(&self) -> &Adjacency

Returns a reference to the incoming edges.

Source

pub fn distance(&self) -> &Distance

Returns a reference to the distance matrix.

Trait Implementations§

Source§

impl Clone for Topology

Source§

fn clone(&self) -> Topology

Returns a duplicate of the value. Read more
1.0.0§

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

Performs copy-assignment from source. Read more
Source§

impl Debug for Topology

Source§

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

Formats the value using the given formatter. Read more

Auto Trait Implementations§

Blanket Implementations§

§

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

§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
§

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

§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
§

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

§

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

Mutably borrows from an owned value. Read more
§

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

§

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
§

impl<T> From<T> for T

§

fn from(t: T) -> T

Returns the argument unchanged.

§

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

§

fn into(self) -> U

Calls U::from(self).

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

§

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

§

type Owned = T

The resulting type after obtaining ownership.
§

fn to_owned(&self) -> T

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

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

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

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

§

type Error = Infallible

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

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

Performs the conversion.
§

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

§

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

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

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

Performs the conversion.