hugr_model::v0

Enum Operation

Source
pub enum Operation<'a> {
Show 18 variants Invalid, Dfg, Cfg, Block, DefineFunc { decl: &'a FuncDecl<'a>, }, DeclareFunc { decl: &'a FuncDecl<'a>, }, CallFunc { func: TermId, }, LoadFunc { func: TermId, }, Custom { operation: NodeId, }, CustomFull { operation: NodeId, }, DefineAlias { decl: &'a AliasDecl<'a>, value: TermId, }, DeclareAlias { decl: &'a AliasDecl<'a>, }, TailLoop, Conditional, Tag { tag: u16, }, DeclareConstructor { decl: &'a ConstructorDecl<'a>, }, DeclareOperation { decl: &'a OperationDecl<'a>, }, Import { name: &'a str, },
}
Expand description

Operations that nodes can perform.

Variants§

§

Invalid

Invalid operation to be used as a placeholder. This is useful for modules that have non-contiguous node ids, or modules that have not yet been fully constructed.

§

Dfg

Data flow graphs.

§

Cfg

Control flow graphs.

§

Block

Basic blocks.

§

DefineFunc

Function definitions.

Fields

§decl: &'a FuncDecl<'a>

The declaration of the function to be defined.

§

DeclareFunc

Function declarations.

Fields

§decl: &'a FuncDecl<'a>

The function to be declared.

§

CallFunc

Function calls.

Fields

§func: TermId

The function to be called.

§

LoadFunc

Function constants.

Fields

§func: TermId

The function to be loaded.

§

Custom

Custom operation.

The node’s parameters correspond to the explicit parameter of the custom operation, leaving out the implicit parameters. Once the declaration of the custom operation becomes known by resolving the reference, the node can be transformed into a Operation::CustomFull by inferring terms for the implicit parameters or at least filling them in with a wildcard term.

Fields

§operation: NodeId

The symbol of the custom operation.

§

CustomFull

Custom operation with full parameters.

The node’s parameters correspond to both the explicit and implicit parameters of the custom operation. Since this can be tedious to write, the Operation::Custom variant can be used to indicate that the implicit parameters should be inferred.

Fields

§operation: NodeId

The symbol of the custom operation.

§

DefineAlias

Alias definitions.

Fields

§decl: &'a AliasDecl<'a>

The declaration of the alias to be defined.

§value: TermId

The value of the alias.

§

DeclareAlias

Alias declarations.

Fields

§decl: &'a AliasDecl<'a>

The alias to be declared.

§

TailLoop

Tail controlled loop. Nodes with this operation contain a dataflow graph that is executed in a loop. The loop body is executed at least once, producing a result that indicates whether to continue the loop or return the result.

§Port Types

  • Inputs: inputs + rest
  • Outputs: outputs + rest
  • Sources: inputs + rest
  • Targets: (adt [inputs outputs]) + rest
§

Conditional

Conditional operation.

§Port types

  • Inputs: [(adt inputs)] + context
  • Outputs: outputs
§

Tag

Create an ADT value from a sequence of inputs.

Fields

§tag: u16

The tag of the ADT value.

§

DeclareConstructor

Declaration for a term constructor.

Nodes with this operation must be within a module region.

Fields

§decl: &'a ConstructorDecl<'a>

The declaration of the constructor.

§

DeclareOperation

Declaration for a operation.

Nodes with this operation must be within a module region.

Fields

§decl: &'a OperationDecl<'a>

The declaration of the operation.

§

Import

Import a symbol.

Fields

§name: &'a str

The name of the symbol to be imported.

Implementations§

Source§

impl<'a> Operation<'a>

Source

pub fn symbol(&self) -> Option<&'a str>

Returns the symbol introduced by the operation, if any.

Trait Implementations§

Source§

impl<'a> Clone for Operation<'a>

Source§

fn clone(&self) -> Operation<'a>

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<'a> Debug for Operation<'a>

Source§

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

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

impl<'a> Default for Operation<'a>

Source§

fn default() -> Operation<'a>

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

impl<'a> Hash for Operation<'a>

Source§

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

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> PartialEq for Operation<'a>

Source§

fn eq(&self, other: &Operation<'a>) -> 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<'a> Eq for Operation<'a>

Source§

impl<'a> StructuralPartialEq for Operation<'a>

Auto Trait Implementations§

§

impl<'a> Freeze for Operation<'a>

§

impl<'a> RefUnwindSafe for Operation<'a>

§

impl<'a> Send for Operation<'a>

§

impl<'a> Sync for Operation<'a>

§

impl<'a> Unpin for Operation<'a>

§

impl<'a> UnwindSafe for Operation<'a>

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> 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, 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.