30 #include "../DdSpec.hpp" 31 #include "../util/IntSubset.hpp" 35 class SizeConstraint:
public DdSpec<SizeConstraint,int,2> {
37 IntSubset
const*
const constraint;
40 SizeConstraint(
int n, IntSubset
const& constraint)
41 : n(n), constraint(&constraint) {
45 SizeConstraint(
int n, IntSubset
const* constraint)
46 : n(n), constraint(constraint) {
50 int getRoot(
int& count)
const {
52 return (constraint && n < constraint->lowerBound()) ? 0 : n;
55 int getChild(
int& count,
int level,
int value)
const {
56 if (constraint == 0)
return (--level >= 1) ? level : -1;
59 if (count >= constraint->upperBound())
return 0;
63 if (count + level <= constraint->lowerBound())
return 0;
66 return (--level >= 1) ? level : constraint->contains(count) ? -1 : 0;