[][src]Struct rs_graph::reversedigraph::ReverseDigraph

pub struct ReverseDigraph<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> GraphType<'a> for ReverseDigraph<G> where
    G: GraphType<'a>, 
[src]

type Node = G::Node

Type of a node.

type Edge = G::Edge

Type of an edge.

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

type NodeIter = G::NodeIter

Type of an iterator over all nodes.

type EdgeIter = G::EdgeIter

Type of an iterator over all edges.

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

type NeighIter = G::NeighIter

Type of an iterator over all incident edges.

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> Directed<'a> for ReverseDigraph<G> where
    G: Directed<'a>, 
[src]

type OutEdgeIter = G::InEdgeIter

Type of an iterator over the forward edges leaving a node.

type InEdgeIter = G::OutEdgeIter

Type of an iterator over the backward edges entering 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 incoming(&'a self) -> InEdges<'a, Self> where
    Self: Sized
[src]

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

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

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

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

impl<G> From<G> for ReverseDigraph<G>[src]

Auto Trait Implementations

impl<G> Send for ReverseDigraph<G> where
    G: Send

impl<G> Unpin for ReverseDigraph<G> where
    G: Unpin

impl<G> Sync for ReverseDigraph<G> where
    G: Sync

impl<G> UnwindSafe for ReverseDigraph<G> where
    G: UnwindSafe

impl<G> RefUnwindSafe for ReverseDigraph<G> where
    G: RefUnwindSafe

Blanket Implementations

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

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

impl<'a, G> Network<'a> for G where
    G: GraphSize<'a> + BiDirected<'a>, 
[src]

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

impl<'a, G> NumberedGraph<'a> for G where
    G: Graph<'a>,
    <G as GraphType<'a>>::Node: Indexable,
    <G as GraphType<'a>>::Edge: Indexable
[src]

impl<'a, G> NumberedDigraph<'a> for G where
    G: Digraph<'a> + NumberedGraph<'a>,
    <G as GraphType<'a>>::Node: Indexable,
    <G as GraphType<'a>>::Edge: Indexable
[src]

impl<'a, G> NumberedNetwork<'a> for G where
    G: Network<'a> + NumberedDigraph<'a>,
    <G as GraphType<'a>>::Node: Indexable,
    <G as GraphType<'a>>::Edge: Indexable,
    <G as GraphType<'a>>::Edge: BiIndexable
[src]

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

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

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<T> BorrowMut<T> for T where
    T: ?Sized
[src]

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

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