paralegal_spdg

Struct CallString

Source
pub struct CallString(Intern<Box<[GlobalLocation]>>);
Expand description

A location within the global call-graph.

The first location is the root of the call-graph. The last location is the currently-called function.

Invariant: a call string should never be empty, i.e., there should always be at least one GlobalLocation in a call-string.

Note: This type is copyable due to interning.

Tuple Fields§

§0: Intern<Box<[GlobalLocation]>>

Implementations§

Source§

impl CallString

Source

pub fn pop(self) -> (GlobalLocation, Option<CallString>)

Split the leaf (the current instruction) from the caller for the function (if any) and return both. Same as (self.leaf(), self.caller()).

Source

pub fn single(loc: GlobalLocation) -> CallString

Create an initial call string for the single location loc.

Source

pub fn leaf(self) -> GlobalLocation

Returns the leaf of the call string (the currently-called function).

Source

pub fn caller(self) -> Option<CallString>

Returns the call string minus the leaf. Returns None if this location is at the root.

Source

pub fn iter(&self) -> impl DoubleEndedIterator

Returns an iterator over the locations in the call string, starting at the leaf and going to the root.

Source

pub fn push(self, loc: GlobalLocation) -> CallString

Adds a new call site to the end of the call string.

Source

pub fn push_front(self, loc: GlobalLocation) -> CallString

Source

pub fn is_at_root(self) -> bool

Source

pub fn root(self) -> GlobalLocation

Source

pub fn stable_id(self) -> usize

Source

pub fn iter_from_root(&self) -> impl DoubleEndedIterator

Returns an iterator over the locations in the call string, starting at the root and going to the leaf.

Source

pub fn len(self) -> usize

Source

pub fn is_empty(self) -> bool

Trait Implementations§

Source§

impl Clone for CallString

Source§

fn clone(&self) -> CallString

Returns a copy 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 Debug for CallString

Source§

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

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

impl<'de> Deserialize<'de> for CallString

Source§

fn deserialize<__D>( __deserializer: __D, ) -> Result<CallString, <__D as Deserializer<'de>>::Error>
where __D: Deserializer<'de>,

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

impl Display for CallString

Source§

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

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

impl<'a> GraphWalk<'a, CallString, GlobalEdge> for DotPrintableProgramDescription<'_>

Source§

fn nodes(&'a self) -> Nodes<'a, CallString>

Returns all the nodes in this graph.
Source§

fn edges(&'a self) -> Edges<'a, GlobalEdge>

Returns all of the edges in this graph.
Source§

fn source(&'a self, edge: &GlobalEdge) -> CallString

The source node for edge.
Source§

fn target(&'a self, edge: &GlobalEdge) -> CallString

The target node for edge.
Source§

impl Hash for CallString

Source§

fn hash<__H>(&self, state: &mut __H)
where __H: Hasher,

Feeds this value into the given Hasher. Read more
1.3.0 · Source§

fn hash_slice<H>(data: &[Self], state: &mut H)
where H: Hasher, Self: Sized,

Feeds a slice of this type into the given Hasher. Read more
Source§

impl<'a> Labeller<'a, CallString, GlobalEdge> for DotPrintableProgramDescription<'_>

Source§

fn graph_id(&'a self) -> Id<'a>

Must return a DOT compatible identifier naming the graph.
Source§

fn node_id(&'a self, n: &CallString) -> Id<'a>

Maps n to a unique identifier with respect to self. The implementer is responsible for ensuring that the returned name is a valid DOT identifier.
Source§

fn node_shape(&'a self, _node: &CallString) -> Option<LabelText<'a>>

Maps n to one of the graphviz shape names. If None is returned, no shape attribute is specified.
Source§

fn node_label(&'a self, n: &CallString) -> LabelText<'a>

Maps n to a label that will be used in the rendered output. The label need not be unique, and may be the empty string; the default is just the output from node_id.
Source§

fn edge_color(&'a self, e: &GlobalEdge) -> Option<LabelText<'a>>

Maps e to one of the graphviz color names. If None is returned, no color attribute is specified.
Source§

fn source_port_position( &'a self, edge: &GlobalEdge, ) -> (Option<Id<'a>>, Option<CompassPoint>)

Specify a subpart of the source node for the origin of the edge (portname) and a direction for the edge (compass_point). See also https://graphviz.org/docs/attr-types/portPos/. Read more
Source§

fn target_port_position( &'a self, edge: &GlobalEdge, ) -> (Option<Id<'a>>, Option<CompassPoint>)

Same as source_port_position but for the target end of the edge.
Source§

fn edge_label(&'a self, e: &E) -> LabelText<'a>

Maps e to a label that will be used in the rendered output. The label need not be unique, and may be the empty string; the default is in fact the empty string.
Source§

fn node_style(&'a self, _n: &N) -> Style

Maps n to a style that will be used in the rendered output.
Source§

fn rank_dir(&'a self) -> Option<RankDir>

Return an explicit rank dir to use for directed graphs. Read more
Source§

fn node_color(&'a self, _node: &N) -> Option<LabelText<'a>>

Maps n to one of the graphviz color names. If None is returned, no color attribute is specified.
Source§

fn edge_end_arrow(&'a self, _e: &E) -> Arrow

Maps e to arrow style that will be used on the end of an edge. Defaults to default arrow style.
Source§

fn edge_start_arrow(&'a self, _e: &E) -> Arrow

Maps e to arrow style that will be used on the end of an edge. Defaults to default arrow style.
Source§

fn edge_style(&'a self, _e: &E) -> Style

Maps e to a style that will be used in the rendered output.
Source§

fn kind(&self) -> Kind

The kind of graph, defaults to Kind::Digraph.
Source§

impl PartialEq for CallString

Source§

fn eq(&self, other: &CallString) -> 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 Serialize for CallString

Source§

fn serialize<__S>( &self, __serializer: __S, ) -> Result<<__S as Serializer>::Ok, <__S as Serializer>::Error>
where __S: Serializer,

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

impl Copy for CallString

Source§

impl Eq for CallString

Source§

impl StructuralPartialEq for CallString

Auto Trait Implementations§

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, dst: *mut u8)

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

impl<Q, K> Equivalent<K> for Q
where Q: Eq + ?Sized, K: Borrow<Q> + ?Sized,

Source§

fn equivalent(&self, key: &K) -> bool

Checks if this value is equivalent to the given key. Read more
Source§

impl<Q, K> Equivalent<K> for Q
where Q: Eq + ?Sized, K: Borrow<Q> + ?Sized,

Source§

fn equivalent(&self, key: &K) -> bool

Compare self to key and return true if they are equal.
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> 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> 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§

default fn to_string(&self) -> String

Converts the given value to a String. 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> DeserializeOwned for T
where T: for<'de> Deserialize<'de>,