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: Clone> Clone for ReverseDigraph<'a, G>
[src]fn clone(&self) -> ReverseDigraph<'a, G>
[src]
pub fn clone_from(&mut self, source: &Self)
1.0.0[src]
impl<'a, G: Copy> Copy 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]
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]
fn snk(&'a self, e: Self::Edge) -> Self::Node
[src]
fn out_iter(&'a self, u: Self::Node) -> Self::OutIt
[src]
fn in_iter(&'a self, u: Self::Node) -> Self::InIt
[src]
fn incident_iter(&'a self, u: Self::Node) -> Self::IncidentIt
[src]
fn outedges(&'a self, u: Self::Node) -> GraphIter<'a, Self, Self::OutIt>ⓘ where
Self: Sized,
[src]
Self: Sized,
fn outgoing(&'a self) -> OutEdges<'a, Self> where
Self: Sized,
[src]
Self: Sized,
fn inedges(&'a self, u: Self::Node) -> GraphIter<'a, Self, Self::InIt>ⓘ where
Self: Sized,
[src]
Self: Sized,
fn incoming(&'a self) -> InEdges<'a, Self> where
Self: Sized,
[src]
Self: Sized,
fn incident_edges(
&'a self,
u: Self::Node
) -> GraphIter<'a, Self, Self::IncidentIt>ⓘ where
Self: Sized,
[src]
&'a self,
u: Self::Node
) -> GraphIter<'a, Self, Self::IncidentIt>ⓘ where
Self: Sized,
impl<'a, G> DirectedRef<'a> for ReverseDigraph<'a, G> where
G: DirectedRef<'a>,
[src]
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]
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]
fn num_edges(&self) -> usize
[src]
fn nodes_iter(&self) -> Self::NodeIt
[src]
fn edges_iter(&self) -> Self::EdgeIt
[src]
fn nodes(&'a self) -> NodeIterator<'a, Self> where
Self: Sized,
[src]
Self: Sized,
fn edges(&'a self) -> EdgeIterator<'a, Self> where
Self: Sized,
[src]
Self: Sized,
impl<'a, G> GraphSizeRef<'a> for ReverseDigraph<'a, G> where
G: GraphSizeRef<'a>,
[src]
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]
impl<'a, 'g: 'a, G> GraphType<'a> for ReverseDigraph<'g, G> where
G: GraphType<'g>,
[src]impl<'a, 'g: 'a, G> IndexGraph<'a> for ReverseDigraph<'g, G> where
G: IndexGraph<'g>,
[src]
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> 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]
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]
fn neigh_iter(&self, u: Self::Node) -> Self::NeighIt
[src]
fn neighs(&'a self, u: Self::Node) -> GraphIter<'a, Self, Self::NeighIt>ⓘ where
Self: Sized,
[src]
Self: Sized,
fn neighbors(&'a self) -> Neighbors<'a, Self> where
Self: Sized,
[src]
Self: Sized,
impl<'a, G> UndirectedRef<'a> for ReverseDigraph<'a, G> where
G: UndirectedRef<'a>,
[src]
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> RefUnwindSafe for ReverseDigraph<'a, G> where
G: RefUnwindSafe,
impl<'a, G> Send for ReverseDigraph<'a, G> where
G: Sync,
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> Sync for ReverseDigraph<'a, G> where
G: Sync,
impl<'a, G> Unpin for ReverseDigraph<'a, G>
impl<'a, G> Unpin for ReverseDigraph<'a, G>
impl<'a, G> UnwindSafe for ReverseDigraph<'a, G> where
G: RefUnwindSafe,
impl<'a, G> UnwindSafe for ReverseDigraph<'a, G> where
G: RefUnwindSafe,
Blanket Implementations
impl<'a, G> Graph<'a> for G where
G: GraphSize<'a> + Undirected<'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]
impl<'a, T> IndexDigraph<'a> for T where
T: IndexGraph<'a> + Digraph<'a>,
[src]