struct SubEnv<'a, F: PrimeField, CIx1: ColumnIndexer<usize>, Env1: ColAccessCap<F, CIx1>, L> {
env: &'a mut Env1,
lens: L,
phantom: PhantomData<(F, CIx1)>,
}Expand description
Generic sub-environment struct: don’t use directly. It’s an internal object to avoid copy-paste.
We can’t use SubEnv directly because rust is not idris: it is
impossible to instantiate SubEnv with two /completely/ different
lenses and then write proper trait implementations. Rust complains
about conflicting trait implementations.
Fields§
§env: &'a mut Env1§lens: L§phantom: PhantomData<(F, CIx1)>Implementations§
Source§impl<'a, F: PrimeField, CIx1: ColumnIndexer<usize>, Env1: ColAccessCap<F, CIx1>, L> SubEnv<'a, F, CIx1, Env1, L>
impl<'a, F: PrimeField, CIx1: ColumnIndexer<usize>, Env1: ColAccessCap<F, CIx1>, L> SubEnv<'a, F, CIx1, Env1, L>
pub fn new(env: &'a mut Env1, lens: L) -> Self
Trait Implementations§
Source§impl<'a, F: PrimeField, CIx1: ColumnIndexer<usize>, CIx2: ColumnIndexer<usize>, Env1: ColAccessCap<F, CIx1>, L: MPrism<Source = CIx1, Target = CIx2>> ColAccessCap<F, CIx2> for SubEnv<'a, F, CIx1, Env1, L>
impl<'a, F: PrimeField, CIx1: ColumnIndexer<usize>, CIx2: ColumnIndexer<usize>, Env1: ColAccessCap<F, CIx1>, L: MPrism<Source = CIx1, Target = CIx2>> ColAccessCap<F, CIx2> for SubEnv<'a, F, CIx1, Env1, L>
type Variable = <Env1 as ColAccessCap<F, CIx1>>::Variable
Source§fn assert_zero(&mut self, cst: Self::Variable)
fn assert_zero(&mut self, cst: Self::Variable)
Asserts that the value is zero.
Source§fn set_assert_mapper(
&mut self,
mapper: Box<dyn Fn(Self::Variable) -> Self::Variable>,
)
fn set_assert_mapper( &mut self, mapper: Box<dyn Fn(Self::Variable) -> Self::Variable>, )
Sets an assert predicate
f(X) such that when assert_zero is
called on x, it will actually perform assert_zero(f(x)).Source§fn read_column(&self, ix: CIx2) -> Self::Variable
fn read_column(&self, ix: CIx2) -> Self::Variable
Reads value from a column position.
Source§impl<'a, F: PrimeField, CIx1: ColumnIndexer<usize>, CIx2: ColumnIndexer<usize>, Env1: ColWriteCap<F, CIx1>, L: MPrism<Source = CIx1, Target = CIx2>> ColWriteCap<F, CIx2> for SubEnv<'a, F, CIx1, Env1, L>
impl<'a, F: PrimeField, CIx1: ColumnIndexer<usize>, CIx2: ColumnIndexer<usize>, Env1: ColWriteCap<F, CIx1>, L: MPrism<Source = CIx1, Target = CIx2>> ColWriteCap<F, CIx2> for SubEnv<'a, F, CIx1, Env1, L>
fn write_column(&mut self, ix: CIx2, value: &Self::Variable)
Source§impl<'a, F: PrimeField, CIx1: ColumnIndexer<usize>, CIx2: ColumnIndexer<usize>, Env1: HybridCopyCap<F, CIx1>, L: MPrism<Source = CIx1, Target = CIx2>> HybridCopyCap<F, CIx2> for SubEnv<'a, F, CIx1, Env1, L>
impl<'a, F: PrimeField, CIx1: ColumnIndexer<usize>, CIx2: ColumnIndexer<usize>, Env1: HybridCopyCap<F, CIx1>, L: MPrism<Source = CIx1, Target = CIx2>> HybridCopyCap<F, CIx2> for SubEnv<'a, F, CIx1, Env1, L>
Auto Trait Implementations§
impl<'a, F, CIx1, Env1, L> Freeze for SubEnv<'a, F, CIx1, Env1, L>where
L: Freeze,
impl<'a, F, CIx1, Env1, L> RefUnwindSafe for SubEnv<'a, F, CIx1, Env1, L>
impl<'a, F, CIx1, Env1, L> Send for SubEnv<'a, F, CIx1, Env1, L>
impl<'a, F, CIx1, Env1, L> Sync for SubEnv<'a, F, CIx1, Env1, L>
impl<'a, F, CIx1, Env1, L> Unpin for SubEnv<'a, F, CIx1, Env1, L>
impl<'a, F, CIx1, Env1, L> !UnwindSafe for SubEnv<'a, F, CIx1, Env1, L>
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