use proofman_common::BufferPool;
use proofman_fields::PrimeField64;
use crate::error::{ExecutorError, ExecutorResult, RwLockExt};
use crate::{state::ExecutionState, WitnessGenerator};
pub struct MainWitnessHandler;
impl MainWitnessHandler {
pub fn dispatch<F: PrimeField64>(
generator: &WitnessGenerator,
state: &ExecutionState<F>,
pctx: &proofman_common::ProofCtx<F>,
global_id: usize,
buffer_pool: &dyn BufferPool<F>,
stats_scope_id: u64,
) -> ExecutorResult<()> {
let main_instance = {
let main_instances =
state.instance_set.main_instances.read_or_poison("main_instances")?;
main_instances
.get(&global_id)
.cloned()
.ok_or(ExecutorError::InstanceNotFound { global_id })?
};
generator.compute_main_witness(
pctx,
state,
&main_instance,
buffer_pool.take_buffer(),
stats_scope_id,
)
}
}