Struct air_ir::AlgebraicGraph

source ·
pub struct AlgebraicGraph { /* private fields */ }
Expand description

The AlgebraicGraph is a directed acyclic graph used to represent integrity constraints. To store it compactly, it is represented as a vector of nodes where each node references other nodes by their index in the vector.

Within the graph, constraint expressions can overlap and share subgraphs, since new expressions reuse matching existing nodes when they are added, rather than creating new nodes.

  • Leaf nodes (with no outgoing edges) are constants or references to trace cells (i.e. column 0 in the current row or column 5 in the next row).
  • Tip nodes with no incoming edges (no parent nodes) always represent constraints, although they do not necessarily represent all constraints. There could be constraints which are also subgraphs of other constraints.

Implementations§

source§

impl AlgebraicGraph

source

pub const fn new(nodes: Vec<Node>) -> Self

Creates a new graph from a list of nodes.

source

pub fn node(&self, index: &NodeIndex) -> &Node

Returns the node with the specified index.

source

pub fn num_nodes(&self) -> usize

Returns the number of nodes in the graph.

source

pub fn degree(&self, index: &NodeIndex) -> IntegrityConstraintDegree

Returns the degree of the subgraph which has the specified node as its tip.

source

pub fn node_details( &self, index: &NodeIndex, default_domain: ConstraintDomain ) -> Result<(TraceSegmentId, ConstraintDomain), ConstraintError>

TODO: docs

Trait Implementations§

source§

impl Clone for AlgebraicGraph

source§

fn clone(&self) -> AlgebraicGraph

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 AlgebraicGraph

source§

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

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

impl Default for AlgebraicGraph

source§

fn default() -> AlgebraicGraph

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

Auto Trait Implementations§

Blanket Implementations§

source§

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

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

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

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

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

source§

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

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

source§

impl<T, U> Into<U> for Twhere 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> ToOwned for Twhere T: Clone,

§

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

§

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

§

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.