[][src]Struct rs_graph::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<G: Clone> Clone for ReverseDigraph<G>[src]

impl<G: Copy> Copy for ReverseDigraph<G>[src]

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

type OutEdge = G::InEdge

Type of a graph iterator over edges leaving a node.

type InEdge = G::OutEdge

Type of a graph iterator over edges entering a node.

type IncidentEdge = G::IncidentEdge

Type of an iterator over all incident edges.

type DirectedEdge = ReverseDirectedEdge<G::DirectedEdge>

Type of a directed edge.

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

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

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

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

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

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

type Neigh = G::Neigh

Type of a graph iterator over all incident edges.

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

Auto Trait Implementations

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

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

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

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

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

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

impl<T> From<T> for T[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]

impl<T, U> Into<U> for T where
    U: From<T>, 
[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> NumberedGraph<'a> for G where
    G: Graph<'a>,
    <G as GraphType<'a>>::Node: Indexable,
    <G as GraphType<'a>>::Edge: Indexable
[src]

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.