pub struct UnGraph<N, E> { /* private fields */ }
Expand description
A graph with undirected edges.
For example, an edge between 1 and 2 is equivalent to an edge between 2 and 1.
Implementations§
Source§impl<N, E> UnGraph<N, E>
impl<N, E> UnGraph<N, E>
Sourcepub fn with_capacity(nodes: usize, edges: usize) -> Self
pub fn with_capacity(nodes: usize, edges: usize) -> Self
Creates a new UnGraph
with estimated capacity.
Sourcepub fn node_count(&self) -> usize
pub fn node_count(&self) -> usize
Returns the number of nodes in the graph.
Computes in O(1) time.
Sourcepub fn edge_count(&self) -> usize
pub fn edge_count(&self) -> usize
Returns the number of edges in the graph.
Computes in O(1) time.
Sourcepub fn add_node(&mut self, weight: N) -> NodeIndex
pub fn add_node(&mut self, weight: N) -> NodeIndex
Adds a node (also called vertex) with associated data weight
to the graph.
Computes in O(1) time.
Returns the index of the new node.
§Panics
Panics if the graph is at the maximum number of nodes.
Sourcepub fn node_weight(&self, a: NodeIndex) -> Option<&N>
pub fn node_weight(&self, a: NodeIndex) -> Option<&N>
Accesses the weight for node a
.
Also available with indexing syntax: &graph[a]
.
Sourcepub fn add_edge(&mut self, a: NodeIndex, b: NodeIndex, weight: E) -> EdgeIndex
pub fn add_edge(&mut self, a: NodeIndex, b: NodeIndex, weight: E) -> EdgeIndex
Adds an edge from a
to b
to the graph, with its associated
data weight
.
Returns the index of the new edge.
Computes in O(1) time.
Note: UnGraph
allows adding parallel (“duplicate”) edges. If you want
to avoid this, use .update_edge(a, b, weight)
instead.
§Panics
Panics if any of the nodes don’t exist or the graph is at the maximum number of edges.
Sourcepub fn update_edge(
&mut self,
a: NodeIndex,
b: NodeIndex,
weight: E,
) -> EdgeIndex
pub fn update_edge( &mut self, a: NodeIndex, b: NodeIndex, weight: E, ) -> EdgeIndex
Adds or updates an edge from a
to b
.
If the edge already exists, its weight is updated.
Returns the index of the affected edge.
Computes in O(e’) time, where e’ is the number of edges
connected to a
(and b
, if the graph edges are undirected).
§Panics
Panics if any of the nodes doesn’t exist.
Sourcepub fn edge_weight(&self, e: EdgeIndex) -> Option<&E>
pub fn edge_weight(&self, e: EdgeIndex) -> Option<&E>
Accesses the weight for edge e
.
Also available with indexing syntax: &graph[e]
.
Sourcepub fn edge_weight_mut(&mut self, e: EdgeIndex) -> Option<&mut E>
pub fn edge_weight_mut(&mut self, e: EdgeIndex) -> Option<&mut E>
Accesses the weight for edge e
mutably.
Also available with indexing syntax: &mut graph[e]
.
Sourcepub fn edge_endpoints(&self, e: EdgeIndex) -> Option<(NodeIndex, NodeIndex)>
pub fn edge_endpoints(&self, e: EdgeIndex) -> Option<(NodeIndex, NodeIndex)>
Accesses the source and target nodes for e
.
Sourcepub fn remove_node_with<F>(
&mut self,
a: NodeIndex,
edge_callback: F,
) -> Option<N>where
F: FnMut(E),
pub fn remove_node_with<F>(
&mut self,
a: NodeIndex,
edge_callback: F,
) -> Option<N>where
F: FnMut(E),
Removes a
from the graph if it exists, calling edge_callback
for each of its edges,
and returns its weight. If it doesn’t exist in the graph, returns None
.
Apart from a
, this invalidates the last node index in the graph
(that node will adopt the removed node index). Edge indices are
invalidated as they would be following the removal of each edge
with an endpoint in a
.
Computes in O(e’) time, where e’ is the number of affected
edges, including n calls to remove_edge
,
where n is the number of edges with an endpoint in a
,
and including the edges with an endpoint in the displaced node.
Sourcepub fn remove_edge(&mut self, e: EdgeIndex) -> Option<E>
pub fn remove_edge(&mut self, e: EdgeIndex) -> Option<E>
Removes an edge and returns its edge weight, or None
if it didn’t exist.
Apart from e
, this invalidates the last edge index in the graph
(that edge will adopt the removed edge index).
Computes in O(e’) time, where e’ is the size of four particular edge lists, for
the vertices of e
and the vertices of another affected edge.
Sourcepub fn neighbors(&self, a: NodeIndex) -> Neighbors<'_, E> ⓘ
pub fn neighbors(&self, a: NodeIndex) -> Neighbors<'_, E> ⓘ
Returns an iterator of all nodes with an edge connected to a
.
Produces an empty iterator if the node doesn’t exist.
The iterator element type is NodeIndex
.
Sourcepub fn edges(&self, a: NodeIndex) -> Edges<'_, E> ⓘ
pub fn edges(&self, a: NodeIndex) -> Edges<'_, E> ⓘ
Returns an iterator of all edges connected to a
.
Produces an empty iterator if the node doesn’t exist.
The iterator element type is EdgeReference<E>
.
Sourcepub fn edges_mut(&mut self, a: NodeIndex) -> EdgesMut<'_, N, E> ⓘ
pub fn edges_mut(&mut self, a: NodeIndex) -> EdgesMut<'_, N, E> ⓘ
Returns a mutable iterator of all edges connected to a
.
Produces an empty iterator if the node doesn’t exist.
The iterator element type is EdgeReference<E>
.
Sourcepub fn contains_edge(&self, a: NodeIndex, b: NodeIndex) -> bool
pub fn contains_edge(&self, a: NodeIndex, b: NodeIndex) -> bool
Looks up if there is an edge from a
to b
.
Computes in O(e’) time, where e’ is the number of edges
connected to a
(and b
, if the graph edges are undirected).
Sourcepub fn find_edge(&self, a: NodeIndex, b: NodeIndex) -> Option<EdgeIndex>
pub fn find_edge(&self, a: NodeIndex, b: NodeIndex) -> Option<EdgeIndex>
Looks up an edge from a
to b
.
Computes in O(e’) time, where e’ is the number of edges
connected to a
(and b
, if the graph edges are undirected).
Sourcepub fn node_indices(&self) -> impl DoubleEndedIterator<Item = NodeIndex>
pub fn node_indices(&self) -> impl DoubleEndedIterator<Item = NodeIndex>
Returns an iterator over the node indices of the graph.
Sourcepub fn edge_indices(&self) -> impl DoubleEndedIterator<Item = EdgeIndex>
pub fn edge_indices(&self) -> impl DoubleEndedIterator<Item = EdgeIndex>
Returns an iterator over the edge indices of the graph
Sourcepub fn edge_weights(&self, a: NodeIndex) -> EdgeWeights<'_, E> ⓘ
pub fn edge_weights(&self, a: NodeIndex) -> EdgeWeights<'_, E> ⓘ
Returns an iterator yielding immutable access to edge weights for edges from or to a
.
Sourcepub fn edge_weights_mut(&mut self, a: NodeIndex) -> EdgeWeightsMut<'_, N, E> ⓘ
pub fn edge_weights_mut(&mut self, a: NodeIndex) -> EdgeWeightsMut<'_, N, E> ⓘ
Returns an iterator yielding mutable access to edge weights for edges from or to a
.
Sourcepub fn all_edge_weights(&self) -> AllEdgeWeights<'_, E> ⓘ
pub fn all_edge_weights(&self) -> AllEdgeWeights<'_, E> ⓘ
Returns an iterator yielding immutable access to all edge weights.
The order in which weights are yielded matches the order of their edge indices.
Sourcepub fn all_edge_weights_mut(&mut self) -> AllEdgeWeightsMut<'_, E> ⓘ
pub fn all_edge_weights_mut(&mut self) -> AllEdgeWeightsMut<'_, E> ⓘ
Returns an iterator yielding mutable access to all edge weights.
The order in which weights are yielded matches the order of their edge indices.
Sourcepub fn raw_nodes_mut(&mut self) -> &mut [Node<N>]
pub fn raw_nodes_mut(&mut self) -> &mut [Node<N>]
Accesses the internal node array mutably.
Sourcepub fn raw_edges_mut(&mut self) -> &mut [Edge<E>]
pub fn raw_edges_mut(&mut self) -> &mut [Edge<E>]
Accesses the internal edge array mutably.
Sourcepub fn first_edge(&self, a: NodeIndex, dir: EdgeDirection) -> Option<EdgeIndex>
pub fn first_edge(&self, a: NodeIndex, dir: EdgeDirection) -> Option<EdgeIndex>
Accessor for data structure internals: returns the first edge in the given direction.
Sourcepub fn next_edge(&self, e: EdgeIndex, dir: EdgeDirection) -> Option<EdgeIndex>
pub fn next_edge(&self, e: EdgeIndex, dir: EdgeDirection) -> Option<EdgeIndex>
Accessor for data structure internals: returns the next edge for the given direction.
Sourcepub fn clear_edges(&mut self)
pub fn clear_edges(&mut self)
Removes all edges.
Sourcepub fn nodes_capacity(&self) -> usize
pub fn nodes_capacity(&self) -> usize
Returns the current node capacity of the graph.
Sourcepub fn edges_capacity(&self) -> usize
pub fn edges_capacity(&self) -> usize
Returns the current edge capacity of the graph.
Sourcepub fn reserve_nodes(&mut self, additional: usize)
pub fn reserve_nodes(&mut self, additional: usize)
Reserves capacity for at least additional
more nodes to be inserted in
the graph. Graph may reserve more space to avoid frequent reallocations.
§Panics
Panics if the new capacity overflows usize
.
Sourcepub fn reserve_edges(&mut self, additional: usize)
pub fn reserve_edges(&mut self, additional: usize)
Reserves capacity for at least additional
more edges to be inserted in
the graph. Graph may reserve more space to avoid frequent reallocations.
§Panics
Panics if the new capacity overflows usize
.
Sourcepub fn retain_nodes<F>(&mut self, visit: F)
pub fn retain_nodes<F>(&mut self, visit: F)
Keep all nodes that return true
from the visit
closure,
remove the others.
visit
is provided a proxy reference to the graph, so that
the graph can be walked and associated data modified.
The order nodes are visited is not specified.
Sourcepub fn retain_edges<F>(&mut self, visit: F)
pub fn retain_edges<F>(&mut self, visit: F)
Keep all edges that return true
from the visit
closure,
remove the others.
visit
is provided a proxy reference to the graph, so that
the graph can be walked and associated data modified.
The order edges are visited is not specified.
Trait Implementations§
Source§impl<N, E> Index<EdgeIndex> for UnGraph<N, E>
Indexes the UnGraph
by EdgeIndex
to access edge weights.
impl<N, E> Index<EdgeIndex> for UnGraph<N, E>
Indexes the UnGraph
by EdgeIndex
to access edge weights.
§Panics
Panics if the edge doesn’t exist.
Source§impl<N, E> Index<NodeIndex> for UnGraph<N, E>
Indexes the UnGraph
by NodeIndex
to access node weights.
impl<N, E> Index<NodeIndex> for UnGraph<N, E>
Indexes the UnGraph
by NodeIndex
to access node weights.
§Panics
Panics if the node doesn’t exist.
Auto Trait Implementations§
impl<N, E> Freeze for UnGraph<N, E>
impl<N, E> RefUnwindSafe for UnGraph<N, E>where
N: RefUnwindSafe,
E: RefUnwindSafe,
impl<N, E> Send for UnGraph<N, E>
impl<N, E> Sync for UnGraph<N, E>
impl<N, E> Unpin for UnGraph<N, E>
impl<N, E> UnwindSafe for UnGraph<N, E>where
N: UnwindSafe,
E: UnwindSafe,
Blanket Implementations§
Source§impl<T, U> AsBindGroupShaderType<U> for T
impl<T, U> AsBindGroupShaderType<U> for T
Source§fn as_bind_group_shader_type(&self, _images: &RenderAssets<GpuImage>) -> U
fn as_bind_group_shader_type(&self, _images: &RenderAssets<GpuImage>) -> U
T
ShaderType
for self
. When used in AsBindGroup
derives, it is safe to assume that all images in self
exist.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> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
Source§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
Box<dyn Trait>
(where Trait: Downcast
) to Box<dyn Any>
. Box<dyn Any>
can
then be further downcast
into Box<ConcreteType>
where ConcreteType
implements Trait
.Source§fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
Rc<Trait>
(where Trait: Downcast
) to Rc<Any>
. Rc<Any>
can then be
further downcast
into Rc<ConcreteType>
where ConcreteType
implements Trait
.Source§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
&Trait
(where Trait: Downcast
) to &Any
. This is needed since Rust cannot
generate &Any
’s vtable from &Trait
’s.Source§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
&mut Trait
(where Trait: Downcast
) to &Any
. This is needed since Rust cannot
generate &mut Any
’s vtable from &mut Trait
’s.Source§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
Source§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
Box<dyn Trait>
(where Trait: Downcast
) to Box<dyn Any>
, which can then be
downcast
into Box<dyn ConcreteType>
where ConcreteType
implements Trait
.Source§fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
Rc<Trait>
(where Trait: Downcast
) to Rc<Any>
, which can then be further
downcast
into Rc<ConcreteType>
where ConcreteType
implements Trait
.Source§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
&Trait
(where Trait: Downcast
) to &Any
. This is needed since Rust cannot
generate &Any
’s vtable from &Trait
’s.Source§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
&mut Trait
(where Trait: Downcast
) to &Any
. This is needed since Rust cannot
generate &mut Any
’s vtable from &mut Trait
’s.Source§impl<T> DowncastSend for T
impl<T> DowncastSend for T
Source§impl<T> DowncastSync for T
impl<T> DowncastSync for T
Source§impl<T> FromWorld for Twhere
T: Default,
impl<T> FromWorld for Twhere
T: Default,
Source§fn from_world(_world: &mut World) -> T
fn from_world(_world: &mut World) -> T
Creates Self
using default()
.
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<SS, SP> SupersetOf<SS> for SPwhere
SS: SubsetOf<SP>,
impl<SS, SP> SupersetOf<SS> for SPwhere
SS: SubsetOf<SP>,
Source§fn to_subset(&self) -> Option<SS>
fn to_subset(&self) -> Option<SS>
self
from the equivalent element of its
superset. Read moreSource§fn is_in_subset(&self) -> bool
fn is_in_subset(&self) -> bool
self
is actually part of its subset T
(and can be converted to it).Source§fn to_subset_unchecked(&self) -> SS
fn to_subset_unchecked(&self) -> SS
self.to_subset
but without any property checks. Always succeeds.Source§fn from_subset(element: &SS) -> SP
fn from_subset(element: &SS) -> SP
self
to the equivalent element of its superset.