Skip to main content

ControlFlowInstructions

Trait ControlFlowInstructions 

Source
pub trait ControlFlowInstructions<F: CircuitField, Assigned>: AssertionInstructions<F, Assigned>
where Assigned: InnerValue,
{ // Required method fn select( &self, layouter: &mut impl Layouter<F>, cond: &AssignedBit<F>, x: &Assigned, y: &Assigned, ) -> Result<Assigned, Error>; // Provided methods fn cond_assert_equal( &self, layouter: &mut impl Layouter<F>, cond: &AssignedBit<F>, x: &Assigned, y: &Assigned, ) -> Result<(), Error> { ... } fn cond_swap( &self, layouter: &mut impl Layouter<F>, cond: &AssignedBit<F>, x: &Assigned, y: &Assigned, ) -> Result<(Assigned, Assigned), Error> { ... } }
Expand description

The set of circuit instructions for control flow operations.

Required Methods§

Source

fn select( &self, layouter: &mut impl Layouter<F>, cond: &AssignedBit<F>, x: &Assigned, y: &Assigned, ) -> Result<Assigned, Error>

Returns x if cond = true and y otherwise.

let x: AssignedNative<F> = chip.assign(&mut layouter, Value::known(F::ZERO))?;
let y: AssignedNative<F> = chip.assign(&mut layouter, Value::known(F::ONE))?;
let cond: AssignedBit<F> = chip.assign(&mut layouter, Value::known(true))?;

let choice = chip.select(&mut layouter, &cond, &x, &y)?;
chip.assert_equal(&mut layouter, &choice, &x)?;

Provided Methods§

Source

fn cond_assert_equal( &self, layouter: &mut impl Layouter<F>, cond: &AssignedBit<F>, x: &Assigned, y: &Assigned, ) -> Result<(), Error>

Equality assertion only if cond is set to 1.

Source

fn cond_swap( &self, layouter: &mut impl Layouter<F>, cond: &AssignedBit<F>, x: &Assigned, y: &Assigned, ) -> Result<(Assigned, Assigned), Error>

Swaps two elements x and y only if cond is set to 1.

Dyn Compatibility§

This trait is not dyn compatible.

In older versions of Rust, dyn compatibility was called "object safety", so this trait is not object safe.

Implementors§

Source§

impl<C: EdwardsCurve> ControlFlowInstructions<<C as CircuitCurve>::Base, AssignedNativePoint<C>> for EccChip<C>

Source§

impl<F> ControlFlowInstructions<F, AssignedBit<F>> for NativeChip<F>
where F: CircuitField,

Source§

impl<F> ControlFlowInstructions<F, AssignedCell<F, F>> for NativeChip<F>
where F: CircuitField + From<u64> + Neg<Output = F>,

Source§

impl<F, C, B, S, N> ControlFlowInstructions<F, AssignedForeignEdwardsPoint<F, C, B>> for ForeignEdwardsEccChip<F, C, B, S, N>

Source§

impl<F, C, B, S, N> ControlFlowInstructions<F, AssignedForeignPoint<F, C, B>> for ForeignWeierstrassEccChip<F, C, B, S, N>

Source§

impl<F, CoreDecomposition, NativeArith> ControlFlowInstructions<F, AssignedBit<F>> for NativeGadget<F, CoreDecomposition, NativeArith>

Source§

impl<F, CoreDecomposition, NativeArith> ControlFlowInstructions<F, AssignedByte<F>> for NativeGadget<F, CoreDecomposition, NativeArith>

Source§

impl<F, CoreDecomposition, NativeArith> ControlFlowInstructions<F, AssignedCell<F, F>> for NativeGadget<F, CoreDecomposition, NativeArith>

Source§

impl<F, K, P, N> ControlFlowInstructions<F, AssignedField<F, K, P>> for FieldChip<F, K, P, N>

Source§

impl<F, N> ControlFlowInstructions<F, AssignedBigUint<F>> for BigUintGadget<F, N>