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]

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

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.

impl<'a, G> DirectedRef<'a> for ReverseDigraph<'a, G> where
    G: DirectedRef<'a>, 
[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.

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

impl<'a, G> IndexGraphRef<'a> for ReverseDigraph<'a, G> where
    G: IndexGraphRef<'a>, 
[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.

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

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<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<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.