Struct rs_graph::reversedigraph::ReverseDigraph
source · pub struct ReverseDigraph<G>(_);
Expand description
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::{Graph, Digraph, IndexGraph, ReverseDigraph, LinkedListGraph};
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
sourceimpl<'a, G> Digraph<'a> for ReverseDigraph<G>where
G: Digraph<'a>,
impl<'a, G> Digraph<'a> for ReverseDigraph<G>where
G: Digraph<'a>,
type OutEdgeIter = <G as Digraph<'a>>::InEdgeIter
type OutEdgeIter = <G as Digraph<'a>>::InEdgeIter
Type of an iterator over the forward edges leaving a node.
type InEdgeIter = <G as Digraph<'a>>::OutEdgeIter
type InEdgeIter = <G as Digraph<'a>>::OutEdgeIter
Type of an iterator over the backward edges entering a node.
sourcefn outedges(&'a self, u: Self::Node) -> Self::OutEdgeIter
fn outedges(&'a self, u: Self::Node) -> Self::OutEdgeIter
Return an iterator over the outgoing edges of a node. Read more
sourcefn inedges(&'a self, u: Self::Node) -> Self::InEdgeIter
fn inedges(&'a self, u: Self::Node) -> Self::InEdgeIter
Return an iterator over the incoming edges of a node. Read more
sourceimpl<G> From<G> for ReverseDigraph<G>
impl<G> From<G> for ReverseDigraph<G>
sourceimpl<'a, G> Graph<'a> for ReverseDigraph<G>where
G: Graph<'a>,
impl<'a, G> Graph<'a> for ReverseDigraph<G>where
G: Graph<'a>,
sourceimpl<'a, G> IndexGraph<'a> for ReverseDigraph<G>where
G: IndexGraph<'a>,
impl<'a, G> IndexGraph<'a> for ReverseDigraph<G>where
G: IndexGraph<'a>,
sourceimpl<'a, G> IndexNetwork<'a> for ReverseDigraph<G>where
G: IndexNetwork<'a>,
impl<'a, G> IndexNetwork<'a> for ReverseDigraph<G>where
G: IndexNetwork<'a>,
sourceimpl<'a, G> Network<'a> for ReverseDigraph<G>where
G: Network<'a>,
impl<'a, G> Network<'a> for ReverseDigraph<G>where
G: Network<'a>,
sourcefn is_reverse(&self, e: Self::Edge, f: Self::Edge) -> bool
fn is_reverse(&self, e: Self::Edge, f: Self::Edge) -> bool
Return true if e is the reverse edge of f.
sourcefn is_forward(&self, e: Self::Edge) -> bool
fn is_forward(&self, e: Self::Edge) -> bool
Return true if e is a forward edge.
sourcefn is_backward(&self, e: Self::Edge) -> bool
fn is_backward(&self, e: Self::Edge) -> bool
Return true if e is a backward edge.
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
sourceimpl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
const: unstable · sourcefn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more