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>,
}
);