1
use conjure_cp::ast::SymbolTable;
2
use conjure_cp::ast::{Atom, Expression as Expr};
3
use conjure_cp::rule_engine::{
4
    ApplicationError::RuleNotApplicable, ApplicationResult, RuleEffect, register_rule,
5
};
6

            
7
use crate::types::int::IntDirect;
8

            
9
/// Replace a one-hot-represented reference with its bit vector.
10
#[register_rule("SAT", 9500, [Atomic])]
11
38411602
fn integer_decision_representation_direct(expr: &Expr, _: &SymbolTable) -> ApplicationResult {
12
38411602
    let Expr::Atomic(_, Atom::Reference(reference)) = expr else {
13
13192416
        return Err(RuleNotApplicable);
14
    };
15
25219186
    let state = reference
16
25219186
        .get_repr_as::<IntDirect>()
17
25219186
        .ok_or(RuleNotApplicable)?;
18
427714
    Ok(RuleEffect::pure(state.sat_int_expr()))
19
38411602
}