Struct ComputationRef
pub struct ComputationRef<'template, 'a> {
pub template: ExprComputation<'template>,
pub arg_interpretation: &'a [Arg],
pub consts: &'a [i128],
}
Expand description
The computation type shared between SynthesizedComputation
, ExprComputation
and ExpressionComputation
.
Fields§
§template: ExprComputation<'template>
The expression used.
arg_interpretation: &'a [Arg]
The argument interpretation.
consts: &'a [i128]
The constants used in the arguments.
Implementations§
§impl<'template, 'a> ComputationRef<'template, 'a>
impl<'template, 'a> ComputationRef<'template, 'a>
pub fn new(
template: ExprComputation<'template>,
arg_interpretation: &'a [Arg],
) -> Self
pub fn new( template: ExprComputation<'template>, arg_interpretation: &'a [Arg], ) -> Self
Creates a new computation reference that does not use any constants.
pub fn output_encoding(&self) -> OutputEncoding
pub fn output_encoding(&self) -> OutputEncoding
Returns the output encoding of the computation.
pub fn output_type(&self) -> IoType
pub fn output_type(&self) -> IoType
Returns the output type of the computation.
pub fn to_expression_computation(&self) -> ExpressionComputation
pub fn to_expression_computation(&self) -> ExpressionComputation
Creates an owned ExpressionComputation
from the computation.
pub fn expr_computation(&self) -> &ExprComputation<'template>
pub fn expr_computation(&self) -> &ExprComputation<'template>
Returns the expression of this computation.
Trait Implementations§
§impl AsComputationRef for ComputationRef<'_, '_>
impl AsComputationRef for ComputationRef<'_, '_>
§fn as_internal(&self) -> ComputationRef<'_, '_>
fn as_internal(&self) -> ComputationRef<'_, '_>
Return a
ComputationRef
.§fn to_synthesized_computation(&self) -> SynthesizedComputation
fn to_synthesized_computation(&self) -> SynthesizedComputation
Return an owned
SynthesizedComputation
.§fn arg_interpretation(&self) -> &[Arg]
fn arg_interpretation(&self) -> &[Arg]
Returns the argument interpretations of the computation.
§fn if_zero<A: AsComputationRef, B: AsComputationRef>(
&self,
if_zero: &A,
if_nonzero: &B,
) -> SynthesizedComputation
fn if_zero<A: AsComputationRef, B: AsComputationRef>( &self, if_zero: &A, if_nonzero: &B, ) -> SynthesizedComputation
Returns a new expression that returns
if_zero
if the current expression is equal to 0
, and returns if_nonzero
otherwise.§fn chain(&self, other: &impl AsComputationRef) -> SynthesizedComputationwhere
Self: Debug,
fn chain(&self, other: &impl AsComputationRef) -> SynthesizedComputationwhere
Self: Debug,
Concatenates the operations of the two computations.
In and of itself, this produces a computation that ends with two values on the evaluation stack.
The last value is normally popped and returned, which would be the result of
other
. Read more§fn and(&self, other: &SynthesizedComputation) -> SynthesizedComputationwhere
Self: Debug,
fn and(&self, other: &SynthesizedComputation) -> SynthesizedComputationwhere
Self: Debug,
Returns a computation that computes the bitwise AND of both computations.
§fn or(&self, other: &SynthesizedComputation) -> SynthesizedComputationwhere
Self: Debug,
fn or(&self, other: &SynthesizedComputation) -> SynthesizedComputationwhere
Self: Debug,
Returns a computation that computes the bitwise OR of both computations.
§fn not(&self) -> SynthesizedComputation
fn not(&self) -> SynthesizedComputation
Returns a computation that computes the bitwise NOT of the computation.
§fn not_crop(&self) -> SynthesizedComputation
fn not_crop(&self) -> SynthesizedComputation
Returns a computation that computes the bitwise NOT of the computation, and then crops the result to 1 bit.
§impl<'template, 'a> Clone for ComputationRef<'template, 'a>
impl<'template, 'a> Clone for ComputationRef<'template, 'a>
§fn clone(&self) -> ComputationRef<'template, 'a>
fn clone(&self) -> ComputationRef<'template, 'a>
Returns a copy of the value. Read more
1.0.0 · source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
Performs copy-assignment from
source
. Read more§impl Computation for ComputationRef<'_, '_>
impl Computation for ComputationRef<'_, '_>
§fn evaluate<V: AsValue>(&self, inputs: &[V]) -> OwnedValue
fn evaluate<V: AsValue>(&self, inputs: &[V]) -> OwnedValue
Computes the output of the semantics, given
inputs
.§fn compare_eq<V: AsValue>(&self, inputs: &[V], expected: Value<'_>) -> bool
fn compare_eq<V: AsValue>(&self, inputs: &[V], expected: Value<'_>) -> bool
Returns true if
expected
matches the output of the computation.
This function can be more efficient than manually comparing the result of self.evaluate(..)
.
For example, we can avoid allocating a Vec
for OwnedValue::Bytes
results.§fn display<'a, S: AsRef<str>>(
&'a self,
input_names: &'a [S],
) -> impl Display + Debug + 'a
fn display<'a, S: AsRef<str>>( &'a self, input_names: &'a [S], ) -> impl Display + Debug + 'a
Returns a struct that is suitable for printing, which uses
input_names
in place of the inputs.§fn used_input_indices(&self) -> Vec<usize>
fn used_input_indices(&self) -> Vec<usize>
The indices of all inputs used in the computation.
§fn remap_inputs(&mut self, _map: &[Option<usize>])
fn remap_inputs(&mut self, _map: &[Option<usize>])
Remaps the input indices, such that
new_index = map[old_index].unwrap_or(old_index)
.§fn is_identity(&self) -> bool
fn is_identity(&self) -> bool
Returns true when the computation is the identity function.
This function may under-approximate: it does not necessarily have to return true in all cases. Read more
§impl<'template, 'a> Debug for ComputationRef<'template, 'a>
impl<'template, 'a> Debug for ComputationRef<'template, 'a>
§impl<'template, 'a> PartialEq for ComputationRef<'template, 'a>
impl<'template, 'a> PartialEq for ComputationRef<'template, 'a>
impl<'template, 'a> StructuralPartialEq for ComputationRef<'template, 'a>
Auto Trait Implementations§
impl<'template, 'a> Freeze for ComputationRef<'template, 'a>
impl<'template, 'a> RefUnwindSafe for ComputationRef<'template, 'a>
impl<'template, 'a> Send for ComputationRef<'template, 'a>
impl<'template, 'a> Sync for ComputationRef<'template, 'a>
impl<'template, 'a> Unpin for ComputationRef<'template, 'a>
impl<'template, 'a> UnwindSafe for ComputationRef<'template, 'a>
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<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
source§unsafe fn clone_to_uninit(&self, dst: *mut T)
unsafe fn clone_to_uninit(&self, dst: *mut T)
🔬This is a nightly-only experimental API. (
clone_to_uninit
)§impl<T> Identity for Twhere
T: ?Sized,
impl<T> Identity for Twhere
T: ?Sized,
source§impl<T> IntoEither for T
impl<T> IntoEither for T
source§fn into_either(self, into_left: bool) -> Either<Self, Self>
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 moresource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
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