Skip to main content

OwningGraph

Struct OwningGraph 

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

Source

pub fn make_node(&mut self, data: NodeData) -> NodeId

Creates a new node Creates a new node with payload data and returns its identifier.

Source

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.

Source

pub fn remove_edge(&mut self, id: EdgeId)

Removes an edge by identifier.

§Panics

Panics if the edge does not exist.

Source

pub fn edit_edge(&mut self, id: EdgeId, new_from: NodeId, new_to: NodeId)

Edits an edge’s endpoints

Source

pub fn remove_node(&mut self, id: NodeId)

Removes a node and all of its incident edges.

§Panics

Panics if the node does not exist.

Source

pub fn reinterpret<NewNodeData, NewEdgeData, Fn, Fe>( &self, node_data_map: Fn, edge_data_map: Fe, ) -> OwningGraph<NodeId, EdgeId, NewNodeData, NewEdgeData>
where Fn: FnMut(&NodeData) -> NewNodeData, Fe: FnMut(&EdgeData) -> 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>

Source

pub fn parse(source: &'src str) -> Result<Self, ParseError<'src>>

Source

pub fn get_node_by_name(&self, name: &str) -> Option<NodeId>

Source

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>

Source§

fn default() -> Self

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

impl<NodeId: Identifier, EdgeId: Identifier, NodeData, EdgeData> Graph for OwningGraph<NodeId, EdgeId, NodeData, EdgeData>

Source§

type NodeId = NodeId

Source§

type EdgeId = EdgeId

Source§

type Hasher = RandomState

Hasher backing the graph’s incident-edge sets and DFS bookkeeping. Read more
Source§

type Node<'a> = NodeRef<'a, NodeId, EdgeId, NodeData, EdgeData> where Self: 'a

Source§

type Edge<'a> = EdgeRef<'a, NodeId, EdgeId, NodeData, EdgeData> where Self: 'a

Source§

fn get_node(&self, id: Self::NodeId) -> Option<Self::Node<'_>>

Gets a node in the graph by its identifier, if it exists.
Source§

fn get_edge(&self, id: Self::EdgeId) -> Option<Self::Edge<'_>>

Source§

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<'_>> + '_

Iterates over all edges in insertion identifier order.
Source§

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,

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>

Source§

type NodeMut<'a> = NodeMutRef<'a, NodeId, EdgeId, NodeData, EdgeData> where Self: 'a

Source§

type EdgeMut<'a> = EdgeMutRef<'a, NodeId, EdgeId, NodeData, EdgeData> where Self: 'a

Source§

fn get_node_mut(&mut self, id: Self::NodeId) -> Option<Self::NodeMut<'_>>

Source§

fn get_edge_mut(&mut self, id: Self::EdgeId) -> Option<Self::EdgeMut<'_>>

Source§

fn merge_nodes( &mut self, keep: Self::NodeId, remove: Self::NodeId, direct_edge: Self::EdgeId, )
where Self: Sized,

Merges remove into keep at the graph-structural level. Read more

Auto Trait Implementations§

§

impl<NodeId, EdgeId, NodeData, EdgeData> Freeze for OwningGraph<NodeId, EdgeId, NodeData, EdgeData>
where HashMap<NodeId, NodeData>: Freeze, HashMap<EdgeId, EdgeData>: Freeze, HashMap<NodeId, RawNode<EdgeId>>: Freeze, HashMap<EdgeId, RawEdge<NodeId>>: Freeze,

§

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>
where HashMap<NodeId, NodeData>: Send, HashMap<EdgeId, EdgeData>: Send, HashMap<NodeId, RawNode<EdgeId>>: Send, HashMap<EdgeId, RawEdge<NodeId>>: Send,

§

impl<NodeId, EdgeId, NodeData, EdgeData> Sync for OwningGraph<NodeId, EdgeId, NodeData, EdgeData>
where HashMap<NodeId, NodeData>: Sync, HashMap<EdgeId, EdgeData>: Sync, HashMap<NodeId, RawNode<EdgeId>>: Sync, HashMap<EdgeId, RawEdge<NodeId>>: Sync,

§

impl<NodeId, EdgeId, NodeData, EdgeData> Unpin for OwningGraph<NodeId, EdgeId, NodeData, EdgeData>
where HashMap<NodeId, NodeData>: Unpin, HashMap<EdgeId, EdgeData>: Unpin, HashMap<NodeId, RawNode<EdgeId>>: Unpin, HashMap<EdgeId, RawEdge<NodeId>>: Unpin,

§

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> 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<G> Cfg for G
where G: Graph,

Source§

type NodeId = <G as Graph>::NodeId

Source§

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

fn successors( &self, n: <G as Cfg>::NodeId, ) -> impl Iterator<Item = <G as Cfg>::NodeId>

The successors of n (the targets of its outgoing edges).
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<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = !

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, !>

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.