main page
modules
namespaces
classes
files
Gecode home
Generated on Mon Sep 17 2012 22:20:43 for Gecode by
doxygen
1.8.1.1
gecode
kernel
var-type.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
*
9
* This file contains generated code fragments which are
10
* copyrighted as follows:
11
*
12
* Main author:
13
* Christian Schulte <schulte@gecode.org>
14
*
15
* Copyright:
16
* Christian Schulte, 2007
17
*
18
* The generated code fragments are part of Gecode, the generic
19
* constraint development environment:
20
* http://www.gecode.org
21
*
22
* Permission is hereby granted, free of charge, to any person obtaining
23
* a copy of this software and associated documentation files (the
24
* "Software"), to deal in the Software without restriction, including
25
* without limitation the rights to use, copy, modify, merge, publish,
26
* distribute, sublicense, and/or sell copies of the Software, and to
27
* permit persons to whom the Software is furnished to do so, subject to
28
* the following conditions:
29
*
30
* The above copyright notice and this permission notice shall be
31
* included in all copies or substantial portions of the Software.
32
*
33
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
34
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
35
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
36
* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
37
* LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
38
* OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
39
* WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
40
*
41
*/
42
43
#ifdef GECODE_HAS_INT_VARS
44
namespace
Gecode {
namespace
Int {
50
51
const
Gecode::ModEvent
ME_INT_FAILED
=
Gecode::ME_GEN_FAILED
;
53
const
Gecode::ModEvent
ME_INT_NONE
=
Gecode::ME_GEN_NONE
;
55
const
Gecode::ModEvent
ME_INT_VAL
=
Gecode::ME_GEN_ASSIGNED
;
64
const
Gecode::ModEvent
ME_INT_BND
=
Gecode::ME_GEN_ASSIGNED
+ 1;
71
const
Gecode::ModEvent
ME_INT_DOM
=
Gecode::ME_GEN_ASSIGNED
+ 2;
73
const
Gecode::PropCond
PC_INT_NONE
=
Gecode::PC_GEN_NONE
;
81
const
Gecode::PropCond
PC_INT_VAL
=
Gecode::PC_GEN_ASSIGNED
;
90
const
Gecode::PropCond
PC_INT_BND
=
Gecode::PC_GEN_ASSIGNED
+ 1;
99
const
Gecode::PropCond
PC_INT_DOM
=
Gecode::PC_GEN_ASSIGNED
+ 2;
101
}}
102
#endif
103
#ifdef GECODE_HAS_INT_VARS
104
namespace
Gecode {
namespace
Int {
110
111
const
Gecode::ModEvent
ME_BOOL_FAILED
=
Gecode::ME_GEN_FAILED
;
113
const
Gecode::ModEvent
ME_BOOL_NONE
=
Gecode::ME_GEN_NONE
;
115
const
Gecode::ModEvent
ME_BOOL_VAL
=
Gecode::ME_GEN_ASSIGNED
;
117
const
Gecode::PropCond
PC_BOOL_NONE
=
Gecode::PC_GEN_NONE
;
125
const
Gecode::PropCond
PC_BOOL_VAL
=
Gecode::PC_GEN_ASSIGNED
;
127
}}
128
#endif
129
#ifdef GECODE_HAS_SET_VARS
130
namespace
Gecode {
namespace
Set {
136
137
const
Gecode::ModEvent
ME_SET_FAILED
=
Gecode::ME_GEN_FAILED
;
139
const
Gecode::ModEvent
ME_SET_NONE
=
Gecode::ME_GEN_NONE
;
141
const
Gecode::ModEvent
ME_SET_VAL
=
Gecode::ME_GEN_ASSIGNED
;
147
const
Gecode::ModEvent
ME_SET_CARD
=
Gecode::ME_GEN_ASSIGNED
+ 1;
155
const
Gecode::ModEvent
ME_SET_LUB
=
Gecode::ME_GEN_ASSIGNED
+ 2;
163
const
Gecode::ModEvent
ME_SET_GLB
=
Gecode::ME_GEN_ASSIGNED
+ 3;
171
const
Gecode::ModEvent
ME_SET_BB
=
Gecode::ME_GEN_ASSIGNED
+ 4;
178
const
Gecode::ModEvent
ME_SET_CLUB
=
Gecode::ME_GEN_ASSIGNED
+ 5;
185
const
Gecode::ModEvent
ME_SET_CGLB
=
Gecode::ME_GEN_ASSIGNED
+ 6;
196
const
Gecode::ModEvent
ME_SET_CBB
=
Gecode::ME_GEN_ASSIGNED
+ 7;
198
const
Gecode::PropCond
PC_SET_NONE
=
Gecode::PC_GEN_NONE
;
206
const
Gecode::PropCond
PC_SET_VAL
=
Gecode::PC_GEN_ASSIGNED
;
215
const
Gecode::PropCond
PC_SET_CARD
=
Gecode::PC_GEN_ASSIGNED
+ 1;
226
const
Gecode::PropCond
PC_SET_CLUB
=
Gecode::PC_GEN_ASSIGNED
+ 2;
237
const
Gecode::PropCond
PC_SET_CGLB
=
Gecode::PC_GEN_ASSIGNED
+ 3;
247
const
Gecode::PropCond
PC_SET_ANY
=
Gecode::PC_GEN_ASSIGNED
+ 4;
249
}}
250
#endif
251
#ifdef GECODE_HAS_INT_VARS
252
namespace
Gecode {
namespace
Int {
254
class
IntVarImpConf
{
255
public
:
257
static
const
int
idx_c
= 0;
259
static
const
int
idx_d
= -1;
261
static
const
Gecode::PropCond
pc_max
=
PC_INT_DOM
;
263
static
const
int
free_bits
= 0;
265
static
const
int
med_fst
= 0;
267
static
const
int
med_lst
=
med_fst
+ 2;
269
static
const
int
med_mask
= ((1 << 2) - 1) <<
med_fst
;
271
static
Gecode::ModEvent
me_combine
(
Gecode::ModEvent
me1,
Gecode::ModEvent
me2);
273
static
bool
med_update
(
Gecode::ModEventDelta
& med,
Gecode::ModEvent
me);
274
};
275
}}
276
#else
277
namespace
Gecode {
namespace
Int {
279
class
IntVarImpConf {
280
public
:
282
static
const
int
idx_c
= -1;
284
static
const
int
idx_d
= -1;
286
static
const
int
med_lst
= 0;
287
};
288
}}
289
#endif
290
#ifdef GECODE_HAS_INT_VARS
291
namespace
Gecode {
namespace
Int {
293
class
BoolVarImpConf
{
294
public
:
296
static
const
int
idx_c
=
Gecode::Int::IntVarImpConf::idx_c
+1;
298
static
const
int
idx_d
=
Gecode::Int::IntVarImpConf::idx_d
;
300
static
const
Gecode::PropCond
pc_max
=
PC_BOOL_VAL
;
302
static
const
int
free_bits
= 2;
304
static
const
int
med_fst
=
Gecode::Int::IntVarImpConf::med_lst
;
306
static
const
int
med_lst
=
med_fst
+ 1;
308
static
const
int
med_mask
= ((1 << 1) - 1) <<
med_fst
;
310
static
Gecode::ModEvent
me_combine
(
Gecode::ModEvent
me1,
Gecode::ModEvent
me2);
312
static
bool
med_update
(
Gecode::ModEventDelta
& med,
Gecode::ModEvent
me);
313
};
314
}}
315
#else
316
namespace
Gecode {
namespace
Int {
318
class
BoolVarImpConf {
319
public
:
321
static
const
int
idx_c
=
Gecode::Int::IntVarImpConf::idx_c
;
323
static
const
int
idx_d
=
Gecode::Int::IntVarImpConf::idx_d
;
325
static
const
int
med_lst
=
Gecode::Int::IntVarImpConf::med_lst
;
326
};
327
}}
328
#endif
329
#ifdef GECODE_HAS_SET_VARS
330
namespace
Gecode {
namespace
Set {
332
class
SetVarImpConf
{
333
public
:
335
static
const
int
idx_c
=
Gecode::Int::BoolVarImpConf::idx_c
+1;
337
static
const
int
idx_d
=
Gecode::Int::BoolVarImpConf::idx_d
;
339
static
const
Gecode::PropCond
pc_max
=
PC_SET_ANY
;
341
static
const
int
free_bits
= 0;
343
static
const
int
med_fst
=
Gecode::Int::BoolVarImpConf::med_lst
;
345
static
const
int
med_lst
=
med_fst
+ 4;
347
static
const
int
med_mask
= ((1 << 4) - 1) <<
med_fst
;
349
static
Gecode::ModEvent
me_combine
(
Gecode::ModEvent
me1,
Gecode::ModEvent
me2);
351
static
bool
med_update
(
Gecode::ModEventDelta
& med,
Gecode::ModEvent
me);
352
};
353
}}
354
#else
355
namespace
Gecode {
namespace
Set {
357
class
SetVarImpConf {
358
public
:
360
static
const
int
idx_c
=
Gecode::Int::BoolVarImpConf::idx_c
;
362
static
const
int
idx_d
=
Gecode::Int::BoolVarImpConf::idx_d
;
364
static
const
int
med_lst
=
Gecode::Int::BoolVarImpConf::med_lst
;
365
};
366
}}
367
#endif
368
369
namespace
Gecode {
370
372
class
AllVarConf
{
373
public
:
375
static
const
int
idx_c
=
Gecode::Set::SetVarImpConf::idx_c
+1;
377
static
const
int
idx_d
=
Gecode::Set::SetVarImpConf::idx_d
+1;
379
static
ModEventDelta
med_combine
(
ModEventDelta
med1,
ModEventDelta
med2);
380
};
381
382
}
383
384
#ifdef GECODE_HAS_INT_VARS
385
namespace
Gecode {
namespace
Int {
386
forceinline
Gecode::ModEvent
387
IntVarImpConf::me_combine
(
Gecode::ModEvent
me1,
Gecode::ModEvent
me2) {
388
static
const
Gecode::ModEvent
me_c = (
389
(
390
(
ME_INT_NONE
<< 0) |
// [ME_INT_NONE][ME_INT_NONE]
391
(
ME_INT_VAL
<< 2) |
// [ME_INT_NONE][ME_INT_VAL ]
392
(
ME_INT_BND
<< 4) |
// [ME_INT_NONE][ME_INT_BND ]
393
(
ME_INT_DOM
<< 6)
// [ME_INT_NONE][ME_INT_DOM ]
394
) |
395
(
396
(
ME_INT_VAL
<< 8) |
// [ME_INT_VAL ][ME_INT_NONE]
397
(
ME_INT_VAL
<< 10) |
// [ME_INT_VAL ][ME_INT_VAL ]
398
(
ME_INT_VAL
<< 12) |
// [ME_INT_VAL ][ME_INT_BND ]
399
(
ME_INT_VAL
<< 14)
// [ME_INT_VAL ][ME_INT_DOM ]
400
) |
401
(
402
(
ME_INT_BND
<< 16) |
// [ME_INT_BND ][ME_INT_NONE]
403
(
ME_INT_VAL
<< 18) |
// [ME_INT_BND ][ME_INT_VAL ]
404
(
ME_INT_BND
<< 20) |
// [ME_INT_BND ][ME_INT_BND ]
405
(
ME_INT_BND
<< 22)
// [ME_INT_BND ][ME_INT_DOM ]
406
) |
407
(
408
(
ME_INT_DOM
<< 24) |
// [ME_INT_DOM ][ME_INT_NONE]
409
(
ME_INT_VAL
<< 26) |
// [ME_INT_DOM ][ME_INT_VAL ]
410
(
ME_INT_BND
<< 28) |
// [ME_INT_DOM ][ME_INT_BND ]
411
(
ME_INT_DOM
<< 30)
// [ME_INT_DOM ][ME_INT_DOM ]
412
)
413
);
414
return
((me_c >> (me2 << 3)) >> (me1 << 1)) & 3;
415
}
416
forceinline
bool
417
IntVarImpConf::med_update
(
Gecode::ModEventDelta
& med,
Gecode::ModEvent
me) {
418
switch
(me) {
419
case
ME_INT_NONE
:
420
return
false
;
421
case
ME_INT_VAL
:
422
{
423
Gecode::ModEventDelta
med_int = med &
med_mask
;
424
if
(med_int == (
ME_INT_VAL
<<
med_fst
))
425
return
false
;
426
med ^= med_int;
427
med ^=
ME_INT_VAL
<<
med_fst
;
428
break
;
429
}
430
case
ME_INT_BND
:
431
{
432
static
const
Gecode::ModEvent
me_c = (
433
((
ME_INT_NONE
^
ME_INT_BND
) << 0) |
434
((
ME_INT_VAL
^
ME_INT_VAL
) << 4) |
435
((
ME_INT_BND
^
ME_INT_BND
) << 8) |
436
((
ME_INT_DOM
^
ME_INT_BND
) << 12)
437
);
438
Gecode::ModEvent
me_o = (med &
med_mask
) >>
med_fst
;
439
Gecode::ModEvent
me_n = (me_c >> (me_o << 2)) & (med_mask >>
med_fst
);
440
if
(me_n == 0)
441
return
false
;
442
med ^= me_n <<
med_fst
;
443
break
;
444
}
445
case
ME_INT_DOM
:
446
{
447
Gecode::ModEventDelta
med_int = med &
med_mask
;
448
if
(med_int != 0)
449
return
false
;
450
med |=
ME_INT_DOM
<<
med_fst
;
451
break
;
452
}
453
default
:
GECODE_NEVER
;
454
}
455
return
true
;
456
}
457
458
}}
459
#endif
460
#ifdef GECODE_HAS_INT_VARS
461
namespace
Gecode {
namespace
Int {
462
forceinline
Gecode::ModEvent
463
BoolVarImpConf::me_combine
(
Gecode::ModEvent
me1,
Gecode::ModEvent
me2) {
464
return
me1 | me2;
465
}
466
forceinline
bool
467
BoolVarImpConf::med_update
(
Gecode::ModEventDelta
& med,
Gecode::ModEvent
me) {
468
switch
(me) {
469
case
ME_BOOL_NONE
:
470
return
false
;
471
case
ME_BOOL_VAL
:
472
if
((med & (
ME_BOOL_VAL
<<
med_fst
)) != 0)
473
return
false
;
474
med |=
ME_BOOL_VAL
<<
med_fst
;
475
break
;
476
default
:
GECODE_NEVER
;
477
}
478
return
true
;
479
}
480
481
}}
482
#endif
483
#ifdef GECODE_HAS_SET_VARS
484
namespace
Gecode {
namespace
Set {
485
forceinline
Gecode::ModEvent
486
SetVarImpConf::me_combine
(
Gecode::ModEvent
me1,
Gecode::ModEvent
me2) {
487
static
const
Gecode::ModEvent
me_c[
ME_SET_CBB
+1][
ME_SET_CBB
+1] = {
488
{
489
ME_SET_NONE
,
// [ME_SET_NONE][ME_SET_NONE]
490
ME_SET_VAL
,
// [ME_SET_NONE][ME_SET_VAL ]
491
ME_SET_CARD
,
// [ME_SET_NONE][ME_SET_CARD]
492
ME_SET_LUB
,
// [ME_SET_NONE][ME_SET_LUB ]
493
ME_SET_GLB
,
// [ME_SET_NONE][ME_SET_GLB ]
494
ME_SET_BB
,
// [ME_SET_NONE][ME_SET_BB ]
495
ME_SET_CLUB
,
// [ME_SET_NONE][ME_SET_CLUB]
496
ME_SET_CGLB
,
// [ME_SET_NONE][ME_SET_CGLB]
497
ME_SET_CBB
// [ME_SET_NONE][ME_SET_CBB ]
498
},
499
{
500
ME_SET_VAL
,
// [ME_SET_VAL ][ME_SET_NONE]
501
ME_SET_VAL
,
// [ME_SET_VAL ][ME_SET_VAL ]
502
ME_SET_VAL
,
// [ME_SET_VAL ][ME_SET_CARD]
503
ME_SET_VAL
,
// [ME_SET_VAL ][ME_SET_LUB ]
504
ME_SET_VAL
,
// [ME_SET_VAL ][ME_SET_GLB ]
505
ME_SET_VAL
,
// [ME_SET_VAL ][ME_SET_BB ]
506
ME_SET_VAL
,
// [ME_SET_VAL ][ME_SET_CLUB]
507
ME_SET_VAL
,
// [ME_SET_VAL ][ME_SET_CGLB]
508
ME_SET_VAL
// [ME_SET_VAL ][ME_SET_CBB ]
509
},
510
{
511
ME_SET_CARD
,
// [ME_SET_CARD][ME_SET_NONE]
512
ME_SET_VAL
,
// [ME_SET_CARD][ME_SET_VAL ]
513
ME_SET_CARD
,
// [ME_SET_CARD][ME_SET_CARD]
514
ME_SET_CLUB
,
// [ME_SET_CARD][ME_SET_LUB ]
515
ME_SET_CGLB
,
// [ME_SET_CARD][ME_SET_GLB ]
516
ME_SET_CBB
,
// [ME_SET_CARD][ME_SET_BB ]
517
ME_SET_CLUB
,
// [ME_SET_CARD][ME_SET_CLUB]
518
ME_SET_CGLB
,
// [ME_SET_CARD][ME_SET_CGLB]
519
ME_SET_CBB
// [ME_SET_CARD][ME_SET_CBB ]
520
},
521
{
522
ME_SET_LUB
,
// [ME_SET_LUB ][ME_SET_NONE]
523
ME_SET_VAL
,
// [ME_SET_LUB ][ME_SET_VAL ]
524
ME_SET_CLUB
,
// [ME_SET_LUB ][ME_SET_CARD]
525
ME_SET_LUB
,
// [ME_SET_LUB ][ME_SET_LUB ]
526
ME_SET_BB
,
// [ME_SET_LUB ][ME_SET_GLB ]
527
ME_SET_BB
,
// [ME_SET_LUB ][ME_SET_BB ]
528
ME_SET_CLUB
,
// [ME_SET_LUB ][ME_SET_CLUB]
529
ME_SET_CBB
,
// [ME_SET_LUB ][ME_SET_CGLB]
530
ME_SET_CBB
// [ME_SET_LUB ][ME_SET_CBB ]
531
},
532
{
533
ME_SET_GLB
,
// [ME_SET_GLB ][ME_SET_NONE]
534
ME_SET_VAL
,
// [ME_SET_GLB ][ME_SET_VAL ]
535
ME_SET_CGLB
,
// [ME_SET_GLB ][ME_SET_CARD]
536
ME_SET_BB
,
// [ME_SET_GLB ][ME_SET_LUB ]
537
ME_SET_GLB
,
// [ME_SET_GLB ][ME_SET_GLB ]
538
ME_SET_BB
,
// [ME_SET_GLB ][ME_SET_BB ]
539
ME_SET_CBB
,
// [ME_SET_GLB ][ME_SET_CLUB]
540
ME_SET_CGLB
,
// [ME_SET_GLB ][ME_SET_CGLB]
541
ME_SET_CBB
// [ME_SET_GLB ][ME_SET_CBB ]
542
},
543
{
544
ME_SET_BB
,
// [ME_SET_BB ][ME_SET_NONE]
545
ME_SET_VAL
,
// [ME_SET_BB ][ME_SET_VAL ]
546
ME_SET_CBB
,
// [ME_SET_BB ][ME_SET_CARD]
547
ME_SET_BB
,
// [ME_SET_BB ][ME_SET_LUB ]
548
ME_SET_BB
,
// [ME_SET_BB ][ME_SET_GLB ]
549
ME_SET_BB
,
// [ME_SET_BB ][ME_SET_BB ]
550
ME_SET_CBB
,
// [ME_SET_BB ][ME_SET_CLUB]
551
ME_SET_CBB
,
// [ME_SET_BB ][ME_SET_CGLB]
552
ME_SET_CBB
// [ME_SET_BB ][ME_SET_CBB ]
553
},
554
{
555
ME_SET_CLUB
,
// [ME_SET_CLUB][ME_SET_NONE]
556
ME_SET_VAL
,
// [ME_SET_CLUB][ME_SET_VAL ]
557
ME_SET_CLUB
,
// [ME_SET_CLUB][ME_SET_CARD]
558
ME_SET_CLUB
,
// [ME_SET_CLUB][ME_SET_LUB ]
559
ME_SET_CBB
,
// [ME_SET_CLUB][ME_SET_GLB ]
560
ME_SET_CBB
,
// [ME_SET_CLUB][ME_SET_BB ]
561
ME_SET_CLUB
,
// [ME_SET_CLUB][ME_SET_CLUB]
562
ME_SET_CBB
,
// [ME_SET_CLUB][ME_SET_CGLB]
563
ME_SET_CBB
// [ME_SET_CLUB][ME_SET_CBB ]
564
},
565
{
566
ME_SET_CGLB
,
// [ME_SET_CGLB][ME_SET_NONE]
567
ME_SET_VAL
,
// [ME_SET_CGLB][ME_SET_VAL ]
568
ME_SET_CGLB
,
// [ME_SET_CGLB][ME_SET_CARD]
569
ME_SET_CBB
,
// [ME_SET_CGLB][ME_SET_LUB ]
570
ME_SET_CGLB
,
// [ME_SET_CGLB][ME_SET_GLB ]
571
ME_SET_CBB
,
// [ME_SET_CGLB][ME_SET_BB ]
572
ME_SET_CBB
,
// [ME_SET_CGLB][ME_SET_CLUB]
573
ME_SET_CGLB
,
// [ME_SET_CGLB][ME_SET_CGLB]
574
ME_SET_CBB
// [ME_SET_CGLB][ME_SET_CBB ]
575
},
576
{
577
ME_SET_CBB
,
// [ME_SET_CBB ][ME_SET_NONE]
578
ME_SET_VAL
,
// [ME_SET_CBB ][ME_SET_VAL ]
579
ME_SET_CBB
,
// [ME_SET_CBB ][ME_SET_CARD]
580
ME_SET_CBB
,
// [ME_SET_CBB ][ME_SET_LUB ]
581
ME_SET_CBB
,
// [ME_SET_CBB ][ME_SET_GLB ]
582
ME_SET_CBB
,
// [ME_SET_CBB ][ME_SET_BB ]
583
ME_SET_CBB
,
// [ME_SET_CBB ][ME_SET_CLUB]
584
ME_SET_CBB
,
// [ME_SET_CBB ][ME_SET_CGLB]
585
ME_SET_CBB
// [ME_SET_CBB ][ME_SET_CBB ]
586
}
587
};
588
return
me_c[me1][me2];
589
}
590
forceinline
bool
591
SetVarImpConf::med_update
(
Gecode::ModEventDelta
& med,
Gecode::ModEvent
me) {
592
switch
(me) {
593
case
ME_SET_NONE
:
594
return
false
;
595
case
ME_SET_VAL
:
596
{
597
Gecode::ModEventDelta
med_set = med &
med_mask
;
598
if
(med_set == (
ME_SET_VAL
<<
med_fst
))
599
return
false
;
600
med ^= med_set;
601
med ^=
ME_SET_VAL
<<
med_fst
;
602
break
;
603
}
604
case
ME_SET_CARD
:
605
{
606
static
const
Gecode::ModEventDelta
me_c[
ME_SET_CBB
+1] = {
607
(
ME_SET_NONE
^
ME_SET_CARD
) <<
med_fst
,
608
(
ME_SET_VAL
^
ME_SET_VAL
) <<
med_fst
,
609
(
ME_SET_CARD
^
ME_SET_CARD
) <<
med_fst
,
610
(
ME_SET_LUB
^
ME_SET_CLUB
) <<
med_fst
,
611
(
ME_SET_GLB
^
ME_SET_CGLB
) <<
med_fst
,
612
(
ME_SET_BB
^
ME_SET_CBB
) <<
med_fst
,
613
(ME_SET_CLUB ^
ME_SET_CLUB
) <<
med_fst
,
614
(
ME_SET_CGLB
^
ME_SET_CGLB
) <<
med_fst
,
615
(ME_SET_CBB ^
ME_SET_CBB
) <<
med_fst
616
};
617
Gecode::ModEvent
me_o = (med &
med_mask
) >>
med_fst
;
618
Gecode::ModEventDelta
med_n = me_c[me_o];
619
if
(med_n == 0)
620
return
false
;
621
med ^= med_n;
622
break
;
623
}
624
case
ME_SET_LUB
:
625
{
626
static
const
Gecode::ModEventDelta
me_c[
ME_SET_CBB
+1] = {
627
(
ME_SET_NONE
^
ME_SET_LUB
) <<
med_fst
,
628
(
ME_SET_VAL
^
ME_SET_VAL
) <<
med_fst
,
629
(
ME_SET_CARD
^
ME_SET_CLUB
) <<
med_fst
,
630
(
ME_SET_LUB
^
ME_SET_LUB
) <<
med_fst
,
631
(
ME_SET_GLB
^
ME_SET_BB
) <<
med_fst
,
632
(
ME_SET_BB
^
ME_SET_BB
) <<
med_fst
,
633
(
ME_SET_CLUB
^
ME_SET_CLUB
) <<
med_fst
,
634
(
ME_SET_CGLB
^
ME_SET_CBB
) <<
med_fst
,
635
(ME_SET_CBB ^
ME_SET_CBB
) <<
med_fst
636
};
637
Gecode::ModEvent
me_o = (med &
med_mask
) >>
med_fst
;
638
Gecode::ModEventDelta
med_n = me_c[me_o];
639
if
(med_n == 0)
640
return
false
;
641
med ^= med_n;
642
break
;
643
}
644
case
ME_SET_GLB
:
645
{
646
static
const
Gecode::ModEventDelta
me_c[
ME_SET_CBB
+1] = {
647
(
ME_SET_NONE
^
ME_SET_GLB
) <<
med_fst
,
648
(
ME_SET_VAL
^
ME_SET_VAL
) <<
med_fst
,
649
(
ME_SET_CARD
^
ME_SET_CGLB
) <<
med_fst
,
650
(
ME_SET_LUB
^
ME_SET_BB
) <<
med_fst
,
651
(
ME_SET_GLB
^
ME_SET_GLB
) <<
med_fst
,
652
(ME_SET_BB ^ ME_SET_BB ) <<
med_fst
,
653
(
ME_SET_CLUB
^
ME_SET_CBB
) <<
med_fst
,
654
(
ME_SET_CGLB
^
ME_SET_CGLB
) <<
med_fst
,
655
(
ME_SET_CBB
^
ME_SET_CBB
) <<
med_fst
656
};
657
Gecode::ModEvent
me_o = (med &
med_mask
) >>
med_fst
;
658
Gecode::ModEventDelta
med_n = me_c[me_o];
659
if
(med_n == 0)
660
return
false
;
661
med ^= med_n;
662
break
;
663
}
664
case
ME_SET_BB
:
665
{
666
static
const
Gecode::ModEventDelta
me_c[
ME_SET_CBB
+1] = {
667
(
ME_SET_NONE
^
ME_SET_BB
) <<
med_fst
,
668
(
ME_SET_VAL
^
ME_SET_VAL
) <<
med_fst
,
669
(
ME_SET_CARD
^
ME_SET_CBB
) <<
med_fst
,
670
(
ME_SET_LUB
^
ME_SET_BB
) <<
med_fst
,
671
(
ME_SET_GLB
^
ME_SET_BB
) <<
med_fst
,
672
(ME_SET_BB ^ ME_SET_BB ) <<
med_fst
,
673
(
ME_SET_CLUB
^
ME_SET_CBB
) <<
med_fst
,
674
(
ME_SET_CGLB
^
ME_SET_CBB
) <<
med_fst
,
675
(ME_SET_CBB ^
ME_SET_CBB
) <<
med_fst
676
};
677
Gecode::ModEvent
me_o = (med &
med_mask
) >>
med_fst
;
678
Gecode::ModEventDelta
med_n = me_c[me_o];
679
if
(med_n == 0)
680
return
false
;
681
med ^= med_n;
682
break
;
683
}
684
case
ME_SET_CLUB
:
685
{
686
static
const
Gecode::ModEventDelta
me_c[
ME_SET_CBB
+1] = {
687
(
ME_SET_NONE
^
ME_SET_CLUB
) <<
med_fst
,
688
(
ME_SET_VAL
^
ME_SET_VAL
) <<
med_fst
,
689
(
ME_SET_CARD
^
ME_SET_CLUB
) <<
med_fst
,
690
(
ME_SET_LUB
^
ME_SET_CLUB
) <<
med_fst
,
691
(
ME_SET_GLB
^
ME_SET_CBB
) <<
med_fst
,
692
(
ME_SET_BB
^
ME_SET_CBB
) <<
med_fst
,
693
(ME_SET_CLUB ^
ME_SET_CLUB
) <<
med_fst
,
694
(
ME_SET_CGLB
^ ME_SET_CBB ) <<
med_fst
,
695
(ME_SET_CBB ^
ME_SET_CBB
) <<
med_fst
696
};
697
Gecode::ModEvent
me_o = (med &
med_mask
) >>
med_fst
;
698
Gecode::ModEventDelta
med_n = me_c[me_o];
699
if
(med_n == 0)
700
return
false
;
701
med ^= med_n;
702
break
;
703
}
704
case
ME_SET_CGLB
:
705
{
706
static
const
Gecode::ModEventDelta
me_c[
ME_SET_CBB
+1] = {
707
(
ME_SET_NONE
^
ME_SET_CGLB
) <<
med_fst
,
708
(
ME_SET_VAL
^
ME_SET_VAL
) <<
med_fst
,
709
(
ME_SET_CARD
^
ME_SET_CGLB
) <<
med_fst
,
710
(
ME_SET_LUB
^
ME_SET_CBB
) <<
med_fst
,
711
(
ME_SET_GLB
^
ME_SET_CGLB
) <<
med_fst
,
712
(
ME_SET_BB
^ ME_SET_CBB ) <<
med_fst
,
713
(
ME_SET_CLUB
^
ME_SET_CBB
) <<
med_fst
,
714
(
ME_SET_CGLB
^
ME_SET_CGLB
) <<
med_fst
,
715
(ME_SET_CBB ^
ME_SET_CBB
) <<
med_fst
716
};
717
Gecode::ModEvent
me_o = (med &
med_mask
) >>
med_fst
;
718
Gecode::ModEventDelta
med_n = me_c[me_o];
719
if
(med_n == 0)
720
return
false
;
721
med ^= med_n;
722
break
;
723
}
724
case
ME_SET_CBB
:
725
{
726
static
const
Gecode::ModEventDelta
me_c[
ME_SET_CBB
+1] = {
727
(
ME_SET_NONE
^
ME_SET_CBB
) <<
med_fst
,
728
(
ME_SET_VAL
^
ME_SET_VAL
) <<
med_fst
,
729
(
ME_SET_CARD
^
ME_SET_CBB
) <<
med_fst
,
730
(
ME_SET_LUB
^
ME_SET_CBB
) <<
med_fst
,
731
(
ME_SET_GLB
^
ME_SET_CBB
) <<
med_fst
,
732
(
ME_SET_BB
^ ME_SET_CBB ) <<
med_fst
,
733
(
ME_SET_CLUB
^
ME_SET_CBB
) <<
med_fst
,
734
(
ME_SET_CGLB
^ ME_SET_CBB ) <<
med_fst
,
735
(ME_SET_CBB ^
ME_SET_CBB
) <<
med_fst
736
};
737
Gecode::ModEvent
me_o = (med &
med_mask
) >>
med_fst
;
738
Gecode::ModEventDelta
med_n = me_c[me_o];
739
if
(med_n == 0)
740
return
false
;
741
med ^= med_n;
742
break
;
743
}
744
default
:
GECODE_NEVER
;
745
}
746
return
true
;
747
}
748
749
}}
750
#endif
751
namespace
Gecode {
752
forceinline
ModEventDelta
753
AllVarConf::med_combine
(
ModEventDelta
med1,
ModEventDelta
med2) {
754
#ifdef GECODE_HAS_INT_VARS
755
(void)
Gecode::Int::IntVarImpConf::med_update
(med1,(med2 &
Gecode::Int::IntVarImpConf::med_mask
) >>
Gecode::Int::IntVarImpConf::med_fst
);
756
#endif
757
#ifdef GECODE_HAS_INT_VARS
758
(void)
Gecode::Int::BoolVarImpConf::med_update
(med1,(med2 &
Gecode::Int::BoolVarImpConf::med_mask
) >>
Gecode::Int::BoolVarImpConf::med_fst
);
759
#endif
760
#ifdef GECODE_HAS_SET_VARS
761
(void)
Gecode::Set::SetVarImpConf::med_update
(med1,(med2 &
Gecode::Set::SetVarImpConf::med_mask
) >>
Gecode::Set::SetVarImpConf::med_fst
);
762
#endif
763
return
med1;
764
}
765
}
766
767
// STATISTICS: kernel-var