#![allow(clippy::new_ret_no_self)]
use crate::{
component::{AnyComponent, ExecResult},
state::StateReq,
Problem, State,
};
pub mod common;
pub mod cro;
pub mod logical;
pub use common::{ChangeOf, EveryN, LessThanN, OptimumReached, RandomChance};
pub use logical::{And, Not, Or};
pub trait Condition<P: Problem>: AnyComponent {
#[allow(unused_variables)]
fn init(&self, problem: &P, state: &mut State<P>) -> ExecResult<()> {
Ok(())
}
#[allow(unused_variables)]
fn require(&self, problem: &P, state_req: &StateReq<P>) -> ExecResult<()> {
Ok(())
}
fn evaluate(&self, problem: &P, state: &mut State<P>) -> ExecResult<bool>;
}
erased_serde::serialize_trait_object!(<P: Problem> Condition<P>);
dyn_clone::clone_trait_object!(<P: Problem> Condition<P>);