use vyre_foundation::ir::Program;
use super::nfa;
#[derive(Debug, Clone)]
pub struct ScanProgram {
pub program: Program,
pub transition_table: Vec<u32>,
pub epsilon_table: Vec<u32>,
pub plan: nfa::NfaPlan,
}
#[must_use]
pub fn build(patterns: &[&str], input_buf: &str, hit_buf: &str, input_len: u32) -> ScanProgram {
let plan = nfa::compile(patterns).for_input_len(input_len);
let program = nfa::nfa_scan(patterns, input_buf, hit_buf, input_len);
let transition_table = nfa::build_transition_table(patterns);
let epsilon_table = nfa::build_epsilon_table(patterns);
ScanProgram {
program,
transition_table,
epsilon_table,
plan,
}
}