in prover/src/trace/trace_table.rs [281:316]
fn build_fragments(&mut self, fragment_length: usize) -> Vec<TraceTableFragment<B>> {
assert!(
fragment_length >= MIN_FRAGMENT_LENGTH,
"fragment length must be at least {}, but was {}",
MIN_FRAGMENT_LENGTH,
fragment_length
);
assert!(
fragment_length <= self.length(),
"length of a fragment cannot exceed {}, but was {}",
self.length(),
fragment_length
);
assert!(
fragment_length.is_power_of_two(),
"fragment length must be a power of 2"
);
let num_fragments = self.length() / fragment_length;
let mut fragment_data = (0..num_fragments).map(|_| Vec::new()).collect::<Vec<_>>();
self.trace.columns_mut().for_each(|column| {
for (i, fragment) in column.chunks_mut(fragment_length).enumerate() {
fragment_data[i].push(fragment);
}
});
fragment_data
.into_iter()
.enumerate()
.map(|(i, data)| TraceTableFragment {
index: i,
offset: i * fragment_length,
data,
})
.collect()
}