Generated on for Gecode by doxygen 1.17.0
var-imp.hpp
Go to the documentation of this file.
1/*
2 * CAUTION:
3 * This file has been automatically generated. Do not edit,
4 * edit the following files instead:
5 * - ./gecode/int/var-imp/int.vis
6 * - ./gecode/int/var-imp/bool.vis
7 * - ./gecode/set/var-imp/set.vis
8 * - ./gecode/float/var-imp/float.vis
9 *
10 * This file contains generated code fragments which are
11 * copyrighted as follows:
12 *
13 * Main author:
14 * Christian Schulte <schulte@gecode.dev>
15 *
16 * Contributing authors:
17 * Kris Coester <kris.coester@sap.com>
18 * Alexander Shepil <alexander.shepil@sap.com>
19 * Mikael Zayenz Lagerkvist <lagerkvist@gecode.dev>
20 *
21 * Copyright:
22 * Christian Schulte, 2007
23 * Kris Coester, 2024
24 * Alexander Shepil, 2024
25 * Mikael Zayenz Lagerkvist, 2026
26 *
27 * The generated code fragments are part of Gecode, the generic
28 * constraint development environment:
29 * http://www.gecode.dev
30 *
31 * Permission is hereby granted, free of charge, to any person obtaining
32 * a copy of this software and associated documentation files (the
33 * "Software"), to deal in the Software without restriction, including
34 * without limitation the rights to use, copy, modify, merge, publish,
35 * distribute, sublicense, and/or sell copies of the Software, and to
36 * permit persons to whom the Software is furnished to do so, subject to
37 * the following conditions:
38 *
39 * The above copyright notice and this permission notice shall be
40 * included in all copies or substantial portions of the Software.
41 *
42 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
43 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
44 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
45 * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
46 * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
47 * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
48 * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
49 *
50 */
51
52#ifdef GECODE_HAS_INT_VARS
53namespace Gecode { namespace Int {
55 class IntVarImpBase : public Gecode::VarImp<Gecode::Int::IntVarImpConf> {
56 protected:
59 public:
61 IntVarImpBase(void);
65
66
78 void subscribe(Gecode::Space& home, Gecode::Propagator& p, Gecode::PropCond pc, bool assigned, bool schedule);
80 void subscribe(Gecode::Space& home, Gecode::Advisor& a, bool assigned, bool failed);
93 void reschedule(Gecode::Space& home, Gecode::Propagator& p, Gecode::PropCond pc, bool assigned);
95 };
96}}
97#endif
98#ifdef GECODE_HAS_INT_VARS
99namespace Gecode { namespace Int {
101 class BoolVarImpBase : public Gecode::VarImp<Gecode::Int::BoolVarImpConf> {
102 protected:
105 public:
107 BoolVarImpBase(void);
111
112
124 void subscribe(Gecode::Space& home, Gecode::Propagator& p, Gecode::PropCond pc, bool assigned, bool schedule);
126 void subscribe(Gecode::Space& home, Gecode::Advisor& a, bool assigned, bool failed);
139 void reschedule(Gecode::Space& home, Gecode::Propagator& p, Gecode::PropCond pc, bool assigned);
141 };
142}}
143#endif
144#ifdef GECODE_HAS_SET_VARS
145namespace Gecode { namespace Set {
147 class SetVarImpBase : public Gecode::VarImp<Gecode::Set::SetVarImpConf> {
148 protected:
151 public:
153 SetVarImpBase(void);
157
158
170 void subscribe(Gecode::Space& home, Gecode::Propagator& p, Gecode::PropCond pc, bool assigned, bool schedule);
172 void subscribe(Gecode::Space& home, Gecode::Advisor& a, bool assigned, bool failed);
185 void reschedule(Gecode::Space& home, Gecode::Propagator& p, Gecode::PropCond pc, bool assigned);
187 };
188}}
189#endif
190#ifdef GECODE_HAS_FLOAT_VARS
191namespace Gecode { namespace Float {
193 class FloatVarImpBase : public Gecode::VarImp<Gecode::Float::FloatVarImpConf> {
194 protected:
197 public:
199 FloatVarImpBase(void);
203
204
216 void subscribe(Gecode::Space& home, Gecode::Propagator& p, Gecode::PropCond pc, bool assigned, bool schedule);
218 void subscribe(Gecode::Space& home, Gecode::Advisor& a, bool assigned, bool failed);
231 void reschedule(Gecode::Space& home, Gecode::Propagator& p, Gecode::PropCond pc, bool assigned);
233 };
234}}
235#endif
236#ifdef GECODE_HAS_INT_VARS
237namespace Gecode { namespace Int {
238
239 forceinline
241
242 forceinline
245
246 forceinline
249
250 forceinline void
254 forceinline void
255 IntVarImpBase::subscribe(Gecode::Space& home, Gecode::Advisor& a, bool assigned, bool failed) {
257 }
258
259 forceinline void
263 forceinline void
267
268 forceinline Gecode::ModEvent
294
295}}
296#endif
297#ifdef GECODE_HAS_INT_VARS
298namespace Gecode { namespace Int {
299
300 forceinline
302
303 forceinline
306
307 forceinline
310
311 forceinline void
315 forceinline void
316 BoolVarImpBase::subscribe(Gecode::Space& home, Gecode::Advisor& a, bool assigned, bool failed) {
318 }
319
320 forceinline void
324 forceinline void
328
329 forceinline Gecode::ModEvent
337
338}}
339#endif
340#ifdef GECODE_HAS_SET_VARS
341namespace Gecode { namespace Set {
342
343 forceinline
345
346 forceinline
349
350 forceinline
353
354 forceinline void
358 forceinline void
359 SetVarImpBase::subscribe(Gecode::Space& home, Gecode::Advisor& a, bool assigned, bool failed) {
361 }
362
363 forceinline void
367 forceinline void
371
372 forceinline Gecode::ModEvent
374 switch (me) {
375 case ME_SET_VAL:
376 // Conditions: VAL, CARD, CLUB, CGLB, ANY
379 return ME_SET_FAILED;
380 cancel(home);
381 break;
382 case ME_SET_CARD:
383 // Conditions: CARD, CLUB, CGLB, ANY
386 return ME_SET_FAILED;
387 break;
388 case ME_SET_LUB:
389 // Conditions: CLUB, ANY
393 return ME_SET_FAILED;
394 break;
395 case ME_SET_GLB:
396 // Conditions: CGLB, ANY
399 return ME_SET_FAILED;
400 break;
401 case ME_SET_BB:
402 // Conditions: CLUB, CGLB, ANY
405 return ME_SET_FAILED;
406 break;
407 case ME_SET_CLUB:
408 // Conditions: CARD, CLUB, CGLB, ANY
411 return ME_SET_FAILED;
412 break;
413 case ME_SET_CGLB:
414 // Conditions: CARD, CLUB, CGLB, ANY
417 return ME_SET_FAILED;
418 break;
419 case ME_SET_CBB:
420 // Conditions: CARD, CLUB, CGLB, ANY
423 return ME_SET_FAILED;
424 break;
425 default: GECODE_NEVER;
426 }
427 return me;
428 }
429
430}}
431#endif
432#ifdef GECODE_HAS_FLOAT_VARS
433namespace Gecode { namespace Float {
434
435 forceinline
437
438 forceinline
441
442 forceinline
445
446 forceinline void
450 forceinline void
451 FloatVarImpBase::subscribe(Gecode::Space& home, Gecode::Advisor& a, bool assigned, bool failed) {
453 }
454
455 forceinline void
459 forceinline void
463
464 forceinline Gecode::ModEvent
484
485}}
486#endif
487namespace Gecode {
488
489 forceinline void
490 Space::recover_noidx(void) {
492 static_cast<VarImp<NoIdxVarImpConf>*>(pc.c.vars_noidx);
493 while (x != nullptr) {
494 VarImp<NoIdxVarImpConf>* n = x->next();
495 x->b.base = nullptr; x->u.idx[0] = 0;
496 if (sizeof(ActorLink**) > sizeof(unsigned int))
497 *(1+&x->u.idx[0]) = 0;
498 x = n;
499 }
500 }
501
502 forceinline void
503 Space::update(ActorLink** sub) {
504#ifdef GECODE_HAS_INT_VARS
505 Gecode::VarImp<Gecode::Int::IntVarImpConf>::update(*this,sub);
506#endif
507#ifdef GECODE_HAS_INT_VARS
508 Gecode::VarImp<Gecode::Int::BoolVarImpConf>::update(*this,sub);
509#endif
510#ifdef GECODE_HAS_SET_VARS
511 Gecode::VarImp<Gecode::Set::SetVarImpConf>::update(*this,sub);
512#endif
513#ifdef GECODE_HAS_FLOAT_VARS
514 Gecode::VarImp<Gecode::Float::FloatVarImpConf>::update(*this,sub);
515#endif
516 }
517
518 forceinline void
519 Space::recover(Space& source) {
520 ActorLink* clone_lists[2] = {&pl, &bl};
521 for (int i=0; i<2; i++) {
522 ActorLink* l = clone_lists[i];
523 ActorLink* c = l->next();
524 while (c != l) {
525 ActorLink* n = c->next();
526 (void) Actor::cast(c)->dispose(*this);
527 c = n;
528 }
529 l->init();
530 }
531 while (pc.c.local != nullptr) {
532 LocalObject* l = pc.c.local;
533 ActorLink* n = l->next();
534 pc.c.local = (n == nullptr) ? nullptr : LocalObject::cast(n);
535 ActorLink* fwd = l->prev();
536 if (fwd != nullptr) {
537 (void) Actor::cast(fwd)->dispose(*this);
538 l->prev(nullptr);
539 }
540 }
541
542 ActorLink* lists[2] = {&source.pl, &source.bl};
543 for (int i=0; i<2; i++) {
544 ActorLink* l = lists[i];
545 ActorLink* p_a = l;
546 ActorLink* c_a = p_a->next();
547 while (c_a != l) {
548 if (i == 0) {
549 Propagator* p = Propagator::cast(c_a);
550 if (p->u.advisors != nullptr) {
551 ActorLink* a = p->u.advisors;
552 p->u.advisors = nullptr;
553 do {
554 a->prev(p); a = a->next();
555 } while (a != nullptr);
556 }
557 }
558 ActorLink* fwd = c_a->prev();
559 if (fwd != p_a) {
560 c_a->prev(p_a);
561 }
562 p_a = c_a; c_a = c_a->next();
563 }
564 }
565
566 ActorLink** sub = static_cast<ActorLink**>(mm.subscriptions());
567 recover_noidx();
568#ifdef GECODE_HAS_INT_VARS
569 Gecode::VarImp<Gecode::Int::IntVarImpConf>::recover(*this,sub);
570#endif
571#ifdef GECODE_HAS_INT_VARS
572 Gecode::VarImp<Gecode::Int::BoolVarImpConf>::recover(*this,sub);
573#endif
574#ifdef GECODE_HAS_SET_VARS
575 Gecode::VarImp<Gecode::Set::SetVarImpConf>::recover(*this,sub);
576#endif
577#ifdef GECODE_HAS_FLOAT_VARS
578 Gecode::VarImp<Gecode::Float::FloatVarImpConf>::recover(*this,sub);
579#endif
580 }
581}
582// STATISTICS: kernel-var
Base-class for advisors.
Definition core.hpp:1301
Generic domain change information to be supplied to advisors.
Definition core.hpp:209
void subscribe(Gecode::Space &home, Gecode::Propagator &p, Gecode::PropCond pc, bool assigned, bool schedule)
Subscribe propagator p with propagation condition pc.
Definition var-imp.hpp:447
FloatVarImpBase(Gecode::Space &home, FloatVarImpBase &x)
Constructor for cloning x.
Definition var-imp.hpp:443
FloatVarImpBase(void)
Constructor for creating static instance of variable.
Definition var-imp.hpp:436
static void schedule(Gecode::Space &home, Gecode::Propagator &p, Gecode::ModEvent me)
Schedule propagator p.
Definition var-imp.hpp:456
Gecode::ModEvent notify(Gecode::Space &home, Gecode::ModEvent me, Gecode::Delta &d)
Notify that variable implementation has been modified with modification event me and delta informatio...
Definition var-imp.hpp:465
void reschedule(Gecode::Space &home, Gecode::Propagator &p, Gecode::PropCond pc, bool assigned)
Re-schedule propagator p.
Definition var-imp.hpp:460
Configuration for Float-variable implementations.
Definition var-type.hpp:424
BoolVarImpBase(void)
Constructor for creating static instance of variable.
Definition var-imp.hpp:301
Gecode::ModEvent notify(Gecode::Space &home, Gecode::ModEvent me, Gecode::Delta &d)
Notify that variable implementation has been modified with modification event me and delta informatio...
Definition var-imp.hpp:330
void subscribe(Gecode::Space &home, Gecode::Propagator &p, Gecode::PropCond pc, bool assigned, bool schedule)
Subscribe propagator p with propagation condition pc.
Definition var-imp.hpp:312
BoolVarImpBase(Gecode::Space &home, BoolVarImpBase &x)
Constructor for cloning x.
Definition var-imp.hpp:308
static void schedule(Gecode::Space &home, Gecode::Propagator &p, Gecode::ModEvent me)
Schedule propagator p.
Definition var-imp.hpp:321
void reschedule(Gecode::Space &home, Gecode::Propagator &p, Gecode::PropCond pc, bool assigned)
Re-schedule propagator p.
Definition var-imp.hpp:325
Configuration for Bool-variable implementations.
Definition var-type.hpp:346
void subscribe(Gecode::Space &home, Gecode::Propagator &p, Gecode::PropCond pc, bool assigned, bool schedule)
Subscribe propagator p with propagation condition pc.
Definition var-imp.hpp:251
IntVarImpBase(void)
Constructor for creating static instance of variable.
Definition var-imp.hpp:240
static void schedule(Gecode::Space &home, Gecode::Propagator &p, Gecode::ModEvent me)
Schedule propagator p.
Definition var-imp.hpp:260
IntVarImpBase(Gecode::Space &home, IntVarImpBase &x)
Constructor for cloning x.
Definition var-imp.hpp:247
void reschedule(Gecode::Space &home, Gecode::Propagator &p, Gecode::PropCond pc, bool assigned)
Re-schedule propagator p.
Definition var-imp.hpp:264
Gecode::ModEvent notify(Gecode::Space &home, Gecode::ModEvent me, Gecode::Delta &d)
Notify that variable implementation has been modified with modification event me and delta informatio...
Definition var-imp.hpp:269
Configuration for Int-variable implementations.
Definition var-type.hpp:307
Base-class for propagators.
Definition core.hpp:1073
SetVarImpBase(Gecode::Space &home, SetVarImpBase &x)
Constructor for cloning x.
Definition var-imp.hpp:351
void reschedule(Gecode::Space &home, Gecode::Propagator &p, Gecode::PropCond pc, bool assigned)
Re-schedule propagator p.
Definition var-imp.hpp:368
Gecode::ModEvent notify(Gecode::Space &home, Gecode::ModEvent me, Gecode::Delta &d)
Notify that variable implementation has been modified with modification event me and delta informatio...
Definition var-imp.hpp:373
SetVarImpBase(void)
Constructor for creating static instance of variable.
Definition var-imp.hpp:344
void subscribe(Gecode::Space &home, Gecode::Propagator &p, Gecode::PropCond pc, bool assigned, bool schedule)
Subscribe propagator p with propagation condition pc.
Definition var-imp.hpp:355
static void schedule(Gecode::Space &home, Gecode::Propagator &p, Gecode::ModEvent me)
Schedule propagator p.
Definition var-imp.hpp:364
Configuration for Set-variable implementations.
Definition var-type.hpp:385
Computation spaces.
Definition core.hpp:1775
Space * source
Source space during clone construction.
Definition core.hpp:1887
struct Gecode::Space::@055132133326276162005044145100211202071356247106::@275070317317120154232063063134255170030071110047 p
Data only available during propagation or branching.
struct Gecode::Space::@055132133326276162005044145100211202071356247106::@155123175027073262103111264343315000271204104107 c
Data available only during copying.
friend class LocalObject
Definition core.hpp:1787
friend class VarImp
Definition core.hpp:1785
friend class Propagator
Definition core.hpp:1777
Base-class for variable implementations.
Definition core.hpp:224
void subscribe(Space &home, Propagator &p, PropCond pc, bool assigned, ModEvent me, bool schedule)
Subscribe propagator p with propagation condition pc.
Definition core.hpp:4531
bool advise(Space &home, ModEvent me, Delta &d)
Run advisors when variable implementation has been modified with modification event me and domain cha...
Definition core.hpp:4655
static void reschedule(Space &home, Propagator &p, PropCond pc, bool assigned, ModEvent me)
Schedule propagator p.
Definition core.hpp:4557
static void schedule(Space &home, Propagator &p, ModEvent me, bool force=false)
Schedule propagator p with modification event me.
Definition core.hpp:4433
static ModEvent me(const ModEventDelta &med)
Definition core.hpp:4415
Floating point numbers.
const Gecode::ModEvent ME_FLOAT_VAL
Domain operation has resulted in a value (assigned variable).
Definition var-type.hpp:272
const Gecode::PropCond PC_FLOAT_VAL
Propagate when a view becomes assigned (single value).
Definition var-type.hpp:291
const Gecode::ModEvent ME_FLOAT_BND
Domain operation has changed the minimum or maximum of the domain.
Definition var-type.hpp:281
const Gecode::ModEvent ME_FLOAT_FAILED
Domain operation has resulted in failure.
Definition var-type.hpp:268
const Gecode::PropCond PC_FLOAT_BND
Propagate when minimum or maximum of a view changes.
Definition var-type.hpp:300
Finite domain integers.
Definition lastval.hh:52
const Gecode::ModEvent ME_INT_BND
Domain operation has changed the minimum or maximum of the domain.
Definition var-type.hpp:73
const Gecode::PropCond PC_INT_VAL
Propagate when a view becomes assigned (single value).
Definition var-type.hpp:90
const Gecode::PropCond PC_INT_BND
Propagate when minimum or maximum of a view changes.
Definition var-type.hpp:99
const Gecode::ModEvent ME_BOOL_FAILED
Domain operation has resulted in failure.
Definition var-type.hpp:120
const Gecode::ModEvent ME_INT_FAILED
Domain operation has resulted in failure.
Definition var-type.hpp:60
const Gecode::ModEvent ME_BOOL_VAL
Domain operation has resulted in a value (assigned variable).
Definition var-type.hpp:124
const Gecode::PropCond PC_BOOL_VAL
Propagate when a view becomes assigned (single value).
Definition var-type.hpp:134
const Gecode::PropCond PC_INT_DOM
Propagate when domain changes.
Definition var-type.hpp:108
const Gecode::ModEvent ME_INT_VAL
Domain operation has resulted in a value (assigned variable).
Definition var-type.hpp:64
const Gecode::ModEvent ME_INT_DOM
Domain operation has changed the domain.
Definition var-type.hpp:80
Finite integer sets.
Definition var-imp.hpp:145
const Gecode::ModEvent ME_SET_CLUB
Domain operation has changed the least upper bound and the cardinality.
Definition var-type.hpp:187
const Gecode::ModEvent ME_SET_VAL
Domain operation has resulted in a value (assigned variable).
Definition var-type.hpp:150
const Gecode::ModEvent ME_SET_GLB
Domain operation has changed the greatest lower bound.
Definition var-type.hpp:172
const Gecode::ModEvent ME_SET_CGLB
Domain operation has changed the greatest lower bound and the cardinality.
Definition var-type.hpp:194
const Gecode::PropCond PC_SET_CARD
Propagate when the cardinality of a view changes.
Definition var-type.hpp:224
const Gecode::PropCond PC_SET_CLUB
Propagate when the cardinality or the least upper bound of a view changes.
Definition var-type.hpp:235
const Gecode::ModEvent ME_SET_CARD
Domain operation has changed the variable cardinality.
Definition var-type.hpp:156
const Gecode::PropCond PC_SET_VAL
Propagate when a view becomes assigned (single value).
Definition var-type.hpp:215
const Gecode::PropCond PC_SET_ANY
Propagate when any bound or the cardinality of a view changes.
Definition var-type.hpp:256
const Gecode::ModEvent ME_SET_LUB
Domain operation has changed the least upper bound.
Definition var-type.hpp:164
const Gecode::ModEvent ME_SET_BB
Domain operation has changed both greatest lower and least upper bound.
Definition var-type.hpp:180
const Gecode::ModEvent ME_SET_FAILED
Domain operation has resulted in failure.
Definition var-type.hpp:146
const Gecode::ModEvent ME_SET_CBB
Domain operation has changed both the greatest lower bound and the least upper bound,...
Definition var-type.hpp:205
const Gecode::PropCond PC_SET_CGLB
Propagate when the cardinality or the greatest lower bound of a view changes.
Definition var-type.hpp:246
Gecode toplevel namespace
int PropCond
Type for propagation conditions.
Definition core.hpp:77
int ModEvent
Type for modification events.
Definition core.hpp:67
#define GECODE_NEVER
Assert that this command is never executed.
Definition macros.hpp:56