Struct StableUnGraph

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

Source

pub fn with_capacity(nodes: usize, edges: usize) -> Self

Creates a new StableUnGraph with estimated capacity.

Source

pub fn node_count(&self) -> usize

Returns the number of nodes in the graph.

Computes in O(1) time.

Source

pub fn edge_count(&self) -> usize

Returns the number of edges in the graph.

Computes in O(1) time.

Source

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.

Source

pub fn node_weight(&self, a: NodeIndex) -> Option<&N>

Accesses the weight for node a.

Also available with indexing syntax: &graph[a].

Source

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.

Source

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.

Source

pub fn edge_weight(&self, e: EdgeIndex) -> Option<&E>

Accesses the weight for edge e.

Also available with indexing syntax: &graph[e].

Source

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].

Source

pub fn edge_endpoints(&self, e: EdgeIndex) -> Option<(NodeIndex, NodeIndex)>

Accesses the source and target nodes for e.

Source

pub fn remove_node_with<F>( &mut self, a: NodeIndex, edge_callback: F, ) -> Option<N>
where F: FnMut(&mut Self, EdgeIndex),

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.

Source

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.

Source

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.

Source

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

Source

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

Source

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).

Source

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).

Source

pub fn edge_weights(&self, a: NodeIndex) -> EdgeWeights<'_, E>

Returns an iterator yielding immutable access to edge weights for edges from or to a.

Source

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.

Source

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.

Source

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.

Source

pub fn raw_edges(&self) -> &[Edge<Option<E>>]

Accesses the internal edge array.

Note that this also includes vacant edges.

Source

pub fn raw_edges_mut(&mut self) -> &mut [Edge<Option<E>>]

Accesses the internal edge array mutably.

Note that this also includes vacant edges.

Source

pub fn clear(&mut self)

Removes all nodes and edges.

Source

pub fn clear_edges(&mut self)

Removes all edges.

Source

pub fn nodes_capacity(&self) -> usize

Returns the current node capacity of the graph.

Source

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>

Source§

fn clone(&self) -> StableUnGraph<N, E>

Returns a duplicate 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<N: Debug, E: Debug> Debug for StableUnGraph<N, E>

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl<N, E> Default for StableUnGraph<N, E>

Source§

fn default() -> Self

Returns the “default value” for a type. Read more

Auto Trait Implementations§

§

impl<N, E> Freeze for StableUnGraph<N, E>

§

impl<N, E> RefUnwindSafe for StableUnGraph<N, E>

§

impl<N, E> Send for StableUnGraph<N, E>
where N: Send, E: Send,

§

impl<N, E> Sync for StableUnGraph<N, E>
where N: Sync, E: Sync,

§

impl<N, E> Unpin for StableUnGraph<N, E>
where N: Unpin, E: Unpin,

§

impl<N, E> UnwindSafe for StableUnGraph<N, E>
where N: UnwindSafe, E: UnwindSafe,

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T, U> AsBindGroupShaderType<U> for T
where U: ShaderType, &'a T: for<'a> Into<U>,

Source§

fn as_bind_group_shader_type(&self, _images: &RenderAssets<GpuImage>) -> U

Return the T ShaderType for self. When used in AsBindGroup derives, it is safe to assume that all images in self exist.
Source§

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

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

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

Source§

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

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> Downcast for T
where T: Any,

Source§

fn into_any(self: Box<T>) -> Box<dyn Any>

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

Converts 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)

Converts &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)

Converts &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
where T: Any + Send,

Source§

fn into_any_send(self: Box<T>) -> Box<dyn Any + Send>

Converts Box<Trait> (where Trait: DowncastSend) to Box<dyn Any + Send>, which can then be downcast into Box<ConcreteType> where ConcreteType implements Trait.
Source§

impl<T> DowncastSync for T
where T: Any + Send + Sync,

Source§

fn into_any_sync(self: Box<T>) -> Box<dyn Any + Sync + Send>

Converts Box<Trait> (where Trait: DowncastSync) to Box<dyn Any + Send + Sync>, which can then be downcast into Box<ConcreteType> where ConcreteType implements Trait.
Source§

fn into_any_arc(self: Arc<T>) -> Arc<dyn Any + Sync + Send>

Converts Arc<Trait> (where Trait: DowncastSync) to Arc<Any>, which can then be downcast into Arc<ConcreteType> where ConcreteType implements Trait.
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> FromWorld for T
where T: Default,

Source§

fn from_world(_world: &mut World) -> T

Creates Self using default().

Source§

impl<T, W> HasTypeWitness<W> for T
where W: MakeTypeWitness<Arg = T>, T: ?Sized,

Source§

const WITNESS: W = W::MAKE

A constant of the type witness
Source§

impl<T> Identity for T
where T: ?Sized,

Source§

const TYPE_EQ: TypeEq<T, <T as Identity>::Type> = TypeEq::NEW

Proof that Self is the same type as Self::Type, provides methods for casting between Self and Self::Type.
Source§

type Type = T

The same type as Self, used to emulate type equality bounds (T == U) with associated type equality constraints (T: Identity<Type = U>).
Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where 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> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts 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 more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts 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 more
Source§

impl<T> IntoResult<T> for T

Source§

fn into_result(self) -> Result<T, RunSystemError>

Converts this type into the system output type.
Source§

impl<A> Is for A
where A: Any,

Source§

fn is<T>() -> bool
where T: Any,

Checks if the current type “is” another type, using a TypeId equality comparison. This is most useful in the context of generic logic. Read more
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<SS, SP> SupersetOf<SS> for SP
where SS: SubsetOf<SP>,

Source§

fn to_subset(&self) -> Option<SS>

The inverse inclusion map: attempts to construct self from the equivalent element of its superset. Read more
Source§

fn is_in_subset(&self) -> bool

Checks if self is actually part of its subset T (and can be converted to it).
Source§

fn to_subset_unchecked(&self) -> SS

Use with care! Same as self.to_subset but without any property checks. Always succeeds.
Source§

fn from_subset(element: &SS) -> SP

The inclusion map: converts self to the equivalent element of its superset.
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

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 T
where U: Into<T>,

Source§

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 T
where U: TryFrom<T>,

Source§

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<T> TypeData for T
where T: 'static + Send + Sync + Clone,

Source§

fn clone_type_data(&self) -> Box<dyn TypeData>

Creates a type-erased clone of this value.
Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

impl<T> ConditionalSend for T
where T: Send,

Source§

impl<T> Settings for T
where T: 'static + Send + Sync,

Source§

impl<T> WasmNotSend for T
where T: Send,

Source§

impl<T> WasmNotSendSync for T

Source§

impl<T> WasmNotSync for T
where T: Sync,