[−][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 OutEdge = G::InEdge
Type of a graph iterator over edges leaving a node.
type InEdge = G::OutEdge
Type of a graph iterator over edges entering a node.
type IncidentEdge = G::IncidentEdge
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 first_out(&'a self, u: Self::Node) -> Option<Self::OutEdge>
[src]
fn next_out(&'a self, it: Self::OutEdge) -> Option<Self::OutEdge>
[src]
fn get_out(&'a self, it: &Self::OutEdge) -> (Self::Edge, Self::Node)
[src]
fn first_in(&'a self, u: Self::Node) -> Option<Self::InEdge>
[src]
fn next_in(&'a self, it: Self::InEdge) -> Option<Self::InEdge>
[src]
fn get_in(&'a self, it: &Self::InEdge) -> (Self::Edge, Self::Node)
[src]
fn first_incident(&'a self, u: Self::Node) -> Option<Self::IncidentEdge>
[src]
fn next_incident(&'a self, it: Self::IncidentEdge) -> Option<Self::IncidentEdge>
[src]
fn get_incident(
&'a self,
it: &Self::IncidentEdge
) -> (Self::DirectedEdge, Self::Node)
[src]
&'a self,
it: &Self::IncidentEdge
) -> (Self::DirectedEdge, Self::Node)
ⓘImportant traits for OutEdgeIter<'a, G>fn outedges(&'a self, u: Self::Node) -> OutEdgeIter<'a, Self> where
Self: Sized,
[src]
ⓘImportant traits for OutEdgeIter<'a, G>
Self: Sized,
fn outgoing(&'a self) -> OutEdges<'a, Self> where
Self: Sized,
[src]
Self: Sized,
ⓘImportant traits for InEdgeIter<'a, G>fn inedges(&'a self, u: Self::Node) -> InEdgeIter<'a, Self> where
Self: Sized,
[src]
ⓘImportant traits for InEdgeIter<'a, G>
Self: Sized,
fn incoming(&'a self) -> InEdges<'a, Self> where
Self: Sized,
[src]
Self: Sized,
ⓘImportant traits for IncidentEdgeIter<'a, G>fn incident_edges(&'a self, u: Self::Node) -> IncidentEdgeIter<'a, Self> where
Self: Sized,
[src]
ⓘImportant traits for IncidentEdgeIter<'a, G>
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 first_out(&self, u: Self::Node) -> Option<Self::OutEdge>
[src]
fn next_out(&self, it: Self::OutEdge) -> Option<Self::OutEdge>
[src]
fn get_out(&self, it: &Self::OutEdge) -> (Self::Edge, Self::Node)
[src]
fn first_in(&self, u: Self::Node) -> Option<Self::InEdge>
[src]
fn next_in(&self, it: Self::InEdge) -> Option<Self::InEdge>
[src]
fn get_in(&self, it: &Self::InEdge) -> (Self::Edge, Self::Node)
[src]
fn first_incident(&self, u: Self::Node) -> Option<Self::IncidentEdge>
[src]
fn next_incident(&self, it: Self::IncidentEdge) -> Option<Self::IncidentEdge>
[src]
fn get_incident(
&self,
it: &Self::IncidentEdge
) -> (Self::DirectedEdge, Self::Node)
[src]
&self,
it: &Self::IncidentEdge
) -> (Self::DirectedEdge, Self::Node)
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 Neigh = G::Neigh
Type of a graph iterator over all incident edges.
fn enodes(&'a self, e: Self::Edge) -> (Self::Node, Self::Node)
[src]
fn first_neigh(&'a self, u: Self::Node) -> Option<Self::Neigh>
[src]
fn next_neigh(&'a self, it: Self::Neigh) -> Option<Self::Neigh>
[src]
fn get_neigh(&'a self, it: &Self::Neigh) -> (Self::Edge, Self::Node)
[src]
ⓘImportant traits for NeighIter<'a, G>fn neighs(&'a self, u: Self::Node) -> NeighIter<Self> where
Self: Sized,
[src]
ⓘImportant traits for NeighIter<'a, G>
Self: Sized,
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>,