Skip to main content

ClassicalExpr

Struct ClassicalExpr 

Source
pub struct ClassicalExpr { /* private fields */ }
Expand description

A typed, side-effect-free runtime classical expression.

The expression node kind is exposed through ClassicalExpr::kind for inspection and tooling. Prefer the typed constructors on this type when building expressions; they centralize type checks and keep the AST valid.

Implementations§

Source§

impl ClassicalExpr

Source

pub fn var(var: ClassicalVar) -> Self

Creates an expression that reads the current runtime value of var.

Source

pub fn value(value: ClassicalValue) -> Self

Creates an expression that reads an immutable runtime classical value.

Source

pub fn bool_literal(value: bool) -> Self

Creates a boolean literal expression.

Source

pub fn bit_literal(value: bool) -> Self

Creates a bit literal expression.

Source

pub fn uint_literal(width: u32, value: u128) -> Result<Self, CircuitError>

Creates an unsigned integer literal with a non-zero width.

Literal construction currently supports constants up to 128 bits wide.

Source

pub fn bit_vec_literal(width: u32, value: u128) -> Result<Self, CircuitError>

Creates a bit-vector literal with a non-zero width.

Literal construction currently supports constants up to 128 bits wide.

Source

pub fn ty(&self) -> ClassicalType

Returns this expression’s static type.

Source

pub fn kind(&self) -> &ClassicalExprKind

Returns the expression node kind.

This exposes the classical expression AST for inspection. Prefer the typed constructors on ClassicalExpr when building expressions so expression invariants remain centralized.

Source

pub fn remap_classical_ids( &self, var_map: &HashMap<ClassicalVar, ClassicalVar>, value_map: &HashMap<ClassicalValue, ClassicalValue>, ) -> Result<Self, CircuitError>

Returns a copy of this expression with circuit-local classical handles remapped.

Every ClassicalVar and ClassicalValue referenced by this expression must have an entry in the corresponding map. Literal and structural nodes keep their static type and shape.

Source

pub fn vars(&self) -> BTreeSet<ClassicalVar>

Returns all runtime classical variables read by this expression.

Source

pub fn values(&self) -> BTreeSet<ClassicalValue>

Returns all immutable runtime classical values read by this expression.

Source

pub fn collect_vars(&self, out: &mut BTreeSet<ClassicalVar>)

Adds every runtime classical variable read by this expression to out.

Source

pub fn collect_values(&self, out: &mut BTreeSet<ClassicalValue>)

Adds every immutable runtime classical value read by this expression to out.

Source

pub fn try_not(expr: impl Into<Self>) -> Result<Self, CircuitError>

Creates a not expression for Bool or Bit values.

Source

pub fn try_and( lhs: impl Into<Self>, rhs: impl Into<Self>, ) -> Result<Self, CircuitError>

Creates an and expression for matching Bool or matching Bit values.

Source

pub fn try_or( lhs: impl Into<Self>, rhs: impl Into<Self>, ) -> Result<Self, CircuitError>

Creates an or expression for matching Bool or matching Bit values.

Source

pub fn try_xor( lhs: impl Into<Self>, rhs: impl Into<Self>, ) -> Result<Self, CircuitError>

Creates an xor expression for matching Bool or matching Bit values.

Source

pub fn eq(lhs: Self, rhs: Self) -> Result<Self, CircuitError>

Creates an equality comparison. Operands must have the same type.

Source

pub fn ne(lhs: Self, rhs: Self) -> Result<Self, CircuitError>

Creates an inequality comparison. Operands must have the same type.

Source

pub fn lt(lhs: Self, rhs: Self) -> Result<Self, CircuitError>

Creates an unsigned less-than comparison.

Source

pub fn le(lhs: Self, rhs: Self) -> Result<Self, CircuitError>

Creates an unsigned less-than-or-equal comparison.

Source

pub fn gt(lhs: Self, rhs: Self) -> Result<Self, CircuitError>

Creates an unsigned greater-than comparison.

Source

pub fn ge(lhs: Self, rhs: Self) -> Result<Self, CircuitError>

Creates an unsigned greater-than-or-equal comparison.

Source

pub fn bit_to_bool(expr: Self) -> Result<Self, CircuitError>

Explicitly casts a Bit expression to Bool.

Source

pub fn bit_vec_to_uint(expr: Self) -> Result<Self, CircuitError>

Explicitly casts a BitVec expression to a little-endian UInt.

Source

pub fn to_bool(self) -> Result<Self, CircuitError>

Converts this Bit expression to Bool.

Source

pub fn to_uint(self) -> Result<Self, CircuitError>

Converts this BitVec expression to a little-endian UInt.

Source

pub fn select( condition: Self, then_expr: Self, else_expr: Self, ) -> Result<Self, CircuitError>

Creates an expression that chooses between two same-typed values.

Source

pub fn extract_bit(value: Self, index: u32) -> Result<Self, CircuitError>

Extracts a single bit from a BitVec or UInt.

Index 0 is the least-significant bit.

Source

pub fn extract_bits( value: Self, offset: u32, width: u32, ) -> Result<Self, CircuitError>

Extracts a bit range from a BitVec or UInt.

offset is little-endian: offset 0 starts at the least-significant bit.

Source

pub fn concat( parts: impl IntoIterator<Item = Self>, ) -> Result<Self, CircuitError>

Concatenates bit-vector values into a larger bit-vector.

The first part occupies the least-significant output bits.

Source

pub fn is_bool_true(&self) -> bool

Returns true when this expression is the boolean literal true.

Source

pub fn is_bool_false(&self) -> bool

Returns true when this expression is the boolean literal false.

Source

pub fn is_bit_true(&self) -> bool

Returns true when this expression is the bit literal true (1).

Source

pub fn is_bit_false(&self) -> bool

Returns true when this expression is the bit literal false (0).

Source

pub fn simplified(&self) -> Self

Returns a structurally simplified copy of this expression.

Simplification eliminates literal-driven redundancies and algebraic identities without evaluating runtime variable or value reads. It is idempotent: applying it twice yields the same expression.

See simplify for the full rule set.

Source

pub fn pack_bits( bits: impl IntoIterator<Item = Self>, ) -> Result<Self, CircuitError>

Packs single-bit expressions into a BitVec.

The first bit becomes output index 0, the least-significant bit.

Trait Implementations§

Source§

impl<Rhs> BitAnd<Rhs> for ClassicalExpr
where Rhs: Into<ClassicalExpr>,

Source§

type Output = ClassicalExpr

The resulting type after applying the & operator.
Source§

fn bitand(self, rhs: Rhs) -> Self::Output

Performs the & operation. Read more
Source§

impl<Rhs> BitOr<Rhs> for ClassicalExpr
where Rhs: Into<ClassicalExpr>,

Source§

type Output = ClassicalExpr

The resulting type after applying the | operator.
Source§

fn bitor(self, rhs: Rhs) -> Self::Output

Performs the | operation. Read more
Source§

impl<Rhs> BitXor<Rhs> for ClassicalExpr
where Rhs: Into<ClassicalExpr>,

Source§

type Output = ClassicalExpr

The resulting type after applying the ^ operator.
Source§

fn bitxor(self, rhs: Rhs) -> Self::Output

Performs the ^ operation. Read more
Source§

impl Clone for ClassicalExpr

Source§

fn clone(&self) -> Self

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for ClassicalExpr

Source§

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

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

impl Eq for ClassicalExpr

Source§

impl From<ClassicalValue> for ClassicalExpr

Source§

fn from(value: ClassicalValue) -> Self

Converts to this type from the input type.
Source§

impl From<ClassicalVar> for ClassicalExpr

Source§

fn from(var: ClassicalVar) -> Self

Converts to this type from the input type.
Source§

impl Hash for ClassicalExpr

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 Not for ClassicalExpr

Source§

type Output = ClassicalExpr

The resulting type after applying the ! operator.
Source§

fn not(self) -> Self::Output

Performs the unary ! operation using logical or bitwise negation. Read more
Source§

impl PartialEq for ClassicalExpr

Source§

fn eq(&self, other: &Self) -> bool

Equality operator ==. Read more
1.0.0 (const: unstable) · Source§

fn ne(&self, other: &Rhs) -> bool

Inequality operator !=. Read more
Source§

impl StructuralPartialEq for ClassicalExpr

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> ByRef<T> for T

Source§

fn by_ref(&self) -> &T

Source§

impl<T> CallHasher for T
where T: Hash + ?Sized,

Source§

default fn get_hash<H, B>(value: &H, build_hasher: &B) -> u64
where H: Hash + ?Sized, B: BuildHasher,

Source§

impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

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

impl<T> Conv for T

Source§

fn conv<T>(self) -> T
where Self: Into<T>,

Converts self into T using Into<T>. Read more
Source§

impl<T> DistributionExt for T
where T: ?Sized,

Source§

fn rand<T>(&self, rng: &mut (impl Rng + ?Sized)) -> T
where Self: Distribution<T>,

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<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<T> FmtForward for T

Source§

fn fmt_binary(self) -> FmtBinary<Self>
where Self: Binary,

Causes self to use its Binary implementation when Debug-formatted.
Source§

fn fmt_display(self) -> FmtDisplay<Self>
where Self: Display,

Causes self to use its Display implementation when Debug-formatted.
Source§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>
where Self: LowerExp,

Causes self to use its LowerExp implementation when Debug-formatted.
Source§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>
where Self: LowerHex,

Causes self to use its LowerHex implementation when Debug-formatted.
Source§

fn fmt_octal(self) -> FmtOctal<Self>
where Self: Octal,

Causes self to use its Octal implementation when Debug-formatted.
Source§

fn fmt_pointer(self) -> FmtPointer<Self>
where Self: Pointer,

Causes self to use its Pointer implementation when Debug-formatted.
Source§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>
where Self: UpperExp,

Causes self to use its UpperExp implementation when Debug-formatted.
Source§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>
where Self: UpperHex,

Causes self to use its UpperHex implementation when Debug-formatted.
Source§

fn fmt_list(self) -> FmtList<Self>
where &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Imply<T> for U
where T: ?Sized, U: ?Sized,

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> Pipe for T
where T: ?Sized,

Source§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> R
where Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
Source§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> R
where R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
Source§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> R
where R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
Source§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
where Self: Borrow<B>, B: 'a + ?Sized, R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
Source§

fn pipe_borrow_mut<'a, B, R>( &'a mut self, func: impl FnOnce(&'a mut B) -> R, ) -> R
where Self: BorrowMut<B>, B: 'a + ?Sized, R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe function. Read more
Source§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
where Self: AsRef<U>, U: 'a + ?Sized, R: 'a,

Borrows self, then passes self.as_ref() into the pipe function.
Source§

fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
where Self: AsMut<U>, U: 'a + ?Sized, R: 'a,

Mutably borrows self, then passes self.as_mut() into the pipe function.
Source§

fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
where Self: Deref<Target = T>, T: 'a + ?Sized, R: 'a,

Borrows self, then passes self.deref() into the pipe function.
Source§

fn pipe_deref_mut<'a, T, R>( &'a mut self, func: impl FnOnce(&'a mut T) -> R, ) -> R
where Self: DerefMut<Target = T> + Deref, T: 'a + ?Sized, R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe function.
Source§

impl<T> Pointable for T

Source§

const ALIGN: usize

The alignment of pointer.
Source§

type Init = T

The type for initializers.
Source§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
Source§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
Source§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
Source§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> Read<Exclusive, BecauseExclusive> for T
where T: ?Sized,

Source§

impl<T> Tap for T

Source§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
Source§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
Source§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
where Self: Borrow<B>, B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
Source§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
where Self: BorrowMut<B>, B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
Source§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
where Self: AsRef<R>, R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
Source§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
where Self: AsMut<R>, R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
Source§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
where Self: Deref<Target = T>, T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
Source§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
where Self: DerefMut<Target = T> + Deref, T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
Source§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
Source§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release builds.
Source§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
where Self: Borrow<B>, B: ?Sized,

Calls .tap_borrow() only in debug builds, and is erased in release builds.
Source§

fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
where Self: BorrowMut<B>, B: ?Sized,

Calls .tap_borrow_mut() only in debug builds, and is erased in release builds.
Source§

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
where Self: AsRef<R>, R: ?Sized,

Calls .tap_ref() only in debug builds, and is erased in release builds.
Source§

fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
where Self: AsMut<R>, R: ?Sized,

Calls .tap_ref_mut() only in debug builds, and is erased in release builds.
Source§

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
where Self: Deref<Target = T>, T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release builds.
Source§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Self
where Self: DerefMut<Target = T> + Deref, T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release builds.
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> TryConv for T

Source§

fn try_conv<T>(self) -> Result<T, Self::Error>
where Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. Read more
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.
Source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V