use std::fmt::Debug;
use runner::Engine;
use runner::program::TableInsts;
#[derive(Clone, Debug)]
pub struct AnchoredEngine<Ret> {
prog: TableInsts<Ret>,
}
impl<Ret: Copy + Debug> AnchoredEngine<Ret> {
pub fn new(prog: TableInsts<Ret>) -> AnchoredEngine<Ret> {
AnchoredEngine {
prog: prog,
}
}
}
impl<Ret: Copy + Debug + 'static> Engine<Ret> for AnchoredEngine<Ret> {
fn find(&self, s: &str) -> Option<(usize, usize, Ret)> {
let input = s.as_bytes();
if self.prog.is_empty() {
None
} else if let Ok(end) = self.prog.find_from(input, 0, 0) {
Some((0, end.0, end.1))
} else {
None
}
}
fn clone_box(&self) -> Box<Engine<Ret>> {
Box::new(self.clone())
}
}