Struct rs_graph::adapters::ReverseDigraph
source · pub struct ReverseDigraph<'a, 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::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§
source§impl<'a, G: Clone> Clone for ReverseDigraph<'a, G>
impl<'a, G: Clone> Clone for ReverseDigraph<'a, G>
source§fn clone(&self) -> ReverseDigraph<'a, G>
fn clone(&self) -> ReverseDigraph<'a, G>
Returns a copy of the value. Read more
1.0.0 · source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
Performs copy-assignment from
source
. Read moresource§impl<'g, G> Directed for ReverseDigraph<'g, G>where
G: Directed,
impl<'g, G> Directed for ReverseDigraph<'g, G>where G: Directed,
§type OutIt<'a> = ReverseWrapIt<<G as Directed>::InIt<'a>>
where
G: 'a,
'g: 'a
type OutIt<'a> = ReverseWrapIt<<G as Directed>::InIt<'a>> where G: 'a, 'g: 'a
Type of a graph iterator over edges leaving a node.
§type InIt<'a> = ReverseWrapIt<<G as Directed>::OutIt<'a>>
where
G: 'a,
'g: 'a
type InIt<'a> = ReverseWrapIt<<G as Directed>::OutIt<'a>> where G: 'a, 'g: 'a
Type of a graph iterator over edges entering a node.
§type IncidentIt<'a> = ReverseIncidentIt<<G as Directed>::IncidentIt<'a>>
where
G: 'a,
'g: 'a
type IncidentIt<'a> = ReverseIncidentIt<<G as Directed>::IncidentIt<'a>> where G: 'a, 'g: 'a
Type of an iterator over all incident edges.
§type DirectedEdge<'a> = ReverseDirectedEdge<<G as Directed>::DirectedEdge<'a>>
where
Self: 'a
type DirectedEdge<'a> = ReverseDirectedEdge<<G as Directed>::DirectedEdge<'a>> where Self: 'a
Type of a directed edge.
source§fn out_iter(&self, u: Self::Node<'_>) -> Self::OutIt<'_>
fn out_iter(&self, u: Self::Node<'_>) -> Self::OutIt<'_>
Return a graph iterator over the edges leaving a node.
source§fn in_iter(&self, u: Self::Node<'_>) -> Self::InIt<'_>
fn in_iter(&self, u: Self::Node<'_>) -> Self::InIt<'_>
Return a graph iterator over the edges leaving a node.
source§fn incident_iter(&self, u: Self::Node<'_>) -> Self::IncidentIt<'_>
fn incident_iter(&self, u: Self::Node<'_>) -> Self::IncidentIt<'_>
Return an iterator over all directed edges incident with a node.
source§fn outedges(
&self,
u: Self::Node<'_>
) -> GraphIter<'_, Self, <Self as Directed>::OutIt<'_>> ⓘwhere
Self: Sized,
fn outedges( &self, u: Self::Node<'_> ) -> GraphIter<'_, Self, <Self as Directed>::OutIt<'_>> ⓘwhere Self: Sized,
Return an iterator over the edges leaving a node.
source§fn outgoing(&self) -> OutEdges<'_, Self>where
Self: Sized,
fn outgoing(&self) -> OutEdges<'_, Self>where Self: Sized,
Return access to the outgoing arcs via an
Adjacencies
trait. Read moresource§fn inedges(
&self,
u: Self::Node<'_>
) -> GraphIter<'_, Self, <Self as Directed>::InIt<'_>> ⓘwhere
Self: Sized,
fn inedges( &self, u: Self::Node<'_> ) -> GraphIter<'_, Self, <Self as Directed>::InIt<'_>> ⓘwhere Self: Sized,
Return an iterator over the edges leaving a node.
source§fn incoming(&self) -> InEdges<'_, Self>where
Self: Sized,
fn incoming(&self) -> InEdges<'_, Self>where Self: Sized,
Return access to the incoming arcs via an
Adjacencies
trait. Read moresource§fn incident_edges(
&self,
u: Self::Node<'_>
) -> GraphIter<'_, Self, <Self as Directed>::IncidentIt<'_>> ⓘwhere
Self: Sized,
fn incident_edges( &self, u: Self::Node<'_> ) -> GraphIter<'_, Self, <Self as Directed>::IncidentIt<'_>> ⓘwhere Self: Sized,
Return an iterator over all directed edges incident with a node.
source§impl<'a, G> DirectedRef<'a> for ReverseDigraph<'a, G>where
G: DirectedRef<'a>,
impl<'a, G> DirectedRef<'a> for ReverseDigraph<'a, G>where G: DirectedRef<'a>,
§type OutIt = ReverseWrapIt<<G as DirectedRef<'a>>::InIt>
type OutIt = ReverseWrapIt<<G as DirectedRef<'a>>::InIt>
Type of a graph iterator over edges leaving a node.
§type InIt = ReverseWrapIt<<G as DirectedRef<'a>>::OutIt>
type InIt = ReverseWrapIt<<G as DirectedRef<'a>>::OutIt>
Type of a graph iterator over edges entering a node.
§type IncidentIt = ReverseIncidentIt<<G as DirectedRef<'a>>::IncidentIt>
type IncidentIt = ReverseIncidentIt<<G as DirectedRef<'a>>::IncidentIt>
Type of an iterator over all incident edges.
§type DirectedEdge = ReverseDirectedEdge<<G as DirectedRef<'a>>::DirectedEdge>
type DirectedEdge = ReverseDirectedEdge<<G as DirectedRef<'a>>::DirectedEdge>
Type of a directed edge.
source§fn out_iter(&self, u: Self::Node) -> Self::OutIt
fn out_iter(&self, u: Self::Node) -> Self::OutIt
Return the source node of an edge.
Return the sink node of an edge.
Return a graph iterator over the edges leaving a node.
source§fn in_iter(&self, u: Self::Node) -> Self::InIt
fn in_iter(&self, u: Self::Node) -> Self::InIt
Return a graph iterator over the edges leaving a node.
source§fn incident_iter(&self, u: Self::Node) -> Self::IncidentIt
fn incident_iter(&self, u: Self::Node) -> Self::IncidentIt
Return an iterator over all directed edges incident with a node.
source§fn outedges(&self, u: Self::Node) -> GraphIter<'_, Self, Self::OutIt> ⓘwhere
Self: Sized,
fn outedges(&self, u: Self::Node) -> GraphIter<'_, Self, Self::OutIt> ⓘwhere Self: Sized,
Return an iterator over the edges leaving a node.
source§fn inedges(&self, u: Self::Node) -> GraphIter<'_, Self, Self::InIt> ⓘwhere
Self: Sized,
fn inedges(&self, u: Self::Node) -> GraphIter<'_, Self, Self::InIt> ⓘwhere Self: Sized,
Return an iterator over the edges leaving a node.
source§fn incident_edges(&self, u: Self::Node) -> GraphIter<'_, Self, Self::IncidentIt> ⓘwhere
Self: Sized,
fn incident_edges(&self, u: Self::Node) -> GraphIter<'_, Self, Self::IncidentIt> ⓘwhere Self: Sized,
Return an iterator over all directed edges incident with a node.
source§impl<'g, G> FiniteDigraph for ReverseDigraph<'g, G>where
G: FiniteDigraph,
impl<'g, G> FiniteDigraph for ReverseDigraph<'g, G>where G: FiniteDigraph,
source§impl<'a, G> FiniteDigraphRef<'a> for ReverseDigraph<'a, G>where
G: FiniteDigraphRef<'a>,
impl<'a, G> FiniteDigraphRef<'a> for ReverseDigraph<'a, G>where G: FiniteDigraphRef<'a>,
source§impl<'g, G> FiniteGraph for ReverseDigraph<'g, G>where
G: FiniteGraph,
impl<'g, G> FiniteGraph for ReverseDigraph<'g, G>where G: FiniteGraph,
§type NodeIt<'a> = ReverseWrapIt<<G as FiniteGraph>::NodeIt<'a>>
where
G: 'a,
'g: 'a
type NodeIt<'a> = ReverseWrapIt<<G as FiniteGraph>::NodeIt<'a>> where G: 'a, 'g: 'a
Type of an iterator over all nodes.
§type EdgeIt<'a> = ReverseWrapIt<<G as FiniteGraph>::EdgeIt<'a>>
where
G: 'a,
'g: 'a
type EdgeIt<'a> = ReverseWrapIt<<G as FiniteGraph>::EdgeIt<'a>> where G: 'a, 'g: 'a
Type of an iterator over all edges.
source§fn nodes_iter(&self) -> Self::NodeIt<'_>
fn nodes_iter(&self) -> Self::NodeIt<'_>
Return a graph iterator over all nodes.
source§fn edges_iter(&self) -> Self::EdgeIt<'_>
fn edges_iter(&self) -> Self::EdgeIt<'_>
Return a graph iterator over all edges. Read more
source§fn enodes(&self, e: Self::Edge<'_>) -> (Self::Node<'_>, Self::Node<'_>)
fn enodes(&self, e: Self::Edge<'_>) -> (Self::Node<'_>, Self::Node<'_>)
Return the nodes connected by an edge. Read more
source§fn nodes(&self) -> NodeIterator<'_, Self>where
Self: Sized,
fn nodes(&self) -> NodeIterator<'_, Self>where Self: Sized,
Return an iterator over all nodes.
source§impl<'a, G> FiniteGraphRef<'a> for ReverseDigraph<'a, G>where
G: FiniteGraphRef<'a>,
impl<'a, G> FiniteGraphRef<'a> for ReverseDigraph<'a, G>where G: FiniteGraphRef<'a>,
§type NodeIt = ReverseWrapIt<<G as FiniteGraphRef<'a>>::NodeIt>
type NodeIt = ReverseWrapIt<<G as FiniteGraphRef<'a>>::NodeIt>
Type of an iterator over all nodes.
§type EdgeIt = ReverseWrapIt<<G as FiniteGraphRef<'a>>::EdgeIt>
type EdgeIt = ReverseWrapIt<<G as FiniteGraphRef<'a>>::EdgeIt>
Type of an iterator over all edges.
source§fn nodes_iter(&self) -> Self::NodeIt
fn nodes_iter(&self) -> Self::NodeIt
Return a graph iterator over all nodes.
source§fn edges_iter(&self) -> Self::EdgeIt
fn edges_iter(&self) -> Self::EdgeIt
Return a graph iterator over all edges. Read more
source§fn enodes(&self, e: Self::Edge) -> (Self::Node, Self::Node)
fn enodes(&self, e: Self::Edge) -> (Self::Node, Self::Node)
Return the nodes connected by an edge. Read more
source§impl<'g, G> GraphType for ReverseDigraph<'g, G>where
G: GraphType,
impl<'g, G> GraphType for ReverseDigraph<'g, G>where G: GraphType,
source§impl<'a, G> GraphTypeRef<'a> for ReverseDigraph<'a, G>where
G: GraphTypeRef<'a>,
impl<'a, G> GraphTypeRef<'a> for ReverseDigraph<'a, G>where G: GraphTypeRef<'a>,
§type Node = <G as GraphTypeRef<'a>>::Node
type Node = <G as GraphTypeRef<'a>>::Node
Type of a node.
§type Edge = <G as GraphTypeRef<'a>>::Edge
type Edge = <G as GraphTypeRef<'a>>::Edge
Type of an edge.
source§impl<'g, G> IndexGraph for ReverseDigraph<'g, G>where
G: IndexGraph,
impl<'g, G> IndexGraph for ReverseDigraph<'g, G>where G: IndexGraph,
source§impl<'a, G> IndexGraphRef<'a> for ReverseDigraph<'a, G>where
G: IndexGraphRef<'a>,
impl<'a, G> IndexGraphRef<'a> for ReverseDigraph<'a, G>where G: IndexGraphRef<'a>,
source§impl<'g, G> Undirected for ReverseDigraph<'g, G>where
G: Undirected,
impl<'g, G> Undirected for ReverseDigraph<'g, G>where G: Undirected,
§type NeighIt<'a> = ReverseWrapIt<<G as Undirected>::NeighIt<'a>>
where
G: 'a,
'g: 'a
type NeighIt<'a> = ReverseWrapIt<<G as Undirected>::NeighIt<'a>> where G: 'a, 'g: 'a
Type of a graph iterator over all incident edges.
source§fn neigh_iter(&self, u: Self::Node<'_>) -> Self::NeighIt<'_>
fn neigh_iter(&self, u: Self::Node<'_>) -> Self::NeighIt<'_>
Return a graph iterator over the edges adjacent to some node.
source§impl<'a, G> UndirectedRef<'a> for ReverseDigraph<'a, G>where
G: UndirectedRef<'a>,
impl<'a, G> UndirectedRef<'a> for ReverseDigraph<'a, G>where G: UndirectedRef<'a>,
§type NeighIt = ReverseWrapIt<<G as UndirectedRef<'a>>::NeighIt>
type NeighIt = ReverseWrapIt<<G as UndirectedRef<'a>>::NeighIt>
Type of a graph iterator over all incident edges.
source§fn neigh_iter(&self, u: Self::Node) -> Self::NeighIt
fn neigh_iter(&self, u: Self::Node) -> Self::NeighIt
Return a graph iterator over the edges adjacent to some node.
impl<'a, G: Copy> Copy for ReverseDigraph<'a, G>
Auto Trait Implementations§
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> Sync for ReverseDigraph<'a, G>where G: Sync,
impl<'a, G> Unpin for ReverseDigraph<'a, G>
impl<'a, G> UnwindSafe for ReverseDigraph<'a, G>where G: RefUnwindSafe,
Blanket Implementations§
source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere T: ?Sized,
source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more