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", so this trait is not object safe.