use crate::trace::decoder::{
NUM_HASHER_COLUMNS, NUM_OP_BATCH_FLAGS, NUM_OP_BITS, NUM_OP_BITS_EXTRA_COLS,
NUM_USER_OP_HELPERS,
};
#[repr(C)]
pub struct DecoderCols<T> {
pub addr: T,
pub op_bits: [T; NUM_OP_BITS],
pub hasher_state: [T; NUM_HASHER_COLUMNS],
pub in_span: T,
pub group_count: T,
pub op_index: T,
pub batch_flags: [T; NUM_OP_BATCH_FLAGS],
pub extra: [T; NUM_OP_BITS_EXTRA_COLS],
}
impl<T: Copy> DecoderCols<T> {
pub fn user_op_helpers(&self) -> [T; NUM_USER_OP_HELPERS] {
[
self.hasher_state[2],
self.hasher_state[3],
self.hasher_state[4],
self.hasher_state[5],
self.hasher_state[6],
self.hasher_state[7],
]
}
pub fn end_block_flags(&self) -> EndBlockFlags<T> {
EndBlockFlags {
is_loop_body: self.hasher_state[4],
is_loop: self.hasher_state[5],
is_call: self.hasher_state[6],
is_syscall: self.hasher_state[7],
}
}
}
#[repr(C)]
pub struct EndBlockFlags<T> {
pub is_loop_body: T,
pub is_loop: T,
pub is_call: T,
pub is_syscall: T,
}