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>

source§

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)

Performs copy-assignment from source. Read more
source§

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 of a graph iterator over edges leaving a node.
§

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 of an iterator over all incident edges.
§

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<'_>

Return a graph iterator over the edges leaving a node.
source§

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<'_>

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,

Return an iterator over the edges leaving a node.
source§

fn outgoing(&self) -> OutEdges<'_, Self>where Self: Sized,

Return access to the outgoing arcs via an Adjacencies trait. Read more
source§

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,

Return access to the incoming arcs via an Adjacencies trait. Read more
source§

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>,

§

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 of a graph iterator over edges entering a node.
§

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 of a directed edge.
source§

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

Return a graph iterator over the edges leaving a node.
source§

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,

Return an iterator over the edges leaving a node.
source§

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,

Return an iterator over all directed edges incident with a node.
source§

impl<'g, G> FiniteDigraph for ReverseDigraph<'g, G>where G: FiniteDigraph,

source§

fn src(&self, e: Self::Edge<'_>) -> Self::Node<'_>

Return the source node of an edge.
source§

fn snk(&self, e: Self::Edge<'_>) -> Self::Node<'_>

Return the sink node of an edge.
source§

impl<'a, G> FiniteDigraphRef<'a> for ReverseDigraph<'a, G>where G: FiniteDigraphRef<'a>,

source§

fn src(&self, e: Self::Edge) -> Self::Node

source§

fn snk(&self, e: Self::Edge) -> Self::Node

source§

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 of an iterator over all nodes.
§

type EdgeIt<'a> = ReverseWrapIt<<G as FiniteGraph>::EdgeIt<'a>> where G: 'a, 'g: 'a

Type of an iterator over all edges.
source§

fn num_nodes(&self) -> usize

Return the number of nodes in the graph.
source§

fn num_edges(&self) -> usize

Return the number of edges in the graph.
source§

fn nodes_iter(&self) -> Self::NodeIt<'_>

Return a graph iterator over all nodes.
source§

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<'_>)

Return the nodes connected by an edge. Read more
source§

fn nodes(&self) -> NodeIterator<'_, Self>where Self: Sized,

Return an iterator over all nodes.
source§

fn edges(&self) -> EdgeIterator<'_, Self>where Self: Sized,

Return an iterator over all edges. Read more
source§

impl<'a, G> FiniteGraphRef<'a> for ReverseDigraph<'a, G>where G: FiniteGraphRef<'a>,

§

type NodeIt = ReverseWrapIt<<G as FiniteGraphRef<'a>>::NodeIt>

Type of an iterator over all nodes.
§

type EdgeIt = ReverseWrapIt<<G as FiniteGraphRef<'a>>::EdgeIt>

Type of an iterator over all edges.
source§

fn num_nodes(&self) -> usize

Return the number of nodes in the graph.
source§

fn num_edges(&self) -> usize

Return the number of edges in the graph.
source§

fn nodes_iter(&self) -> Self::NodeIt

Return a graph iterator over all nodes.
source§

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)

Return the nodes connected by an edge. Read more
source§

fn nodes(&self) -> GraphIter<'_, Self, Self::NodeIt> where Self: Sized,

Return an iterator over all nodes.
source§

fn edges(&self) -> GraphIter<'_, Self, Self::EdgeIt> where Self: Sized,

Return an iterator over all edges. Read more
source§

impl<'g, G> GraphType for ReverseDigraph<'g, G>where G: GraphType,

§

type Node<'a> = <G as GraphType>::Node<'a>

Type of a node.
§

type Edge<'a> = <G as GraphType>::Edge<'a>

Type of an edge.
source§

impl<'a, G> GraphTypeRef<'a> for ReverseDigraph<'a, G>where G: GraphTypeRef<'a>,

§

type Node = <G as GraphTypeRef<'a>>::Node

Type of a node.
§

type Edge = <G as GraphTypeRef<'a>>::Edge

Type of an edge.
source§

impl<'g, G> IndexGraph for ReverseDigraph<'g, G>where G: IndexGraph,

source§

fn node_id(&self, u: Self::Node<'_>) -> usize

Return a unique id associated with a node.
source§

fn id2node(&self, id: usize) -> Self::Node<'_>

Return the node associated with the given id. Read more
source§

fn edge_id(&self, e: Self::Edge<'_>) -> usize

Return a unique id associated with an edge. Read more
source§

fn id2edge(&self, id: usize) -> Self::Edge<'_>

Return the edge associated with the given id. Read more
source§

impl<'a, G> IndexGraphRef<'a> for ReverseDigraph<'a, G>where G: IndexGraphRef<'a>,

source§

fn node_id(&self, u: Self::Node) -> usize

Return a unique id associated with a node.
source§

fn edge_id(&self, e: Self::Edge) -> usize

Return a unique id associated with an edge. Read more
source§

fn id2node(&self, id: usize) -> Self::Node

Return the node associated with the given id. Read more
source§

fn id2edge(&self, id: usize) -> Self::Edge

Return the edge associated with the given id. Read more
source§

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 of a graph iterator over all incident edges.
source§

fn neigh_iter(&self, u: Self::Node<'_>) -> Self::NeighIt<'_>

Return a graph iterator over the edges adjacent to some node.
source§

fn neighs( &self, u: Self::Node<'_> ) -> GraphIter<'_, Self, <Self as Undirected>::NeighIt<'_>> where Self: Sized,

Return an iterator over the edges adjacent to some node.
source§

fn neighbors(&self) -> Neighbors<'_, Self>where Self: Sized,

Return access to the neighbors via an Adjacencies trait. Read more
source§

impl<'a, G> UndirectedRef<'a> for ReverseDigraph<'a, G>where G: UndirectedRef<'a>,

§

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

Return a graph iterator over the edges adjacent to some node.
source§

fn neighs(&self, u: Self::Node) -> GraphIter<'_, Self, Self::NeighIt> where Self: Sized,

Return an iterator over the edges adjacent to some node.
source§

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> Any for Twhere T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

source§

impl<T, U> Into<U> for Twhere U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

source§

impl<T> ToOwned for Twhere T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
source§

impl<T, U> TryFrom<U> for Twhere U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
source§

impl<G> Digraph for Gwhere G: FiniteDigraph + Directed,

source§

impl<G> Graph for Gwhere G: FiniteGraph + Undirected,

source§

impl<T> IndexDigraph for Twhere T: IndexGraph + Digraph,