use std::rc::Rc;
use ::{PsResult,PuzzleSearch,Val,VarToken};
pub trait Constraint {
fn vars<'a>(&'a self) -> Box<Iterator<Item=&'a VarToken> + 'a>;
fn on_assigned(&self, _search: &mut PuzzleSearch, _var: VarToken, _val: Val)
-> PsResult<()> {
Ok(())
}
fn on_updated(&self, _search: &mut PuzzleSearch) -> PsResult<()> {
Ok(())
}
fn substitute(&self, from: VarToken, to: VarToken)
-> PsResult<Rc<Constraint>>;
}
pub use self::alldifferent::AllDifferent;
pub use self::equality::Equality;
pub use self::unify::Unify;
mod alldifferent;
mod equality;
mod unify;