binius_m3/gadgets/
structured.rs

1// Copyright 2025 Irreducible Inc.
2
3use binius_field::{PackedExtension, PackedField, PackedFieldIndexable, PackedSubfield};
4
5use crate::builder::{B32, B128, column::Col, error::Error, witness::TableWitnessSegment};
6
7/// Fills a structured [`crate::builder::structured::StructuredDynSize::Incrementing`] B32 column
8/// with values.
9///
10/// This is specialized for B32 because that is a common case, which can be implemented
11/// efficiently.
12pub fn fill_incrementing_b32<P>(
13	witness: &mut TableWitnessSegment<P>,
14	col: Col<B32>,
15) -> Result<(), Error>
16where
17	P: PackedField<Scalar = B128> + PackedExtension<B32>,
18	PackedSubfield<P, B32>: PackedFieldIndexable,
19{
20	let mut col_data = witness.get_scalars_mut(col)?;
21	let start_index = witness.index() << witness.log_size();
22	for (i, col_data_i) in col_data.iter_mut().enumerate() {
23		*col_data_i = B32::new((start_index + i) as u32);
24	}
25	Ok(())
26}