solver_config

Macro solver_config 

Source
macro_rules! solver_config {
    ($name:ident {
        Literal = $literal:ty,
        LiteralStorage = $storage:ty,
        Assignment = $assignment:ty,
        VariableSelector = $selector:ty,
        Propagator = $propagator:ty,
        Restarter = $restarter:ty,
        ClauseManager = $manager:ty $(,)?
    }) => { ... };
    (
        <$($param:ident $(: $bound:path)?),* $(,)?>
        $name:ident {
            Literal = $literal:ty,
            LiteralStorage = $storage:ty,
            Assignment = $assignment:ty,
            VariableSelector = $selector:ty,
            Propagator = $propagator:ty,
            Restarter = $restarter:ty,
            ClauseManager = $manager:ty $(,)?
        }
    ) => { ... };
}
Expand description

A macro to conveniently define a struct that implements SolverConfig.

This reduces boilerplate when creating new solver configurations.

§Usage

§Without generic parameters:


solver_config!(MyCoolConfig {
    Literal = PackedLiteral,
    LiteralStorage = MyLitStore, // Using a placeholder for brevity
    Assignment = VecAssignment,
    VariableSelector = Vsids,
    Propagator = WatchedLiterals<PackedLiteral, MyLitStore, VecAssignment>,
    Restarter = Fixed<100>,
    ClauseManager = NoClauseManagement<PackedLiteral, MyLitStore>,
});

§With generic parameters:


solver_config!(
    <L: Literal, S: LiteralStorage<L>, A: Assignment>
    GenericTestConfig {
        Literal = L,
        LiteralStorage = S,
        Assignment = A,
        VariableSelector = Vsids<L>,
        Propagator = WatchedLiterals<L, S, A>,
        Restarter = Fixed<100>,
        ClauseManager = NoClauseManagement<L, S>,
    }
);