use crate::VarId;
use std::fmt;
#[derive(Debug, Clone)]
pub enum Constraint {
Equality(VarId, VarId), Inequality(VarId, VarId), Set(VarId, i32), Forbid(VarId, i32), }
impl fmt::Display for Constraint {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
match self {
Constraint::Equality(var1, var2) => write!(f, "{} == {}", var1, var2),
Constraint::Inequality(var1, var2) => write!(f, "{} != {}", var1, var2),
Constraint::Set(var, value) => write!(f, "{} == {}", var, value),
Constraint::Forbid(var, value) => write!(f, "{} != {}", var, value),
}
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
pub struct ConstraintId(pub usize);
impl fmt::Display for ConstraintId {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
write!(f, "c{}", self.0)
}
}
#[derive(Debug, Clone)]
pub(super) struct ConstraintEntry {
pub(super) active: bool,
pub(super) kind: Constraint,
}