43 namespace Gecode {
namespace Int {
namespace Arithmetic {
50 template<
class Ops,
bool minus>
107 template<
class Ops,
bool minus>
114 template<
class Ops,
bool minus>
128 template<
class Ops,
bool minus>
135 template<
class Ops,
bool minus>
141 template<
class Ops,
bool minus>
157 assert((x0.
min() < 0) && (x0.
max() > 0));
158 assert((x1.
min() < 0) && (x1.
max() > 0));
177 if (static_cast<unsigned int>(ops.exp()) >=
sizeof(
int) * CHAR_BIT) {
182 ops.exp(ops.even() ? 30 : 31);
185 if (ops.exp() == 0) {
188 }
else if (ops.exp() == 1) {
193 assert(ops.exp() > 1);
208 if ((x0.
min() >= 0) || (x1.
min() >= 0))
211 if ((x0.
max() <= 0) || (x1.
max() <= 0))
214 assert((x0.
min() < 0) && (x0.
max() > 0));
215 assert((x1.
min() < 0) && (x1.
max() > 0));
217 (void)
new (home)
NrootBnd(home,x0,x1,ops);
237 if ((x0.min() >= 0) || (x1.min() >= 0))
240 if ((x0.max() <= 0) || (x1.max() <= 0))
268 return ops.tpow(x+1)-1;
283 return (x < 0) ? -ops.cnroot(-x) : ops.fnroot(x);
287 return (x < 0) ? -ops.cnroot(-x) : ops.fnroot(x);
291 template<
class Ops,
bool minus>
298 template<
class Ops,
bool minus>
313 template<
class Ops,
bool minus>
320 template<
class Ops,
bool minus>
326 template<
class Ops,
bool minus>
337 template<
class Ops,
bool minus>
376 if (static_cast<unsigned int>(ops.exp()) >=
sizeof(
int) * CHAR_BIT) {
381 ops.exp(ops.even() ? 30 : 31);
384 if (ops.exp() == 0) {
387 }
else if (ops.exp() == 1) {
392 assert(ops.exp() > 1);
407 if ((x0.
min() >= 0) || (x1.
min() >= 0))
410 if ((x0.
max() <= 0) || (x1.
max() <= 0))
413 assert((x0.
min() < 0) && (x0.
max() > 0));
414 assert((x1.
min() < 0) && (x1.
max() > 0));
416 (void)
new (home)
NrootDom(home,x0,x1,ops);
447 if ((x0.min() >= 0) || (x1.min() >= 0))
450 if ((x0.max() <= 0) || (x1.max() <= 0))
455 return x0.assigned() && x1.assigned() ? home.
ES_SUBSUMED(*
this)
int min(int x) const
Perform mapping of minimum.
#define GECODE_REWRITE(prop, post)
Rewrite propagator by executing post function.
void mod(Home home, IntVar x0, IntVar x1, IntVar x2, IntConLevel icl)
Post propagator for .
int max(int x) const
Perform mapping of maximum.
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.
Positive bounds consistent n-th root propagator.
ExecStatus ES_NOFIX_PARTIAL(Propagator &p, const ModEventDelta &med)
Propagator p has not computed partial fixpoint
NrootDom(Space &home, bool share, NrootDom< Ops > &p)
Constructor for cloning p.
static ExecStatus post(Home home, View0 x0, View1 x1)
Post domain consistent propagator .
int ModEvent
Type for modification events.
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
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.
virtual Actor * copy(Space &home, bool share)
Copy propagator during cloning.
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 .
int max(void) const
Return maximum of domain.
#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)
virtual Actor * copy(Space &home, bool share)
Copy propagator during cloning.
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.
NrootBnd(Space &home, bool share, NrootBnd< Ops > &p)
Constructor for cloning p.
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.
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)
virtual PropCost cost(const Space &home, const ModEventDelta &med) const
Cost function.
const Gecode::PropCond PC_INT_DOM
Propagate when domain changes.
int min(void) const
Return minimum of domain.
int max(int x) const
Perform mapping of maximum.
virtual Actor * copy(Space &home, bool share)
Copy propagator during cloning.
ExecStatus prop_nroot_bnd(Space &home, IntView x0, IntView x1, const Ops &ops)
Mapping ranges to powers.
virtual Actor * copy(Space &home, bool share)
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.
Integer view for integer variables.
Node * x
Pointer to corresponding Boolean expression node.
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.
NrootPlusDom(Space &home, bool share, NrootPlusDom< Ops, minus > &p)
Constructor for cloning p.
Range iterator for mapping ranges.
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.
virtual PropCost cost(const Space &home, const ModEventDelta &med) const
Cost function.
int min(int x) const
Perform mapping of minimum.
ModEvent gq(Space &home, int n)
Restrict domain values to be greater or equal than n.
int med(void) const
Return median of domain (greatest element not greater than the median)
virtual ExecStatus propagate(Space &home, const ModEventDelta &med)
Perform propagation.
Propagation has not computed fixpoint.
RangesMapPow(const Ops &o)
Initialize with operations o.
Gecode toplevel namespace
Mapping integer to n-th root.
int ModEventDelta
Modification event deltas.
Home class for posting propagators
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.
NrootPlusBnd(Space &home, bool share, NrootPlusBnd< Ops, minus > &p)
Constructor for cloning p.