OpBatch

Struct OpBatch 

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

A batch of operations in a span block.

An operation batch consists of up to 8 operation groups, with each group containing up to 9 operations or a single immediate value.

Implementations§

Source§

impl OpBatch

Source

pub fn ops(&self) -> &[Operation]

Returns a list of operations contained in this batch. This will include padding noops, if any.

Source

pub fn raw_ops(&self) -> impl Iterator<Item = &Operation>

Returns a list of operations contained in this batch, without any padding noops.

Note: the processor will insert NOOP operations to fill out the groups, so the true number of operations in the batch may be larger than the number of operations reported by this method.

Source

pub fn groups(&self) -> &[Felt; 8]

Returns a list of operation groups contained in this batch.

Each group is represented by a single field element.

Source

pub fn indptr(&self) -> &[usize; 9]

Returns a list of indexes in the ops array, marking the beginning and end of each group.

The array maintains the invariant that the i-th group (i <= BATCH_SIZE-1) is at self.ops[self.indptr[i]..self.indptr[i+1]].

Source

pub fn padding(&self) -> &[bool; 8]

Returns a list of flags marking whether each group of the batch contains a final padding Noop

Source

pub fn end_indices(&self) -> &[usize; 8]

Returns the end indexes of each group.

Source

pub fn num_groups(&self) -> usize

Returns the number of groups in this batch.

Source

pub fn op_idx_in_batch_to_group( &self, op_idx_in_batch: usize, ) -> Option<(usize, usize)>

Returns the (op_group_idx, op_idx_in_group) given an operation index in the batch. Returns None if the index is out of bounds.

This uses binary search (partition_point) on the group end indices to find the containing group. For batches with many operations, this can be expensive when called repeatedly.

§Performance Consideration

For iterating over all operations in a batch, prefer using iter_with_groups() which tracks group boundaries incrementally in O(1) per operation rather than O(log m) per operation, where m is the number of groups.

Source

pub fn iter_with_groups(&self) -> OpBatchIterator<'_>

Returns an iterator over operations in the batch with their group information.

This iterator yields tuples of (group_idx, op_idx_in_group, operation) for each operation in the batch, tracking group boundaries incrementally without binary search.

§Returns

An iterator that produces tuples containing:

  • group_idx: Index of the operation group within the batch (0-7)
  • op_idx_in_group: Index of the operation within its group (0-8)
  • operation: Reference to the operation itself

This is significantly more efficient than calling op_idx_in_batch_to_group() for each operation because it tracks group boundaries incrementally instead of using binary search for each operation (which would be O(n * log m) total, where m is the number of groups, and n is the number of operations).

Source

pub fn next_op_group_index( &self, after_this_group_index: usize, ) -> Option<usize>

Returns the index of the first group that contains operations that comes after after_this_group_index, if any.

Since groups either contain immediate values or operations, this is equivalent to skipping all groups that contain immediate values after after_this_group_index and returns the index of the first group that contains operations.

Trait Implementations§

Source§

impl Clone for OpBatch

Source§

fn clone(&self) -> OpBatch

Returns a duplicate of the value. Read more
1.0.0 · Source§

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

Performs copy-assignment from source. Read more
Source§

impl Debug for OpBatch

Source§

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

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

impl PartialEq for OpBatch

Source§

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

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

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

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
Source§

impl Eq for OpBatch

Source§

impl StructuralPartialEq for OpBatch

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

Source§

fn from(t: T) -> T

Returns the argument unchanged.

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

Source§

type Output = T

Should always be Self
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, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

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