39 namespace Gecode {
namespace Int {
namespace Arithmetic {
46 template<
class Ops,
bool minus>
103 template<
class Ops,
bool minus>
110 template<
class Ops,
bool minus>
124 template<
class Ops,
bool minus>
131 template<
class Ops,
bool minus>
137 template<
class Ops,
bool minus>
153 assert((x0.
min() < 0) && (x0.
max() > 0));
154 assert((x1.
min() < 0) && (x1.
max() > 0));
173 if (static_cast<unsigned int>(ops.exp()) >=
sizeof(
int) * CHAR_BIT) {
178 ops.exp(ops.even() ? 30 : 31);
181 if (ops.exp() == 0) {
184 }
else if (ops.exp() == 1) {
189 assert(ops.exp() > 1);
204 if ((x0.
min() >= 0) || (x1.
min() >= 0))
207 if ((x0.
max() <= 0) || (x1.
max() <= 0))
210 assert((x0.
min() < 0) && (x0.
max() > 0));
211 assert((x1.
min() < 0) && (x1.
max() > 0));
213 (void)
new (home)
NrootBnd(home,x0,x1,ops);
264 return ops.tpow(x+1)-1;
279 return (x < 0) ? -ops.cnroot(-x) : ops.fnroot(x);
283 return (x < 0) ? -ops.cnroot(-x) : ops.fnroot(x);
287 template<
class Ops,
bool minus>
294 template<
class Ops,
bool minus>
309 template<
class Ops,
bool minus>
316 template<
class Ops,
bool minus>
322 template<
class Ops,
bool minus>
333 template<
class Ops,
bool minus>
372 if (static_cast<unsigned int>(ops.exp()) >=
sizeof(
int) * CHAR_BIT) {
377 ops.exp(ops.even() ? 30 : 31);
380 if (ops.exp() == 0) {
383 }
else if (ops.exp() == 1) {
388 assert(ops.exp() > 1);
403 if ((x0.
min() >= 0) || (x1.
min() >= 0))
406 if ((x0.
max() <= 0) || (x1.
max() <= 0))
409 assert((x0.
min() < 0) && (x0.
max() > 0));
410 assert((x1.
min() < 0) && (x1.
max() > 0));
412 (void)
new (home)
NrootDom(home,x0,x1,ops);
ModEvent inter_r(Space &home, I &i, bool depends=true)
Intersect domain with ranges described by i.
void mod(Home home, IntVar x0, IntVar x1, IntVar x2, IntPropLevel ipl)
Post propagator for .
#define GECODE_REWRITE(prop, post)
Rewrite propagator by executing post function.
int max(int x) const
Perform mapping of maximum.
virtual PropCost cost(const Space &home, const ModEventDelta &med) const
Cost function.
virtual Actor * copy(Space &home)
Copy propagator during cloning.
ExecStatus ES_SUBSUMED(Propagator &p)
Domain consistent n-th root propagator.
ModEvent eq(Space &home, int n)
Restrict domain values to be equal to n.
NrootPlusDom(Space &home, NrootPlusDom< Ops, minus > &p)
Constructor for cloning p.
Positive bounds consistent n-th root propagator.
ExecStatus ES_NOFIX_PARTIAL(Propagator &p, const ModEventDelta &med)
Propagator p has not computed partial fixpoint
static ExecStatus post(Home home, View0 x0, View1 x1)
Post domain consistent propagator .
int ModEvent
Type for modification events.
NrootPlusBnd(Space &home, NrootPlusBnd< Ops, minus > &p)
Constructor for cloning p.
static ExecStatus post(Home home, IntView x0, IntView x1, Ops ops)
Post propagator.
RangesMapNroot(const Ops &o)
Initialize with operations o.
Range iterator for integer variable views
int min(int x) const
Perform mapping of minimum.
static ExecStatus post(Home home, IntView x0, IntView x1, Ops ops)
Post propagator.
static ExecStatus post(Home home, IntView x0, IntView x1, Ops ops)
Post propagator.
Propagation has computed fixpoint.
static PropCost unary(PropCost::Mod m)
Single variable for modifier pcm.
const int max
Largest allowed integer value.
const int min
Smallest allowed integer value.
Base-class for both propagators and branchers.
static ExecStatus post(Home home, View0 x0, View1 x1)
Post bounds consistent propagator .
#define GECODE_ES_CHECK(es)
Check whether execution status es is failed or subsumed, and forward failure or subsumption.
bool same(const CachedView< View > &x, const CachedView< View > &y)
ExecStatus prop_nroot_plus_bnd(Space &home, IntView x0, IntView x1, const Ops &ops)
ModEvent le(Space &home, int n)
Restrict domain values to be less than n.
int p
Number of positive literals for node type.
Domain consistent n-th root propagator.
Execution has resulted in failure.
virtual ExecStatus propagate(Space &home, const ModEventDelta &med)
Perform propagation.
ModEvent lq(Space &home, int n)
Restrict domain values to be less or equal than n.
int med(void) const
Return median of domain (greatest element not greater than the median)
virtual Actor * copy(Space &home)
Copy propagator during cloning.
const Gecode::PropCond PC_INT_BND
Propagate when minimum or maximum of a view changes.
const Gecode::ModEvent ME_INT_VAL
Domain operation has resulted in a value (assigned variable)
ModEventDelta med
A set of modification events (used during propagation)
const Gecode::PropCond PC_INT_DOM
Propagate when domain changes.
int min(void) const
Return minimum of domain.
ExecStatus prop_nroot_bnd(Space &home, IntView x0, IntView x1, const Ops &ops)
Mapping ranges to powers.
virtual Actor * copy(Space &home)
Copy propagator during cloning.
#define GECODE_ME_CHECK(me)
Check whether modification event me is failed, and forward failure.
virtual ExecStatus propagate(Space &home, const ModEventDelta &med)
Perform propagation.
virtual ExecStatus propagate(Space &home, const ModEventDelta &med)
Perform propagation.
Post propagator for SetVar SetOpType SetVar SetRelType r
int min(int x) const
Perform mapping of minimum.
Integer view for integer variables.
int max(int x) const
Perform mapping of maximum.
bool assigned(void) const
Test whether view is assigned.
const Gecode::ModEvent ME_INT_DOM
Domain operation has changed the domain.
static ModEvent me(const ModEventDelta &med)
Return modification event for view type in med.
Range iterator for mapping ranges.
NrootBnd(Space &home, NrootBnd< Ops > &p)
Constructor for cloning p.
bool me_modified(ModEvent me)
Check whether modification event me describes variable modification.
static ExecStatus post(Home home, IntView x0, IntView x1, Ops ops)
Post propagator.
ModEvent gq(Space &home, int n)
Restrict domain values to be greater or equal than n.
Post propagator for SetVar x
virtual ExecStatus propagate(Space &home, const ModEventDelta &med)
Perform propagation.
virtual PropCost cost(const Space &home, const ModEventDelta &med) const
Cost function.
Propagation has not computed fixpoint.
RangesMapPow(const Ops &o)
Initialize with operations o.
Gecode toplevel namespace
int max(void) const
Return maximum of domain.
Mapping integer to n-th root.
NrootDom(Space &home, NrootDom< Ops > &p)
Constructor for cloning p.
int ModEventDelta
Modification event deltas.
Home class for posting propagators
virtual Actor * copy(Space &home)
Copy propagator during cloning.
static PropCost binary(PropCost::Mod m)
Two variables for modifier pcm.
Bounds consistent n-th root propagator.
bool me_failed(ModEvent me)
Check whether modification event me is failed.