pub struct OwningGraph<NodeId: Identifier, EdgeId: Identifier, NodeData, EdgeData> { /* private fields */ }Expand description
An example Graph implementation with usize identifiers and simple payloads, used in tests.
Implementations§
Source§impl<NodeId: Identifier, EdgeId: Identifier, NodeData, EdgeData> OwningGraph<NodeId, EdgeId, NodeData, EdgeData>
impl<NodeId: Identifier, EdgeId: Identifier, NodeData, EdgeData> OwningGraph<NodeId, EdgeId, NodeData, EdgeData>
Sourcepub fn make_node(&mut self, data: NodeData) -> NodeId
pub fn make_node(&mut self, data: NodeData) -> NodeId
Creates a new node
Creates a new node with payload data and returns its identifier.
Sourcepub fn make_edge(&mut self, from: NodeId, to: NodeId, data: EdgeData) -> EdgeId
pub fn make_edge(&mut self, from: NodeId, to: NodeId, data: EdgeData) -> EdgeId
Creates a new edge from from to to with payload data.
§Panics
Panics if either endpoint does not exist.
Sourcepub fn remove_edge(&mut self, id: EdgeId)
pub fn remove_edge(&mut self, id: EdgeId)
Sourcepub fn edit_edge(&mut self, id: EdgeId, new_from: NodeId, new_to: NodeId)
pub fn edit_edge(&mut self, id: EdgeId, new_from: NodeId, new_to: NodeId)
Edits an edge’s endpoints
Sourcepub fn remove_node(&mut self, id: NodeId)
pub fn remove_node(&mut self, id: NodeId)
Sourcepub fn reinterpret<NewNodeData, NewEdgeData, Fn, Fe>(
&self,
node_data_map: Fn,
edge_data_map: Fe,
) -> OwningGraph<NodeId, EdgeId, NewNodeData, NewEdgeData>
pub fn reinterpret<NewNodeData, NewEdgeData, Fn, Fe>( &self, node_data_map: Fn, edge_data_map: Fe, ) -> OwningGraph<NodeId, EdgeId, NewNodeData, NewEdgeData>
Returns an iterator over the immediate successor blocks — blocks that this block may transfer control to.
Source§impl<'src, NodeId: Identifier, EdgeId: Identifier> OwningGraph<NodeId, EdgeId, &'src str, &'src str>
impl<'src, NodeId: Identifier, EdgeId: Identifier> OwningGraph<NodeId, EdgeId, &'src str, &'src str>
pub fn parse(source: &'src str) -> Result<Self, ParseError<'src>>
pub fn get_node_by_name(&self, name: &str) -> Option<NodeId>
pub fn get_edge_by_data(&self, data: &str) -> Option<EdgeId>
Trait Implementations§
Source§impl<NodeId: Identifier, EdgeId: Identifier, NodeData, EdgeData> Default for OwningGraph<NodeId, EdgeId, NodeData, EdgeData>
impl<NodeId: Identifier, EdgeId: Identifier, NodeData, EdgeData> Default for OwningGraph<NodeId, EdgeId, NodeData, EdgeData>
Source§impl<NodeId: Identifier, EdgeId: Identifier, NodeData, EdgeData> Graph for OwningGraph<NodeId, EdgeId, NodeData, EdgeData>
impl<NodeId: Identifier, EdgeId: Identifier, NodeData, EdgeData> Graph for OwningGraph<NodeId, EdgeId, NodeData, EdgeData>
type NodeId = NodeId
type EdgeId = EdgeId
Source§type Hasher = RandomState
type Hasher = RandomState
Hasher backing the graph’s incident-edge sets and DFS bookkeeping. Read more
type Node<'a> = NodeRef<'a, NodeId, EdgeId, NodeData, EdgeData> where Self: 'a
type Edge<'a> = EdgeRef<'a, NodeId, EdgeId, NodeData, EdgeData> where Self: 'a
Source§fn get_node(&self, id: Self::NodeId) -> Option<Self::Node<'_>>
fn get_node(&self, id: Self::NodeId) -> Option<Self::Node<'_>>
Gets a node in the graph by its identifier, if it exists.
fn get_edge(&self, id: Self::EdgeId) -> Option<Self::Edge<'_>>
Source§fn nodes(&self) -> impl Iterator<Item = Self::Node<'_>> + '_
fn nodes(&self) -> impl Iterator<Item = Self::Node<'_>> + '_
Iterates over all nodes in insertion identifier order.
Source§fn edges(&self) -> impl Iterator<Item = Self::Edge<'_>> + '_
fn edges(&self) -> impl Iterator<Item = Self::Edge<'_>> + '_
Iterates over all edges in insertion identifier order.
Source§fn dfs(&self, root: Self::NodeId) -> DfsIter<'_, Directed, Self> ⓘwhere
Self: Sized,
fn dfs(&self, root: Self::NodeId) -> DfsIter<'_, Directed, Self> ⓘwhere
Self: Sized,
A dfs iterator over the graph starting from the root, if present.
Source§fn undirected_dfs(&self, root: Self::NodeId) -> DfsIter<'_, Undirected, Self> ⓘwhere
Self: Sized,
fn undirected_dfs(&self, root: Self::NodeId) -> DfsIter<'_, Undirected, Self> ⓘwhere
Self: Sized,
A dfs iterator over the graph treating edges as undirected.
Source§impl<NodeId: Identifier, EdgeId: Identifier, NodeData, EdgeData> GraphMut for OwningGraph<NodeId, EdgeId, NodeData, EdgeData>
impl<NodeId: Identifier, EdgeId: Identifier, NodeData, EdgeData> GraphMut for OwningGraph<NodeId, EdgeId, NodeData, EdgeData>
type NodeMut<'a> = NodeMutRef<'a, NodeId, EdgeId, NodeData, EdgeData> where Self: 'a
type EdgeMut<'a> = EdgeMutRef<'a, NodeId, EdgeId, NodeData, EdgeData> where Self: 'a
fn get_node_mut(&mut self, id: Self::NodeId) -> Option<Self::NodeMut<'_>>
fn get_edge_mut(&mut self, id: Self::EdgeId) -> Option<Self::EdgeMut<'_>>
Auto Trait Implementations§
impl<NodeId, EdgeId, NodeData, EdgeData> Freeze for OwningGraph<NodeId, EdgeId, NodeData, EdgeData>
impl<NodeId, EdgeId, NodeData, EdgeData> RefUnwindSafe for OwningGraph<NodeId, EdgeId, NodeData, EdgeData>where
HashMap<NodeId, NodeData>: RefUnwindSafe,
HashMap<EdgeId, EdgeData>: RefUnwindSafe,
HashMap<NodeId, RawNode<EdgeId>>: RefUnwindSafe,
HashMap<EdgeId, RawEdge<NodeId>>: RefUnwindSafe,
impl<NodeId, EdgeId, NodeData, EdgeData> Send for OwningGraph<NodeId, EdgeId, NodeData, EdgeData>
impl<NodeId, EdgeId, NodeData, EdgeData> Sync for OwningGraph<NodeId, EdgeId, NodeData, EdgeData>
impl<NodeId, EdgeId, NodeData, EdgeData> Unpin for OwningGraph<NodeId, EdgeId, NodeData, EdgeData>
impl<NodeId, EdgeId, NodeData, EdgeData> UnsafeUnpin for OwningGraph<NodeId, EdgeId, NodeData, EdgeData>where
HashMap<NodeId, NodeData>: UnsafeUnpin,
HashMap<EdgeId, EdgeData>: UnsafeUnpin,
HashMap<NodeId, RawNode<EdgeId>>: UnsafeUnpin,
HashMap<EdgeId, RawEdge<NodeId>>: UnsafeUnpin,
impl<NodeId, EdgeId, NodeData, EdgeData> UnwindSafe for OwningGraph<NodeId, EdgeId, NodeData, EdgeData>where
HashMap<NodeId, NodeData>: UnwindSafe,
HashMap<EdgeId, EdgeData>: UnwindSafe,
HashMap<NodeId, RawNode<EdgeId>>: UnwindSafe,
HashMap<EdgeId, RawEdge<NodeId>>: 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
Mutably borrows from an owned value. Read more
Source§impl<G> Cfg for Gwhere
G: Graph,
impl<G> Cfg for Gwhere
G: Graph,
type NodeId = <G as Graph>::NodeId
Source§type Hasher = <G as Graph>::Hasher
type Hasher = <G as Graph>::Hasher
Hasher backing the analyses’ node-keyed maps. Picking a fixed-seed hasher
(e.g.
FxBuildHasher) keeps successors iteration —
and thus the derived dominator structures — deterministic across runs,
whereas the std default (RandomState) reseeds per process.