pub struct StableUnGraph<N, E> { /* private fields */ }
Expand description
A graph with undirected edges and stable indices.
Unlike UnGraph
, this graph does not invalidate any unrelated
node or edge indices when items are removed. Removed nodes and edges
are replaced with vacant slots, which can be reused later in order
of lowest index first.
Implementations§
Source§impl<N, E> StableUnGraph<N, E>
impl<N, E> StableUnGraph<N, E>
Sourcepub fn with_capacity(nodes: usize, edges: usize) -> Self
pub fn with_capacity(nodes: usize, edges: usize) -> Self
Creates a new StableUnGraph
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 or the graph is at the maximum number of edges.
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>
pub fn remove_node_with<F>( &mut self, a: NodeIndex, edge_callback: F, ) -> Option<N>
Removes a
from the graph if it exists, calling edge_callback
for each of its edges
right before removal, and returns its weight. If it doesn’t exist in the graph, returns None
.
Invalidates the node index a
, but not any other indices.
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.
Invalidates the edge index e
, but not any other indices.
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_between(&self, a: NodeIndex, b: NodeIndex) -> EdgesBetween<'_, E> ⓘ
pub fn edges_between(&self, a: NodeIndex, b: NodeIndex) -> EdgesBetween<'_, E> ⓘ
Returns an iterator over all edges between a
and b
.
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 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,
) -> FilterMap<EdgeWeightsMut<'_, Option<N>, Option<E>>, fn(&mut Option<E>) -> Option<&mut E>> ⓘwhere
N: Copy,
pub fn edge_weights_mut(
&mut self,
a: NodeIndex,
) -> FilterMap<EdgeWeightsMut<'_, Option<N>, Option<E>>, fn(&mut Option<E>) -> Option<&mut E>> ⓘwhere
N: Copy,
Returns an iterator yielding mutable access to edge weights for edges from or to a
.
Sourcepub fn all_edge_weights(&self) -> impl Iterator<Item = &E>
pub fn all_edge_weights(&self) -> impl Iterator<Item = &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) -> impl Iterator<Item = &mut E>
pub fn all_edge_weights_mut(&mut self) -> impl Iterator<Item = &mut 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_edges(&self) -> &[Edge<Option<E>>]
pub fn raw_edges(&self) -> &[Edge<Option<E>>]
Accesses the internal edge array.
Note that this also includes vacant edges.
Sourcepub fn raw_edges_mut(&mut self) -> &mut [Edge<Option<E>>]
pub fn raw_edges_mut(&mut self) -> &mut [Edge<Option<E>>]
Accesses the internal edge array mutably.
Note that this also includes vacant edges.
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.
Trait Implementations§
Source§impl<N: Clone, E: Clone> Clone for StableUnGraph<N, E>
impl<N: Clone, E: Clone> Clone for StableUnGraph<N, E>
Source§fn clone(&self) -> StableUnGraph<N, E>
fn clone(&self) -> StableUnGraph<N, E>
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source
. Read moreAuto Trait Implementations§
impl<N, E> Freeze for StableUnGraph<N, E>
impl<N, E> RefUnwindSafe for StableUnGraph<N, E>where
N: RefUnwindSafe,
E: RefUnwindSafe,
impl<N, E> Send for StableUnGraph<N, E>
impl<N, E> Sync for StableUnGraph<N, E>
impl<N, E> Unpin for StableUnGraph<N, E>
impl<N, E> UnwindSafe for StableUnGraph<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>
, 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, W> HasTypeWitness<W> for Twhere
W: MakeTypeWitness<Arg = T>,
T: ?Sized,
impl<T, W> HasTypeWitness<W> for Twhere
W: MakeTypeWitness<Arg = T>,
T: ?Sized,
Source§impl<T> Identity for Twhere
T: ?Sized,
impl<T> Identity for Twhere
T: ?Sized,
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> IntoResult<T> for T
impl<T> IntoResult<T> for T
Source§fn into_result(self) -> Result<T, RunSystemError>
fn into_result(self) -> Result<T, RunSystemError>
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.