pub struct LinkedGraph<N, E> {
nodes: Vec<Node<N>>,
edges: Vec<Edge<E>>,
}
Expand description
A concrete graph implementation that supports:
- Nodes and/or edges labelled with custom data types (
N
andE
respectively). - Incremental addition of new nodes/edges (but not removal).
- Flat storage of node/edge data in a pair of vectors.
- Iteration over any node’s out-edges or in-edges, via linked lists threaded through the node/edge data.
§Caution
This is an older graph implementation that is still used by some pieces
of diagnostic/debugging code. New code that needs a graph data structure
should consider using VecGraph
instead, or implementing its own
special-purpose graph with the specific features needed.
This graph implementation predates the later graph traits, and does not implement those traits, so it has its own implementations of a few basic graph algorithms.
Fields§
§nodes: Vec<Node<N>>
§edges: Vec<Edge<E>>
Implementations§
Source§impl<N: Debug, E: Debug> LinkedGraph<N, E>
impl<N: Debug, E: Debug> LinkedGraph<N, E>
pub fn new() -> Self
pub fn with_capacity(nodes: usize, edges: usize) -> Self
pub fn all_nodes(&self) -> &[Node<N>]
pub fn len_nodes(&self) -> usize
pub fn all_edges(&self) -> &[Edge<E>]
pub fn len_edges(&self) -> usize
pub fn next_node_index(&self) -> NodeIndex
pub fn add_node(&mut self, data: N) -> NodeIndex
pub fn mut_node_data(&mut self, idx: NodeIndex) -> &mut N
pub fn node_data(&self, idx: NodeIndex) -> &N
pub fn node(&self, idx: NodeIndex) -> &Node<N>
pub fn next_edge_index(&self) -> EdgeIndex
pub fn add_edge( &mut self, source: NodeIndex, target: NodeIndex, data: E, ) -> EdgeIndex
pub fn edge(&self, idx: EdgeIndex) -> &Edge<E>
pub fn enumerated_nodes(&self) -> impl Iterator<Item = (NodeIndex, &Node<N>)>
pub fn enumerated_edges(&self) -> impl Iterator<Item = (EdgeIndex, &Edge<E>)>
Sourcepub fn each_node<'a>(
&'a self,
f: impl FnMut(NodeIndex, &'a Node<N>) -> bool,
) -> bool
pub fn each_node<'a>( &'a self, f: impl FnMut(NodeIndex, &'a Node<N>) -> bool, ) -> bool
Iterates over all edges defined in the graph.
Sourcepub fn each_edge<'a>(
&'a self,
f: impl FnMut(EdgeIndex, &'a Edge<E>) -> bool,
) -> bool
pub fn each_edge<'a>( &'a self, f: impl FnMut(EdgeIndex, &'a Edge<E>) -> bool, ) -> bool
Iterates over all edges defined in the graph
pub fn outgoing_edges(&self, source: NodeIndex) -> AdjacentEdges<'_, N, E> ⓘ
pub fn incoming_edges(&self, source: NodeIndex) -> AdjacentEdges<'_, N, E> ⓘ
pub fn adjacent_edges( &self, source: NodeIndex, direction: Direction, ) -> AdjacentEdges<'_, N, E> ⓘ
pub fn successor_nodes( &self, source: NodeIndex, ) -> impl Iterator<Item = NodeIndex>
pub fn predecessor_nodes( &self, target: NodeIndex, ) -> impl Iterator<Item = NodeIndex>
pub fn depth_traverse( &self, start: NodeIndex, direction: Direction, ) -> DepthFirstTraversal<'_, N, E> ⓘ
pub fn nodes_in_postorder( &self, direction: Direction, entry_node: NodeIndex, ) -> Vec<NodeIndex>
Auto Trait Implementations§
impl<N, E> DynSend for LinkedGraph<N, E>
impl<N, E> DynSync for LinkedGraph<N, E>
impl<N, E> Freeze for LinkedGraph<N, E>
impl<N, E> RefUnwindSafe for LinkedGraph<N, E>where
N: RefUnwindSafe,
E: RefUnwindSafe,
impl<N, E> Send for LinkedGraph<N, E>
impl<N, E> Sync for LinkedGraph<N, E>
impl<N, E> Unpin for LinkedGraph<N, E>
impl<N, E> UnwindSafe for LinkedGraph<N, E>where
N: UnwindSafe,
E: UnwindSafe,
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
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self
into a Left
variant of Either<Self, Self>
if into_left
is true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self
into a Left
variant of Either<Self, Self>
if into_left(&self)
returns true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read moreSource§impl<T> Pointable for T
impl<T> Pointable for T
Source§impl<T> WithSubscriber for T
impl<T> WithSubscriber for T
Source§fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
Source§fn with_current_subscriber(self) -> WithDispatch<Self>
fn with_current_subscriber(self) -> WithDispatch<Self>
Layout§
Note: Most layout information is completely unstable and may even differ between compilations. The only exception is types with certain repr(...)
attributes. Please see the Rust Reference's “Type Layout” chapter for details on type layout guarantees.
Size: 48 bytes