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§
Sourcefn select(
&self,
layouter: &mut impl Layouter<F>,
cond: &AssignedBit<F>,
x: &Assigned,
y: &Assigned,
) -> Result<Assigned, Error>
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§
Sourcefn cond_assert_equal(
&self,
layouter: &mut impl Layouter<F>,
cond: &AssignedBit<F>,
x: &Assigned,
y: &Assigned,
) -> Result<(), Error>
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.
Sourcefn cond_swap(
&self,
layouter: &mut impl Layouter<F>,
cond: &AssignedBit<F>,
x: &Assigned,
y: &Assigned,
) -> Result<(Assigned, Assigned), Error>
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".