1
2
3
4
5
6
7
8
9
10
11
12
13
use super::genome::genes::gene::Gene;
use crate::engines::engine_context::EngineContext;

pub trait Engine<G: Gene<G, A>, A, T: Clone> {
    fn fit<F: Fn(&EngineContext<G, A, T>) -> bool>(&self, limit: F) -> EngineContext<G, A, T>;

    fn start(&self) -> EngineContext<G, A, T>;

    fn stop(&self, output: &mut EngineContext<G, A, T>) -> EngineContext<G, A, T> {
        output.timer.stop();
        output.clone()
    }
}