[−][src]Struct rs_graph::reversedigraph::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<'a, G> GraphType<'a> for ReverseDigraph<G> where
G: GraphType<'a>,
[src]
G: GraphType<'a>,
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> 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,
Return access to the neighbors via an Adjacencies
trait. Read more
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.
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 outgoing(&'a self) -> OutEdges<'a, Self> where
Self: Sized,
[src]
Self: Sized,
Return access to the outgoing arcs via an Adjacencies
trait. Read more
fn incoming(&'a self) -> InEdges<'a, Self> where
Self: Sized,
[src]
Self: Sized,
Return access to the incoming arcs via an Adjacencies
trait. Read more
impl<'a, G> BiDirected<'a> for ReverseDigraph<G> where
G: BiDirected<'a>,
[src]
G: BiDirected<'a>,
fn is_reverse(&self, e: Self::Edge, f: Self::Edge) -> bool
[src]
fn reverse(&'a self, e: Self::Edge) -> Self::Edge
[src]
fn is_forward(&self, e: Self::Edge) -> bool
[src]
fn forward(&'a self, e: Self::Edge) -> Self::Edge
[src]
fn is_backward(&self, e: Self::Edge) -> bool
[src]
fn backward(&'a self, e: Self::Edge) -> Self::Edge
[src]
fn bisrc(&'a self, e: Self::Edge) -> Self::Node
[src]
fn bisnk(&'a self, e: Self::Edge) -> Self::Node
[src]
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> IndexNetwork<'a> for ReverseDigraph<G> where
G: IndexNetwork<'a>,
[src]
G: IndexNetwork<'a>,
fn biedge_id(&self, e: Self::Edge) -> usize
[src]
fn id2biedge(&'a self, id: usize) -> Self::Edge
[src]
impl<G> From<G> for ReverseDigraph<G>
[src]
Auto Trait Implementations
impl<G> Send for ReverseDigraph<G> where
G: Send,
G: Send,
impl<G> Unpin for ReverseDigraph<G> where
G: Unpin,
G: Unpin,
impl<G> Sync for ReverseDigraph<G> where
G: Sync,
G: Sync,
impl<G> UnwindSafe for ReverseDigraph<G> where
G: UnwindSafe,
G: UnwindSafe,
impl<G> RefUnwindSafe for ReverseDigraph<G> where
G: RefUnwindSafe,
G: RefUnwindSafe,
Blanket Implementations
impl<'a, G> Graph<'a> for G where
G: GraphSize<'a> + Undirected<'a>,
[src]
G: GraphSize<'a> + Undirected<'a>,
impl<'a, G> Digraph<'a> for G where
G: GraphSize<'a> + Directed<'a>,
[src]
G: GraphSize<'a> + Directed<'a>,
impl<'a, G> Network<'a> for G where
G: GraphSize<'a> + BiDirected<'a>,
[src]
G: GraphSize<'a> + BiDirected<'a>,
impl<'a, T> IndexDigraph<'a> for T where
T: IndexGraph<'a> + Digraph<'a>,
[src]
T: IndexGraph<'a> + Digraph<'a>,
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<'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> NumberedNetwork<'a> for G where
G: Network<'a> + NumberedDigraph<'a>,
<G as GraphType<'a>>::Node: Indexable,
<G as GraphType<'a>>::Edge: Indexable,
<G as GraphType<'a>>::Edge: BiIndexable,
[src]
G: Network<'a> + NumberedDigraph<'a>,
<G as GraphType<'a>>::Node: Indexable,
<G as GraphType<'a>>::Edge: Indexable,
<G as GraphType<'a>>::Edge: BiIndexable,
impl<T> From<T> for T
[src]
impl<T, U> Into<U> for T where
U: From<T>,
[src]
U: From<T>,
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>,
type Error = <U as TryFrom<T>>::Error
The type returned in the event of a conversion error.
fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>
[src]
impl<T> BorrowMut<T> for T where
T: ?Sized,
[src]
T: ?Sized,
fn borrow_mut(&mut self) -> &mut T
[src]
impl<T> Borrow<T> for T where
T: ?Sized,
[src]
T: ?Sized,
impl<T> Any for T where
T: 'static + ?Sized,
[src]
T: 'static + ?Sized,