Struct rs_graph::ReverseDigraph[][src]

pub struct ReverseDigraph<'a, G>(_);

A digraph wrapping an existing graph with edges in opposite directions.

The sets of outgoing and incoming edges handled by the methods of Digraph and Network are swapped, so incoming edges becoming outgoing edges and vice versa.

Example

use rs_graph::LinkedListGraph;
use rs_graph::traits::*;
use rs_graph::reverse;
use rs_graph::classes::star;

let g = star::<LinkedListGraph>(42);
assert_eq!(g.num_nodes(), 43);
assert_eq!(g.num_edges(), 42);
assert!(g.edges().all(|e| g.node_id(g.src(e)) == 0 && g.node_id(g.snk(e)) > 0));
assert!(g.outedges(g.id2node(0)).all(|(_,v)| g.node_id(v) > 0));
assert!(g.inedges(g.id2node(0)).all(|(_,v)| g.node_id(v) == 0));
assert_eq!(g.outedges(g.id2node(0)).count(), 42);
assert_eq!(g.inedges(g.id2node(0)).count(), 0);

// Can be used by wrapping a reference.
{
    let g = reverse(&g);
    assert_eq!(g.num_nodes(), 43);
    assert_eq!(g.num_edges(), 42);
}

// Or by conversion.
let g = reverse(&g);
assert_eq!(g.num_nodes(), 43);
assert_eq!(g.num_edges(), 42);
assert!(g.edges().all(|e| g.node_id(g.snk(e)) == 0 && g.node_id(g.src(e)) > 0));
assert!(g.outedges(g.id2node(0)).all(|(_,v)| g.node_id(v) == 0));
assert!(g.inedges(g.id2node(0)).all(|(_,v)| g.node_id(v) > 0));
assert_eq!(g.outedges(g.id2node(0)).count(), 0);
assert_eq!(g.inedges(g.id2node(0)).count(), 42);

Trait Implementations

impl<'a, G: Clone> Clone for ReverseDigraph<'a, G>[src]

fn clone(&self) -> ReverseDigraph<'a, G>[src]

Returns a copy of the value. Read more

fn clone_from(&mut self, source: &Self)1.0.0[src]

Performs copy-assignment from source. Read more

impl<'a, G> Directed<'a> for ReverseDigraph<'a, G> where
    G: Directed<'a>, 
[src]

type OutIt = ReverseWrapIt<G::InIt>

Type of a graph iterator over edges leaving a node.

type InIt = ReverseWrapIt<G::OutIt>

Type of a graph iterator over edges entering a node.

type IncidentIt = ReverseIncidentIt<G::IncidentIt>

Type of an iterator over all incident edges.

type DirectedEdge = ReverseDirectedEdge<G::DirectedEdge>

Type of a directed edge.

fn src(&'a self, e: Self::Edge) -> Self::Node[src]

Return the source node of an edge.

fn snk(&'a self, e: Self::Edge) -> Self::Node[src]

Return the sink node of an edge.

fn out_iter(&'a self, u: Self::Node) -> Self::OutIt[src]

Return a graph iterator over the edges leaving a node.

fn in_iter(&'a self, u: Self::Node) -> Self::InIt[src]

Return a graph iterator over the edges leaving a node.

fn incident_iter(&'a self, u: Self::Node) -> Self::IncidentIt[src]

Return an iterator over all directed edges incident with a node.

fn outedges(&'a self, u: Self::Node) -> GraphIter<'a, Self, Self::OutIt>

Notable traits for GraphIter<'a, G, I>

impl<'a, G, I> Iterator for GraphIter<'a, G, I> where
    I: GraphIterator<G>, 
type Item = I::Item;
where
    Self: Sized
[src]

Return an iterator over the edges leaving a node.

fn outgoing(&'a self) -> OutEdges<'a, Self> where
    Self: Sized
[src]

Return access to the outgoing arcs via an Adjacencies trait. Read more

fn inedges(&'a self, u: Self::Node) -> GraphIter<'a, Self, Self::InIt>

Notable traits for GraphIter<'a, G, I>

impl<'a, G, I> Iterator for GraphIter<'a, G, I> where
    I: GraphIterator<G>, 
type Item = I::Item;
where
    Self: Sized
[src]

Return an iterator over the edges leaving a node.

fn incoming(&'a self) -> InEdges<'a, Self> where
    Self: Sized
[src]

Return access to the incoming arcs via an Adjacencies trait. Read more

fn incident_edges(
    &'a self,
    u: Self::Node
) -> GraphIter<'a, Self, Self::IncidentIt>

Notable traits for GraphIter<'a, G, I>

impl<'a, G, I> Iterator for GraphIter<'a, G, I> where
    I: GraphIterator<G>, 
type Item = I::Item;
where
    Self: Sized
[src]

Return an iterator over all directed edges incident with a node.

impl<'a, G> DirectedRef<'a> for ReverseDigraph<'a, G> where
    G: DirectedRef<'a>, 
[src]

fn src(&self, u: Self::Edge) -> Self::Node[src]

fn snk(&self, u: Self::Edge) -> Self::Node[src]

fn out_iter(&self, u: Self::Node) -> Self::OutIt[src]

fn in_iter(&self, u: Self::Node) -> Self::InIt[src]

fn incident_iter(&self, u: Self::Node) -> Self::IncidentIt[src]

impl<'a, 'g: 'a, G> GraphSize<'a> for ReverseDigraph<'g, G> where
    G: GraphSize<'g>, 
[src]

type NodeIt = ReverseWrapIt<G::NodeIt>

Type of an iterator over all nodes.

type EdgeIt = ReverseWrapIt<G::EdgeIt>

Type of an iterator over all edges.

fn num_nodes(&self) -> usize[src]

Return the number of nodes in the graph.

fn num_edges(&self) -> usize[src]

Return the number of edges in the graph.

fn nodes_iter(&self) -> Self::NodeIt[src]

Return a graph iterator over all nodes.

fn edges_iter(&self) -> Self::EdgeIt[src]

Return a graph iterator over all edges. Read more

fn nodes(&'a self) -> NodeIterator<'a, Self> where
    Self: Sized
[src]

Return an iterator over all nodes.

fn edges(&'a self) -> EdgeIterator<'a, Self> where
    Self: Sized
[src]

Return an iterator over all edges. Read more

impl<'a, G> GraphSizeRef<'a> for ReverseDigraph<'a, G> where
    G: GraphSizeRef<'a>, 
[src]

fn nodes_iter(&self) -> Self::NodeIt[src]

fn edges_iter(&self) -> Self::EdgeIt[src]

fn nodes<'b>(&'b self) -> GraphIter<'b, Self, Self::NodeIt>

Notable traits for GraphIter<'a, G, I>

impl<'a, G, I> Iterator for GraphIter<'a, G, I> where
    I: GraphIterator<G>, 
type Item = I::Item;
where
    Self: Sized,
    'a: 'b, 
[src]

fn edges<'b>(&'b self) -> GraphIter<'b, Self, Self::EdgeIt>

Notable traits for GraphIter<'a, G, I>

impl<'a, G, I> Iterator for GraphIter<'a, G, I> where
    I: GraphIterator<G>, 
type Item = I::Item;
where
    Self: Sized,
    'a: 'b, 
[src]

impl<'a, 'g: 'a, G> GraphType<'a> for ReverseDigraph<'g, G> where
    G: GraphType<'g>, 
[src]

type Node = G::Node

Type of a node.

type Edge = G::Edge

Type of an edge.

impl<'a, 'g: 'a, G> IndexGraph<'a> for ReverseDigraph<'g, G> where
    G: IndexGraph<'g>, 
[src]

fn node_id(&self, u: Self::Node) -> usize[src]

Return a unique id associated with a node.

fn id2node(&self, id: usize) -> Self::Node[src]

Return the node associated with the given id. Read more

fn edge_id(&self, e: Self::Edge) -> usize[src]

Return a unique id associated with an edge. Read more

fn id2edge(&self, id: usize) -> Self::Edge[src]

Return the edge associated with the given id. Read more

impl<'a, G> IndexGraphRef<'a> for ReverseDigraph<'a, G> where
    G: IndexGraphRef<'a>, 
[src]

fn id2node(&self, id: usize) -> Self::Node[src]

fn id2edge(&self, id: usize) -> Self::Edge[src]

impl<'a, 'g: 'a, G> Undirected<'a> for ReverseDigraph<'g, G> where
    G: Undirected<'g>, 
[src]

type NeighIt = ReverseWrapIt<G::NeighIt>

Type of a graph iterator over all incident edges.

fn enodes(&self, e: Self::Edge) -> (Self::Node, Self::Node)[src]

Return the nodes connected by an edge. Read more

fn neigh_iter(&self, u: Self::Node) -> Self::NeighIt[src]

Return a graph iterator over the edges adjacent to some node.

fn neighs(&'a self, u: Self::Node) -> GraphIter<'a, Self, Self::NeighIt>

Notable traits for GraphIter<'a, G, I>

impl<'a, G, I> Iterator for GraphIter<'a, G, I> where
    I: GraphIterator<G>, 
type Item = I::Item;
where
    Self: Sized
[src]

Return an iterator over the edges adjacent to some node.

fn neighbors(&'a self) -> Neighbors<'a, Self> where
    Self: Sized
[src]

Return access to the neighbors via an Adjacencies trait. Read more

impl<'a, G> UndirectedRef<'a> for ReverseDigraph<'a, G> where
    G: UndirectedRef<'a>, 
[src]

fn enodes(&self, e: Self::Edge) -> (Self::Node, Self::Node)[src]

fn neigh_iter(&self, u: Self::Node) -> Self::NeighIt[src]

impl<'a, G: Copy> Copy for ReverseDigraph<'a, G>[src]

Auto Trait Implementations

impl<'a, G> RefUnwindSafe for ReverseDigraph<'a, G> where
    G: RefUnwindSafe

impl<'a, G> Send for ReverseDigraph<'a, G> where
    G: Sync

impl<'a, G> Sync for ReverseDigraph<'a, G> where
    G: Sync

impl<'a, G> Unpin for ReverseDigraph<'a, G>

impl<'a, G> UnwindSafe for ReverseDigraph<'a, G> where
    G: RefUnwindSafe

Blanket Implementations

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

pub fn type_id(&self) -> TypeId[src]

Gets the TypeId of self. Read more

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

pub fn borrow(&self) -> &T[src]

Immutably borrows from an owned value. Read more

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

pub fn borrow_mut(&mut self) -> &mut T[src]

Mutably borrows from an owned value. Read more

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

pub fn from(t: T) -> T[src]

Performs the conversion.

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

pub fn into(self) -> U[src]

Performs the conversion.

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

type Owned = T

The resulting type after obtaining ownership.

pub fn to_owned(&self) -> T[src]

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

pub fn clone_into(&self, target: &mut T)[src]

🔬 This is a nightly-only experimental API. (toowned_clone_into)

recently added

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

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.

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

Performs the conversion.

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.

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

Performs the conversion.

impl<'a, G> Digraph<'a> for G where
    G: GraphSize<'a> + Directed<'a>, 
[src]

impl<'a, G> Graph<'a> for G where
    G: GraphSize<'a> + Undirected<'a>, 
[src]

impl<'a, T> IndexDigraph<'a> for T where
    T: IndexGraph<'a> + Digraph<'a>, 
[src]