Graph

Struct Graph 

Source
pub struct Graph<GData, NData, EData>
where GData: Clone + 'static, NData: Clone + 'static, EData: Clone + 'static,
{ /* private fields */ }
Expand description

A general graph data structure with value semantics.

The graph is parameterized by three types:

  • GData is the type of the graph data.
  • NData is the type of the node data.
  • EData is the type of the edge data.

The graph is implemented as a set of nodes and edges. Nodes are identified by unique NodeID values, and edges are identified by unique EdgeID values. The graph and its nodes and edges can have associated data, or they can be the unit type ().

Implementations§

Source§

impl<GData, NData, EData> Graph<GData, NData, EData>
where GData: Clone + 'static, NData: Clone + 'static, EData: Clone + 'static,

Source

pub fn new_with_data(data: GData) -> Self

Source§

impl<GData, NData, EData> Graph<GData, NData, EData>
where GData: Clone + Default + 'static, NData: Clone + 'static, EData: Clone + 'static,

Source

pub fn new() -> Self

Source§

impl<GData, NData, EData> Graph<GData, NData, EData>
where GData: Clone + Serialize + 'static, NData: Clone + Serialize + 'static, EData: Clone + Serialize + 'static,

Source

pub fn to_json(&self) -> String

Source§

impl<'de, GData, NData, EData> Graph<GData, NData, EData>
where GData: Clone + Default + Deserialize<'de> + 'static, NData: Clone + Default + Deserialize<'de> + 'static, EData: Clone + Default + Deserialize<'de> + 'static,

Source

pub fn from_json(json: &'de str) -> Result<Self, Error>

Trait Implementations§

Source§

impl<GData, NData, EData> Clone for Graph<GData, NData, EData>
where GData: Clone + 'static + Clone, NData: Clone + 'static + Clone, EData: Clone + 'static + Clone,

Source§

fn clone(&self) -> Graph<GData, NData, EData>

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<GData, NData, EData> Debug for Graph<GData, NData, EData>
where GData: Clone + 'static + Debug, NData: Clone + 'static + Debug, EData: Clone + 'static + Debug,

Source§

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

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

impl<GData, NData, EData> Default for Graph<GData, NData, EData>
where GData: Clone + Default + 'static, NData: Clone + 'static, EData: Clone + 'static,

Source§

fn default() -> Self

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

impl<'de, GData, NData, EData> Deserialize<'de> for Graph<GData, NData, EData>
where GData: Clone + Deserialize<'de> + 'static + Default, NData: Clone + Deserialize<'de> + 'static + Default, EData: Clone + Deserialize<'de> + 'static + Default,

Source§

fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
where D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
Source§

impl<GData, NData, EData> Display for Graph<GData, NData, EData>
where GData: Clone + Serialize + 'static, NData: Clone + Serialize + 'static, EData: Clone + Serialize + 'static,

Source§

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

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

impl<GData, NData, EData> MutableGraph for Graph<GData, NData, EData>
where GData: Clone + 'static, NData: Clone + 'static, EData: Clone + 'static,

Source§

fn add_node_with_data( &mut self, id: impl AsRef<NodeID>, data: NData, ) -> Result<()>

Source§

fn add_edge_with_data( &mut self, id: impl AsRef<EdgeID>, source: impl AsRef<NodeID>, target: impl AsRef<NodeID>, data: Self::EData, ) -> Result<()>

Source§

fn remove_edge(&mut self, id: impl AsRef<EdgeID>) -> Result<()>

Source§

fn clear_edges(&mut self, id: impl AsRef<NodeID>) -> Result<()>

Source§

fn remove_node(&mut self, id: impl AsRef<NodeID>) -> Result<()>

Source§

fn move_edge( &mut self, id: impl AsRef<EdgeID>, new_source: impl AsRef<NodeID>, new_target: impl AsRef<NodeID>, ) -> Result<()>

Source§

fn set_data(&mut self, data: GData)

Source§

fn set_node_data(&mut self, id: impl AsRef<NodeID>, data: NData) -> Result<()>

Source§

fn set_edge_data(&mut self, id: impl AsRef<EdgeID>, data: EData) -> Result<()>

Source§

fn with_data(&mut self, transform: &dyn Fn(&mut Self::GData))

Source§

fn with_node_data( &mut self, id: impl AsRef<NodeID>, transform: &dyn Fn(&mut Self::NData), ) -> Result<()>

Source§

fn with_edge_data( &mut self, id: impl AsRef<EdgeID>, transform: &dyn Fn(&mut Self::EData), ) -> Result<()>

Source§

fn adding_node_with_data( &self, id: impl AsRef<NodeID>, data: Self::NData, ) -> Result<Self>
where Self: Clone + Sized,

Source§

fn add_node(&mut self, id: impl AsRef<NodeID>) -> Result<()>
where Self::NData: Default,

Source§

fn adding_node(&self, id: impl AsRef<NodeID>) -> Result<Self>
where Self: Clone + Sized, Self::NData: Default,

Source§

fn adding_edge_with_data( &self, id: impl AsRef<EdgeID>, source: impl AsRef<NodeID>, target: impl AsRef<NodeID>, data: Self::EData, ) -> Result<Self>
where Self: Clone + Sized,

Source§

fn add_edge( &mut self, id: impl AsRef<EdgeID>, source: impl AsRef<NodeID>, target: impl AsRef<NodeID>, ) -> Result<()>
where Self::EData: Default,

Source§

fn adding_edge( &self, id: impl AsRef<EdgeID>, source: impl AsRef<NodeID>, target: impl AsRef<NodeID>, ) -> Result<Self>
where Self: Clone + Sized, Self::EData: Default,

Source§

fn removing_edge(&self, id: impl AsRef<EdgeID>) -> Result<Self>
where Self: Clone + Sized,

Source§

fn clearing_edges(&self, id: impl AsRef<NodeID>) -> Result<Self>
where Self: Clone + Sized,

Source§

fn removing_node(&self, id: impl AsRef<NodeID>) -> Result<Self>
where Self: Clone + Sized,

Source§

fn moving_edge( &self, id: impl AsRef<EdgeID>, new_source: impl AsRef<NodeID>, new_target: impl AsRef<NodeID>, ) -> Result<Self>
where Self: Clone + Sized,

Source§

fn setting_data(&self, data: Self::GData) -> Self
where Self: Clone + Sized,

Source§

fn setting_node_data( &self, id: impl AsRef<NodeID>, data: Self::NData, ) -> Result<Self>
where Self: Clone + Sized,

Source§

fn setting_edge_data( &self, id: impl AsRef<EdgeID>, data: Self::EData, ) -> Result<Self>
where Self: Clone + Sized,

Source§

impl<GData, NData, EData> PartialEq for Graph<GData, NData, EData>
where GData: Clone + PartialEq + 'static, NData: Clone + PartialEq + 'static, EData: Clone + PartialEq + 'static,

Source§

fn eq(&self, other: &Self) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
Source§

impl<GData, NData, EData> Serialize for Graph<GData, NData, EData>
where GData: Clone + Serialize + 'static, NData: Clone + Serialize + 'static, EData: Clone + Serialize + 'static,

Source§

fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
where S: Serializer,

Serialize this value into the given Serde serializer. Read more
Source§

impl<GData, NData, EData> VisitableGraph for Graph<GData, NData, EData>
where GData: Clone + 'static, NData: Clone + 'static, EData: Clone + 'static,

Source§

type GData = GData

Source§

type NData = NData

Source§

type EData = EData

Source§

fn is_empty(&self) -> bool

Returns true if the graph is empty.
Source§

fn node_count(&self) -> usize

Returns the number of nodes in the graph.
Source§

fn edge_count(&self) -> usize

Returns the number of edges in the graph.
Source§

fn all_nodes(&self) -> Nodes

Returns a set of all nodes in the graph.
Source§

fn all_edges(&self) -> Edges

Returns a set of all edges in the graph.
Source§

fn has_node(&self, id: impl AsRef<NodeID>) -> bool

Returns true if the graph contains the given node.
Source§

fn has_edge(&self, id: impl AsRef<EdgeID>) -> bool

Returns true if the graph contains the given edge.
Source§

fn has_edge_from_to( &self, source: impl AsRef<NodeID>, target: impl AsRef<NodeID>, ) -> bool

Returns true if the graph contains an edge from source to target.
Source§

fn has_edge_between(&self, a: impl AsRef<NodeID>, b: impl AsRef<NodeID>) -> bool

Returns true if the graph contains an edge between a and b, regardless of direction.
Source§

fn source(&self, id: impl AsRef<EdgeID>) -> Result<NodeID>

Returns the source node of the edge.
Source§

fn target(&self, id: impl AsRef<EdgeID>) -> Result<NodeID>

Returns the target node of the edge.
Source§

fn endpoints(&self, id: impl AsRef<EdgeID>) -> Result<(NodeID, NodeID)>

Returns the endpoints of the edge.
Source§

fn out_edges(&self, id: impl AsRef<NodeID>) -> Result<Edges>

Returns the out-edges of the node.
Source§

fn in_edges(&self, id: impl AsRef<NodeID>) -> Result<Edges>

Returns the in-edges of the node.
Source§

fn incident_edges(&self, id: impl AsRef<NodeID>) -> Result<Edges>

Returns the incident edges of the node.
Source§

fn out_degree(&self, id: impl AsRef<NodeID>) -> Result<usize>

Returns the number of out-edges of the node.
Source§

fn in_degree(&self, id: impl AsRef<NodeID>) -> Result<usize>

Returns the number of in-edges of the node.
Source§

fn degree(&self, id: impl AsRef<NodeID>) -> Result<usize>

Returns the number of incident edges of the node.
Source§

fn successors(&self, id: impl AsRef<NodeID>) -> Result<Nodes>

Returns the immediate successors of the node.
Source§

fn predecessors(&self, id: impl AsRef<NodeID>) -> Result<Nodes>

Returns the immediate predecessors of the node.
Source§

fn neighbors(&self, id: impl AsRef<NodeID>) -> Result<Nodes>

Returns the immediate neighbors of the node.
Source§

fn has_successors(&self, id: impl AsRef<NodeID>) -> Result<bool>

Returns true if the node has successors.
Source§

fn has_predecessors(&self, id: impl AsRef<NodeID>) -> Result<bool>

Returns true if the node has predecessors.
Source§

fn has_neighbors(&self, id: impl AsRef<NodeID>) -> Result<bool>

Returns true if the node has neighbors.
Source§

fn data(&self) -> &GData

Returns a reference to the graph’s data.
Source§

fn node_data(&self, id: impl AsRef<NodeID>) -> Result<Cow<'static, NData>>

Returns a reference to the node’s data.
Source§

fn edge_data(&self, id: impl AsRef<EdgeID>) -> Result<Cow<'static, EData>>

Returns a reference to the edge’s data.
Source§

fn all_roots(&self) -> Nodes

The set of all “roots” (nodes with no predecessors) in the graph.
Source§

fn all_leaves(&self) -> Nodes

The set of all “leaves” (nodes with no successors) in the graph.
Source§

fn non_roots(&self) -> Nodes

The set of all nodes that are not roots (i.e., nodes with at least one predecessor).
Source§

fn non_leaves(&self) -> Nodes

The set of all nodes that are not leaves (i.e., nodes with at least one successor).
Source§

fn all_internals(&self) -> Nodes

The set of all nodes that are neither roots nor leaves (i.e., nodes with at least one predecessor and at least one successor).
Source§

fn is_leaf(&self, id: impl AsRef<NodeID>) -> Result<bool>

Returns true if the node is a leaf (i.e., has no successors).
Source§

fn is_root(&self, id: impl AsRef<NodeID>) -> Result<bool>

Returns true if the node is a root (i.e., has no predecessors).
Source§

fn is_internal(&self, id: impl AsRef<NodeID>) -> Result<bool>

Returns true if the node is neither a root nor a leaf (i.e., has at least one predecessor and at least one successor).
Source§

fn elements(&self) -> Elements

Returns the set of all elements in the graph.
Source§

fn edges_from_to( &self, source: impl AsRef<NodeID>, target: impl AsRef<NodeID>, ) -> Result<Edges>

Returns the edges that have the given source and target nodes. Read more
Source§

fn edges_between( &self, a: impl AsRef<NodeID>, b: impl AsRef<NodeID>, ) -> Result<Edges>

Returns the edges that have the given nodes as endpoints. Read more
Source§

fn edges_from_to_nodes(&self, sources: &Nodes, targets: &Nodes) -> Result<Edges>

Returns the edges connecting the given source nodes to the given target nodes.
Source§

fn edges_between_nodes(&self, a: &Nodes, b: &Nodes) -> Result<Edges>

Returns the edges connecting the given sets of nodes.
Source§

fn nodes_successors(&self, ids: &Nodes) -> Result<Nodes>

Returns the immediate successors of all the given nodes.
Source§

fn nodes_predecessors(&self, ids: &Nodes) -> Result<Nodes>

Returns the immediate predecessors of all the given nodes.
Source§

fn transitive_successors(&self, ids: &Nodes) -> Result<Nodes>

Returns the transitive successors of all the given nodes (i.e., all the nodes reachable from the out-edges of the given nodes). Read more
Source§

fn transitive_predecessors(&self, ids: &Nodes) -> Result<Nodes>

Returns the transitive predecessors of all the given nodes (i.e., all the nodes reachable from the in-edges of the given nodes). Read more

Auto Trait Implementations§

§

impl<GData, NData, EData> Freeze for Graph<GData, NData, EData>
where GData: Freeze,

§

impl<GData, NData, EData> RefUnwindSafe for Graph<GData, NData, EData>
where GData: RefUnwindSafe,

§

impl<GData, NData, EData> Send for Graph<GData, NData, EData>
where GData: Send + Sync, NData: Send + Sync, EData: Send + Sync,

§

impl<GData, NData, EData> Sync for Graph<GData, NData, EData>
where GData: Sync, NData: Send + Sync, EData: Send + Sync,

§

impl<GData, NData, EData> Unpin for Graph<GData, NData, EData>
where GData: Unpin,

§

impl<GData, NData, EData> UnwindSafe for Graph<GData, NData, EData>
where GData: UnwindSafe + RefUnwindSafe,

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> 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<G, O> DepthFirstSearch<G, O> for G
where G: VisitableGraph,

Source§

fn depth_first_search_opt<Visitor>( &self, visitor: &mut Visitor, roots: &BTreeSet<NodeID>, roots_only: bool, excluded_edge: Option<impl AsRef<EdgeID>>, ) -> Result<O, Error>
where Visitor: DFSVisitor<Graph = G, Output = O>,

Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

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<G> IsTree for G

Source§

type Graph = G

Source§

fn is_tree(&self, root: impl AsRef<NodeID>) -> bool

Source§

fn check_is_tree(&self, root: impl AsRef<NodeID>) -> Result<()>

Source§

impl<G> PathExists for G

Source§

type Graph = G

Source§

fn path_exists_opt( &self, from: impl AsRef<NodeID>, to: impl AsRef<NodeID>, excluded_edge: Option<impl AsRef<EdgeID>>, ) -> Result<bool, Error>

Source§

fn path_exists( &self, from: impl AsRef<NodeID>, to: impl AsRef<NodeID>, ) -> Result<bool>

Source§

fn can_add_dag_edge( &self, from: impl AsRef<NodeID>, to: impl AsRef<NodeID>, excluded_edge: Option<impl AsRef<EdgeID>>, ) -> Result<bool>

Source§

fn can_move_dag_edge( &self, edge: impl AsRef<EdgeID>, new_source: impl AsRef<NodeID>, new_target: impl AsRef<NodeID>, ) -> Result<bool>

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> ToString for T
where T: Display + ?Sized,

Source§

fn to_string(&self) -> String

Converts the given value to a String. Read more
Source§

impl<G> TopologicalSort for G
where G: VisitableGraph,

Source§

type Graph = G

Source§

fn topological_sort_opt( &self, roots: &BTreeSet<NodeID>, roots_only: bool, ) -> Result<Vec<NodeID>, Error>

Returns reverse-order of topological sort.
Source§

fn topological_sort(&self) -> Result<Vec<NodeID>>

Returns reverse-order of topological sort.
Source§

fn is_dag(&self) -> bool

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> DeserializeOwned for T
where T: for<'de> Deserialize<'de>,