[−][src]Struct rs_graph::ReverseDigraph
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]
fn clone(&self) -> ReverseDigraph<G>
[src]
fn clone_from(&mut self, source: &Self)
1.0.0[src]
impl<G: Copy> Copy for ReverseDigraph<G>
[src]
impl<'a, G> Directed<'a> for ReverseDigraph<G> where
G: Directed<'a>,
[src]
G: Directed<'a>,
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.
type IncidentIter = G::IncidentIter
Type of an iterator over all incident edges.
type DirectedEdge = 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 outedges(&'a self, u: Self::Node) -> Self::OutEdgeIter
[src]
fn inedges(&'a self, u: Self::Node) -> Self::InEdgeIter
[src]
fn incident_edges(&'a self, u: Self::Node) -> Self::IncidentIter
[src]
fn outgoing(&'a self) -> OutEdges<'a, Self> where
Self: Sized,
[src]
Self: Sized,
fn incoming(&'a self) -> InEdges<'a, Self> where
Self: Sized,
[src]
Self: Sized,
impl<'a, G> DirectedRef<'a> for ReverseDigraph<G> where
G: DirectedRef<'a>,
[src]
G: DirectedRef<'a>,
fn src(&self, u: Self::Edge) -> Self::Node
[src]
fn snk(&self, u: Self::Edge) -> Self::Node
[src]
fn outedges(&self, u: Self::Node) -> Self::OutEdgeIter
[src]
fn inedges(&self, u: Self::Node) -> Self::InEdgeIter
[src]
fn incident_edges(&self, u: Self::Node) -> Self::IncidentIter
[src]
impl<G> From<G> for ReverseDigraph<G>
[src]
impl<'a, G> GraphSize<'a> for ReverseDigraph<G> where
G: GraphSize<'a>,
[src]
G: GraphSize<'a>,
type NodeIter = G::NodeIter
Type of an iterator over all nodes.
type EdgeIter = G::EdgeIter
Type of an iterator over all edges.
fn num_nodes(&self) -> usize
[src]
fn num_edges(&self) -> usize
[src]
fn nodes(&'a self) -> Self::NodeIter
[src]
fn edges(&'a self) -> Self::EdgeIter
[src]
impl<'a, G> GraphSizeRef<'a> for ReverseDigraph<G> where
G: GraphSizeRef<'a>,
[src]
G: GraphSizeRef<'a>,
impl<'a, G> GraphType<'a> for ReverseDigraph<G> where
G: GraphType<'a>,
[src]
G: GraphType<'a>,
impl<'a, G> IndexGraph<'a> for ReverseDigraph<G> where
G: IndexGraph<'a>,
[src]
G: IndexGraph<'a>,
fn node_id(&self, u: Self::Node) -> usize
[src]
fn id2node(&'a self, id: usize) -> Self::Node
[src]
fn edge_id(&self, e: Self::Edge) -> usize
[src]
fn id2edge(&'a self, id: usize) -> Self::Edge
[src]
impl<'a, G> IndexGraphRef<'a> for ReverseDigraph<G> where
G: IndexGraphRef<'a>,
[src]
G: IndexGraphRef<'a>,
impl<'a, G> Undirected<'a> for ReverseDigraph<G> where
G: Undirected<'a>,
[src]
G: Undirected<'a>,
type NeighIter = G::NeighIter
Type of an iterator over all incident edges.
fn enodes(&'a self, e: Self::Edge) -> (Self::Node, Self::Node)
[src]
fn neighs(&'a self, u: Self::Node) -> Self::NeighIter
[src]
fn neighbors(&'a self) -> Neighbors<'a, Self> where
Self: Sized,
[src]
Self: Sized,
impl<'a, G> UndirectedRef<'a> for ReverseDigraph<G> where
G: UndirectedRef<'a>,
[src]
G: UndirectedRef<'a>,
Auto Trait Implementations
impl<G> RefUnwindSafe for ReverseDigraph<G> where
G: RefUnwindSafe,
G: RefUnwindSafe,
impl<G> Send for ReverseDigraph<G> where
G: Send,
G: Send,
impl<G> Sync for ReverseDigraph<G> where
G: Sync,
G: Sync,
impl<G> Unpin for ReverseDigraph<G> where
G: Unpin,
G: Unpin,
impl<G> UnwindSafe for ReverseDigraph<G> where
G: UnwindSafe,
G: UnwindSafe,
Blanket Implementations
impl<T> Any for T where
T: 'static + ?Sized,
[src]
T: 'static + ?Sized,
impl<T> Borrow<T> for T where
T: ?Sized,
[src]
T: ?Sized,
impl<T> BorrowMut<T> for T where
T: ?Sized,
[src]
T: ?Sized,
fn borrow_mut(&mut self) -> &mut T
[src]
impl<'a, G> Digraph<'a> for G where
G: GraphSize<'a> + Directed<'a>,
[src]
G: GraphSize<'a> + Directed<'a>,
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]
G: GraphSize<'a> + Undirected<'a>,
impl<'a, T> IndexDigraph<'a> for T where
T: IndexGraph<'a> + Digraph<'a>,
[src]
T: IndexGraph<'a> + Digraph<'a>,
impl<T, U> Into<U> for T where
U: From<T>,
[src]
U: From<T>,
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]
G: Digraph<'a> + NumberedGraph<'a>,
<G as GraphType<'a>>::Node: Indexable,
<G as GraphType<'a>>::Edge: Indexable,
impl<'a, G> NumberedGraph<'a> for G where
G: Graph<'a>,
<G as GraphType<'a>>::Node: Indexable,
<G as GraphType<'a>>::Edge: Indexable,
[src]
G: Graph<'a>,
<G as GraphType<'a>>::Node: Indexable,
<G as GraphType<'a>>::Edge: Indexable,
impl<T> ToOwned for T where
T: Clone,
[src]
T: Clone,
type Owned = T
The resulting type after obtaining ownership.
fn to_owned(&self) -> T
[src]
fn clone_into(&self, target: &mut T)
[src]
impl<T, U> TryFrom<U> for T where
U: Into<T>,
[src]
U: Into<T>,
type Error = Infallible
The type returned in the event of a conversion error.
fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>
[src]
impl<T, U> TryInto<U> for T where
U: TryFrom<T>,
[src]
U: TryFrom<T>,