41namespace Gecode {
namespace Float {
49 FloatVarImp::FloatVarImp(Space& home,
const FloatVal& d)
50 : FloatVarImpBase(home),
dom(
d) {}
53 FloatVarImp::FloatVarImp(Space& home, FloatVarImp&
x)
54 : FloatVarImpBase(home,
x),
dom(
x.
dom) {}
63 FloatVarImp::domain(
void)
const {
67 FloatVarImp::min(
void)
const {
71 FloatVarImp::max(
void)
const {
75 FloatVarImp::val(
void)
const {
79 FloatVarImp::med(
void)
const {
84 FloatVarImp::assigned(
void)
const {
89 FloatVarImp::size(
void)
const {
100 FloatVarImp::zero_in(
void)
const {
101 return dom.zero_in();
104 FloatVarImp::in(FloatNum
n)
const {
108 FloatVarImp::in(
const FloatVal&
n)
const {
118 FloatVarImp::min(
const Delta& d) {
119 return static_cast<const FloatDelta&
>(
d).
min();
122 FloatVarImp::max(
const Delta& d) {
123 return static_cast<const FloatDelta&
>(
d).
max();
133 FloatVarImp::gq(Space& home, FloatNum
n) {
134 if (
n >
dom.max())
return fail(home);
136 FloatDelta
d(
dom.min(),
n);
141 (me == ME_FLOAT_BND));
142 return notify(home,me,d);
145 FloatVarImp::gq(Space& home,
const FloatVal&
n) {
146 if (
n.min() >
dom.max())
return fail(home);
148 FloatDelta
d(
dom.min(),
n.min());
153 (me == ME_FLOAT_BND));
154 return notify(home,me,d);
159 FloatVarImp::lq(Space& home, FloatNum
n) {
160 if (
n <
dom.min())
return fail(home);
162 FloatDelta
d(
n,
dom.max());
167 (me == ME_FLOAT_BND));
168 return notify(home,me,d);
171 FloatVarImp::lq(Space& home,
const FloatVal&
n) {
172 if (
n.max() <
dom.min())
return fail(home);
174 FloatDelta
d(
n.max(),
dom.max());
179 (me == ME_FLOAT_BND));
180 return notify(home,me,d);
185 FloatVarImp::eq(Space& home, FloatNum
n) {
192 return notify(home,ME_FLOAT_VAL,d);
195 FloatVarImp::eq(Space& home,
const FloatVal&
n) {
205 (me == ME_FLOAT_BND));
206 return notify(home,me,d);
216 FloatVarImp::copy(Space& home) {
217 return copied() ?
static_cast<FloatVarImp*
>(forward())
218 : perform_copy(home);
223 FloatVarImp::perform_copy(Space& home) {
224 return new (home) FloatVarImp(home, *
this);
228 FloatVarImp::med(ModEvent me) {
229 return FloatVarImpBase::med(me);
int n
Number of negative literals for node type.
Node * x
Pointer to corresponding Boolean expression node.
int ModEventDelta
Modification event deltas.
double FloatNum
Floating point number base type.
const FloatNum max
Largest allowed float value.
const FloatNum min
Smallest allowed float value.
bool subset(const FloatVal &x, const FloatVal &y)
const Gecode::ModEvent ME_FLOAT_VAL
Domain operation has resulted in a value (assigned variable)
bool overlap(const FloatVal &x, const FloatVal &y)
FloatVal intersect(const FloatVal &x, const FloatVal &y)
const Gecode::ModEvent ME_FLOAT_BND
Domain operation has changed the minimum or maximum of the domain.
const Gecode::ModEvent ME_FLOAT_NONE
Domain operation has not changed domain.
bool assigned(View x, int v)
Whether x is assigned to value v.
Gecode toplevel namespace
void dom(Home home, FloatVar x, FloatVal n)
Propagates .
int ModEvent
Type for modification events.
#define GECODE_ASSUME(p)
Assert certain property.