var-type.hpp
Go to the documentation of this file.
00001 /* 00002 * CAUTION: 00003 * This file has been automatically generated. Do not edit, 00004 * edit the following files instead: 00005 * - ./gecode/int/var-imp/int.vis 00006 * - ./gecode/int/var-imp/bool.vis 00007 * - ./gecode/set/var-imp/set.vis 00008 * 00009 * This file contains generated code fragments which are 00010 * copyrighted as follows: 00011 * 00012 * Main author: 00013 * Christian Schulte <schulte@gecode.org> 00014 * 00015 * Copyright: 00016 * Christian Schulte, 2007 00017 * 00018 * The generated code fragments are part of Gecode, the generic 00019 * constraint development environment: 00020 * http://www.gecode.org 00021 * 00022 * Permission is hereby granted, free of charge, to any person obtaining 00023 * a copy of this software and associated documentation files (the 00024 * "Software"), to deal in the Software without restriction, including 00025 * without limitation the rights to use, copy, modify, merge, publish, 00026 * distribute, sublicense, and/or sell copies of the Software, and to 00027 * permit persons to whom the Software is furnished to do so, subject to 00028 * the following conditions: 00029 * 00030 * The above copyright notice and this permission notice shall be 00031 * included in all copies or substantial portions of the Software. 00032 * 00033 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 00034 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 00035 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 00036 * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE 00037 * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION 00038 * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION 00039 * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 00040 * 00041 */ 00042 00043 #ifdef GECODE_HAS_INT_VARS 00044 namespace Gecode { namespace Int { 00050 00051 const Gecode::ModEvent ME_INT_FAILED = Gecode::ME_GEN_FAILED; 00053 const Gecode::ModEvent ME_INT_NONE = Gecode::ME_GEN_NONE; 00055 const Gecode::ModEvent ME_INT_VAL = Gecode::ME_GEN_ASSIGNED; 00064 const Gecode::ModEvent ME_INT_BND = Gecode::ME_GEN_ASSIGNED + 1; 00071 const Gecode::ModEvent ME_INT_DOM = Gecode::ME_GEN_ASSIGNED + 2; 00073 const Gecode::PropCond PC_INT_NONE = Gecode::PC_GEN_NONE; 00081 const Gecode::PropCond PC_INT_VAL = Gecode::PC_GEN_ASSIGNED; 00090 const Gecode::PropCond PC_INT_BND = Gecode::PC_GEN_ASSIGNED + 1; 00099 const Gecode::PropCond PC_INT_DOM = Gecode::PC_GEN_ASSIGNED + 2; 00101 }} 00102 #endif 00103 #ifdef GECODE_HAS_INT_VARS 00104 namespace Gecode { namespace Int { 00110 00111 const Gecode::ModEvent ME_BOOL_FAILED = Gecode::ME_GEN_FAILED; 00113 const Gecode::ModEvent ME_BOOL_NONE = Gecode::ME_GEN_NONE; 00115 const Gecode::ModEvent ME_BOOL_VAL = Gecode::ME_GEN_ASSIGNED; 00117 const Gecode::PropCond PC_BOOL_NONE = Gecode::PC_GEN_NONE; 00125 const Gecode::PropCond PC_BOOL_VAL = Gecode::PC_GEN_ASSIGNED; 00127 }} 00128 #endif 00129 #ifdef GECODE_HAS_SET_VARS 00130 namespace Gecode { namespace Set { 00136 00137 const Gecode::ModEvent ME_SET_FAILED = Gecode::ME_GEN_FAILED; 00139 const Gecode::ModEvent ME_SET_NONE = Gecode::ME_GEN_NONE; 00141 const Gecode::ModEvent ME_SET_VAL = Gecode::ME_GEN_ASSIGNED; 00147 const Gecode::ModEvent ME_SET_CARD = Gecode::ME_GEN_ASSIGNED + 1; 00155 const Gecode::ModEvent ME_SET_LUB = Gecode::ME_GEN_ASSIGNED + 2; 00163 const Gecode::ModEvent ME_SET_GLB = Gecode::ME_GEN_ASSIGNED + 3; 00171 const Gecode::ModEvent ME_SET_BB = Gecode::ME_GEN_ASSIGNED + 4; 00178 const Gecode::ModEvent ME_SET_CLUB = Gecode::ME_GEN_ASSIGNED + 5; 00185 const Gecode::ModEvent ME_SET_CGLB = Gecode::ME_GEN_ASSIGNED + 6; 00196 const Gecode::ModEvent ME_SET_CBB = Gecode::ME_GEN_ASSIGNED + 7; 00198 const Gecode::PropCond PC_SET_NONE = Gecode::PC_GEN_NONE; 00206 const Gecode::PropCond PC_SET_VAL = Gecode::PC_GEN_ASSIGNED; 00215 const Gecode::PropCond PC_SET_CARD = Gecode::PC_GEN_ASSIGNED + 1; 00226 const Gecode::PropCond PC_SET_CLUB = Gecode::PC_GEN_ASSIGNED + 2; 00237 const Gecode::PropCond PC_SET_CGLB = Gecode::PC_GEN_ASSIGNED + 3; 00247 const Gecode::PropCond PC_SET_ANY = Gecode::PC_GEN_ASSIGNED + 4; 00249 }} 00250 #endif 00251 #ifdef GECODE_HAS_INT_VARS 00252 namespace Gecode { namespace Int { 00254 class IntVarImpConf { 00255 public: 00257 static const int idx_c = 0; 00259 static const int idx_d = -1; 00261 static const Gecode::PropCond pc_max = PC_INT_DOM; 00263 static const int free_bits = 0; 00265 static const int med_fst = 0; 00267 static const int med_lst = med_fst + 2; 00269 static const int med_mask = ((1 << 2) - 1) << med_fst; 00271 static Gecode::ModEvent me_combine(Gecode::ModEvent me1, Gecode::ModEvent me2); 00273 static bool med_update(Gecode::ModEventDelta& med, Gecode::ModEvent me); 00274 }; 00275 }} 00276 #else 00277 namespace Gecode { namespace Int { 00279 class IntVarImpConf { 00280 public: 00282 static const int idx_c = -1; 00284 static const int idx_d = -1; 00286 static const int med_lst = 0; 00287 }; 00288 }} 00289 #endif 00290 #ifdef GECODE_HAS_INT_VARS 00291 namespace Gecode { namespace Int { 00293 class BoolVarImpConf { 00294 public: 00296 static const int idx_c = Gecode::Int::IntVarImpConf::idx_c+1; 00298 static const int idx_d = Gecode::Int::IntVarImpConf::idx_d; 00300 static const Gecode::PropCond pc_max = PC_BOOL_VAL; 00302 static const int free_bits = 2; 00304 static const int med_fst = Gecode::Int::IntVarImpConf::med_lst; 00306 static const int med_lst = med_fst + 1; 00308 static const int med_mask = ((1 << 1) - 1) << med_fst; 00310 static Gecode::ModEvent me_combine(Gecode::ModEvent me1, Gecode::ModEvent me2); 00312 static bool med_update(Gecode::ModEventDelta& med, Gecode::ModEvent me); 00313 }; 00314 }} 00315 #else 00316 namespace Gecode { namespace Int { 00318 class BoolVarImpConf { 00319 public: 00321 static const int idx_c = Gecode::Int::IntVarImpConf::idx_c; 00323 static const int idx_d = Gecode::Int::IntVarImpConf::idx_d; 00325 static const int med_lst = Gecode::Int::IntVarImpConf::med_lst; 00326 }; 00327 }} 00328 #endif 00329 #ifdef GECODE_HAS_SET_VARS 00330 namespace Gecode { namespace Set { 00332 class SetVarImpConf { 00333 public: 00335 static const int idx_c = Gecode::Int::BoolVarImpConf::idx_c+1; 00337 static const int idx_d = Gecode::Int::BoolVarImpConf::idx_d; 00339 static const Gecode::PropCond pc_max = PC_SET_ANY; 00341 static const int free_bits = 0; 00343 static const int med_fst = Gecode::Int::BoolVarImpConf::med_lst; 00345 static const int med_lst = med_fst + 4; 00347 static const int med_mask = ((1 << 4) - 1) << med_fst; 00349 static Gecode::ModEvent me_combine(Gecode::ModEvent me1, Gecode::ModEvent me2); 00351 static bool med_update(Gecode::ModEventDelta& med, Gecode::ModEvent me); 00352 }; 00353 }} 00354 #else 00355 namespace Gecode { namespace Set { 00357 class SetVarImpConf { 00358 public: 00360 static const int idx_c = Gecode::Int::BoolVarImpConf::idx_c; 00362 static const int idx_d = Gecode::Int::BoolVarImpConf::idx_d; 00364 static const int med_lst = Gecode::Int::BoolVarImpConf::med_lst; 00365 }; 00366 }} 00367 #endif 00368 00369 namespace Gecode { 00370 00372 class AllVarConf { 00373 public: 00375 static const int idx_c = Gecode::Set::SetVarImpConf::idx_c+1; 00377 static const int idx_d = Gecode::Set::SetVarImpConf::idx_d+1; 00379 static ModEventDelta med_combine(ModEventDelta med1, ModEventDelta med2); 00380 }; 00381 00382 } 00383 00384 #ifdef GECODE_HAS_INT_VARS 00385 namespace Gecode { namespace Int { 00386 forceinline Gecode::ModEvent 00387 IntVarImpConf::me_combine(Gecode::ModEvent me1, Gecode::ModEvent me2) { 00388 static const Gecode::ModEvent me_c = ( 00389 ( 00390 (ME_INT_NONE << 0) | // [ME_INT_NONE][ME_INT_NONE] 00391 (ME_INT_VAL << 2) | // [ME_INT_NONE][ME_INT_VAL ] 00392 (ME_INT_BND << 4) | // [ME_INT_NONE][ME_INT_BND ] 00393 (ME_INT_DOM << 6) // [ME_INT_NONE][ME_INT_DOM ] 00394 ) | 00395 ( 00396 (ME_INT_VAL << 8) | // [ME_INT_VAL ][ME_INT_NONE] 00397 (ME_INT_VAL << 10) | // [ME_INT_VAL ][ME_INT_VAL ] 00398 (ME_INT_VAL << 12) | // [ME_INT_VAL ][ME_INT_BND ] 00399 (ME_INT_VAL << 14) // [ME_INT_VAL ][ME_INT_DOM ] 00400 ) | 00401 ( 00402 (ME_INT_BND << 16) | // [ME_INT_BND ][ME_INT_NONE] 00403 (ME_INT_VAL << 18) | // [ME_INT_BND ][ME_INT_VAL ] 00404 (ME_INT_BND << 20) | // [ME_INT_BND ][ME_INT_BND ] 00405 (ME_INT_BND << 22) // [ME_INT_BND ][ME_INT_DOM ] 00406 ) | 00407 ( 00408 (ME_INT_DOM << 24) | // [ME_INT_DOM ][ME_INT_NONE] 00409 (ME_INT_VAL << 26) | // [ME_INT_DOM ][ME_INT_VAL ] 00410 (ME_INT_BND << 28) | // [ME_INT_DOM ][ME_INT_BND ] 00411 (ME_INT_DOM << 30) // [ME_INT_DOM ][ME_INT_DOM ] 00412 ) 00413 ); 00414 return ((me_c >> (me2 << 3)) >> (me1 << 1)) & 3; 00415 } 00416 forceinline bool 00417 IntVarImpConf::med_update(Gecode::ModEventDelta& med, Gecode::ModEvent me) { 00418 switch (me) { 00419 case ME_INT_NONE: 00420 return false; 00421 case ME_INT_VAL: 00422 { 00423 Gecode::ModEventDelta med_int = med & med_mask; 00424 if (med_int == (ME_INT_VAL << med_fst)) 00425 return false; 00426 med ^= med_int; 00427 med ^= ME_INT_VAL << med_fst; 00428 break; 00429 } 00430 case ME_INT_BND: 00431 { 00432 static const Gecode::ModEvent me_c = ( 00433 ((ME_INT_NONE ^ ME_INT_BND ) << 0) | 00434 ((ME_INT_VAL ^ ME_INT_VAL ) << 4) | 00435 ((ME_INT_BND ^ ME_INT_BND ) << 8) | 00436 ((ME_INT_DOM ^ ME_INT_BND ) << 12) 00437 ); 00438 Gecode::ModEvent me_o = (med & med_mask) >> med_fst; 00439 Gecode::ModEvent me_n = (me_c >> (me_o << 2)) & (med_mask >> med_fst); 00440 if (me_n == 0) 00441 return false; 00442 med ^= me_n << med_fst; 00443 break; 00444 } 00445 case ME_INT_DOM: 00446 { 00447 Gecode::ModEventDelta med_int = med & med_mask; 00448 if (med_int != 0) 00449 return false; 00450 med |= ME_INT_DOM << med_fst; 00451 break; 00452 } 00453 default: GECODE_NEVER; 00454 } 00455 return true; 00456 } 00457 00458 }} 00459 #endif 00460 #ifdef GECODE_HAS_INT_VARS 00461 namespace Gecode { namespace Int { 00462 forceinline Gecode::ModEvent 00463 BoolVarImpConf::me_combine(Gecode::ModEvent me1, Gecode::ModEvent me2) { 00464 return me1 | me2; 00465 } 00466 forceinline bool 00467 BoolVarImpConf::med_update(Gecode::ModEventDelta& med, Gecode::ModEvent me) { 00468 switch (me) { 00469 case ME_BOOL_NONE: 00470 return false; 00471 case ME_BOOL_VAL: 00472 if ((med & (ME_BOOL_VAL << med_fst)) != 0) 00473 return false; 00474 med |= ME_BOOL_VAL << med_fst; 00475 break; 00476 default: GECODE_NEVER; 00477 } 00478 return true; 00479 } 00480 00481 }} 00482 #endif 00483 #ifdef GECODE_HAS_SET_VARS 00484 namespace Gecode { namespace Set { 00485 forceinline Gecode::ModEvent 00486 SetVarImpConf::me_combine(Gecode::ModEvent me1, Gecode::ModEvent me2) { 00487 static const Gecode::ModEvent me_c[ME_SET_CBB+1][ME_SET_CBB+1] = { 00488 { 00489 ME_SET_NONE, // [ME_SET_NONE][ME_SET_NONE] 00490 ME_SET_VAL , // [ME_SET_NONE][ME_SET_VAL ] 00491 ME_SET_CARD, // [ME_SET_NONE][ME_SET_CARD] 00492 ME_SET_LUB , // [ME_SET_NONE][ME_SET_LUB ] 00493 ME_SET_GLB , // [ME_SET_NONE][ME_SET_GLB ] 00494 ME_SET_BB , // [ME_SET_NONE][ME_SET_BB ] 00495 ME_SET_CLUB, // [ME_SET_NONE][ME_SET_CLUB] 00496 ME_SET_CGLB, // [ME_SET_NONE][ME_SET_CGLB] 00497 ME_SET_CBB // [ME_SET_NONE][ME_SET_CBB ] 00498 }, 00499 { 00500 ME_SET_VAL , // [ME_SET_VAL ][ME_SET_NONE] 00501 ME_SET_VAL , // [ME_SET_VAL ][ME_SET_VAL ] 00502 ME_SET_VAL , // [ME_SET_VAL ][ME_SET_CARD] 00503 ME_SET_VAL , // [ME_SET_VAL ][ME_SET_LUB ] 00504 ME_SET_VAL , // [ME_SET_VAL ][ME_SET_GLB ] 00505 ME_SET_VAL , // [ME_SET_VAL ][ME_SET_BB ] 00506 ME_SET_VAL , // [ME_SET_VAL ][ME_SET_CLUB] 00507 ME_SET_VAL , // [ME_SET_VAL ][ME_SET_CGLB] 00508 ME_SET_VAL // [ME_SET_VAL ][ME_SET_CBB ] 00509 }, 00510 { 00511 ME_SET_CARD, // [ME_SET_CARD][ME_SET_NONE] 00512 ME_SET_VAL , // [ME_SET_CARD][ME_SET_VAL ] 00513 ME_SET_CARD, // [ME_SET_CARD][ME_SET_CARD] 00514 ME_SET_CLUB, // [ME_SET_CARD][ME_SET_LUB ] 00515 ME_SET_CGLB, // [ME_SET_CARD][ME_SET_GLB ] 00516 ME_SET_CBB , // [ME_SET_CARD][ME_SET_BB ] 00517 ME_SET_CLUB, // [ME_SET_CARD][ME_SET_CLUB] 00518 ME_SET_CGLB, // [ME_SET_CARD][ME_SET_CGLB] 00519 ME_SET_CBB // [ME_SET_CARD][ME_SET_CBB ] 00520 }, 00521 { 00522 ME_SET_LUB , // [ME_SET_LUB ][ME_SET_NONE] 00523 ME_SET_VAL , // [ME_SET_LUB ][ME_SET_VAL ] 00524 ME_SET_CLUB, // [ME_SET_LUB ][ME_SET_CARD] 00525 ME_SET_LUB , // [ME_SET_LUB ][ME_SET_LUB ] 00526 ME_SET_BB , // [ME_SET_LUB ][ME_SET_GLB ] 00527 ME_SET_BB , // [ME_SET_LUB ][ME_SET_BB ] 00528 ME_SET_CLUB, // [ME_SET_LUB ][ME_SET_CLUB] 00529 ME_SET_CBB , // [ME_SET_LUB ][ME_SET_CGLB] 00530 ME_SET_CBB // [ME_SET_LUB ][ME_SET_CBB ] 00531 }, 00532 { 00533 ME_SET_GLB , // [ME_SET_GLB ][ME_SET_NONE] 00534 ME_SET_VAL , // [ME_SET_GLB ][ME_SET_VAL ] 00535 ME_SET_CGLB, // [ME_SET_GLB ][ME_SET_CARD] 00536 ME_SET_BB , // [ME_SET_GLB ][ME_SET_LUB ] 00537 ME_SET_GLB , // [ME_SET_GLB ][ME_SET_GLB ] 00538 ME_SET_BB , // [ME_SET_GLB ][ME_SET_BB ] 00539 ME_SET_CBB , // [ME_SET_GLB ][ME_SET_CLUB] 00540 ME_SET_CGLB, // [ME_SET_GLB ][ME_SET_CGLB] 00541 ME_SET_CBB // [ME_SET_GLB ][ME_SET_CBB ] 00542 }, 00543 { 00544 ME_SET_BB , // [ME_SET_BB ][ME_SET_NONE] 00545 ME_SET_VAL , // [ME_SET_BB ][ME_SET_VAL ] 00546 ME_SET_CBB , // [ME_SET_BB ][ME_SET_CARD] 00547 ME_SET_BB , // [ME_SET_BB ][ME_SET_LUB ] 00548 ME_SET_BB , // [ME_SET_BB ][ME_SET_GLB ] 00549 ME_SET_BB , // [ME_SET_BB ][ME_SET_BB ] 00550 ME_SET_CBB , // [ME_SET_BB ][ME_SET_CLUB] 00551 ME_SET_CBB , // [ME_SET_BB ][ME_SET_CGLB] 00552 ME_SET_CBB // [ME_SET_BB ][ME_SET_CBB ] 00553 }, 00554 { 00555 ME_SET_CLUB, // [ME_SET_CLUB][ME_SET_NONE] 00556 ME_SET_VAL , // [ME_SET_CLUB][ME_SET_VAL ] 00557 ME_SET_CLUB, // [ME_SET_CLUB][ME_SET_CARD] 00558 ME_SET_CLUB, // [ME_SET_CLUB][ME_SET_LUB ] 00559 ME_SET_CBB , // [ME_SET_CLUB][ME_SET_GLB ] 00560 ME_SET_CBB , // [ME_SET_CLUB][ME_SET_BB ] 00561 ME_SET_CLUB, // [ME_SET_CLUB][ME_SET_CLUB] 00562 ME_SET_CBB , // [ME_SET_CLUB][ME_SET_CGLB] 00563 ME_SET_CBB // [ME_SET_CLUB][ME_SET_CBB ] 00564 }, 00565 { 00566 ME_SET_CGLB, // [ME_SET_CGLB][ME_SET_NONE] 00567 ME_SET_VAL , // [ME_SET_CGLB][ME_SET_VAL ] 00568 ME_SET_CGLB, // [ME_SET_CGLB][ME_SET_CARD] 00569 ME_SET_CBB , // [ME_SET_CGLB][ME_SET_LUB ] 00570 ME_SET_CGLB, // [ME_SET_CGLB][ME_SET_GLB ] 00571 ME_SET_CBB , // [ME_SET_CGLB][ME_SET_BB ] 00572 ME_SET_CBB , // [ME_SET_CGLB][ME_SET_CLUB] 00573 ME_SET_CGLB, // [ME_SET_CGLB][ME_SET_CGLB] 00574 ME_SET_CBB // [ME_SET_CGLB][ME_SET_CBB ] 00575 }, 00576 { 00577 ME_SET_CBB , // [ME_SET_CBB ][ME_SET_NONE] 00578 ME_SET_VAL , // [ME_SET_CBB ][ME_SET_VAL ] 00579 ME_SET_CBB , // [ME_SET_CBB ][ME_SET_CARD] 00580 ME_SET_CBB , // [ME_SET_CBB ][ME_SET_LUB ] 00581 ME_SET_CBB , // [ME_SET_CBB ][ME_SET_GLB ] 00582 ME_SET_CBB , // [ME_SET_CBB ][ME_SET_BB ] 00583 ME_SET_CBB , // [ME_SET_CBB ][ME_SET_CLUB] 00584 ME_SET_CBB , // [ME_SET_CBB ][ME_SET_CGLB] 00585 ME_SET_CBB // [ME_SET_CBB ][ME_SET_CBB ] 00586 } 00587 }; 00588 return me_c[me1][me2]; 00589 } 00590 forceinline bool 00591 SetVarImpConf::med_update(Gecode::ModEventDelta& med, Gecode::ModEvent me) { 00592 switch (me) { 00593 case ME_SET_NONE: 00594 return false; 00595 case ME_SET_VAL: 00596 { 00597 Gecode::ModEventDelta med_set = med & med_mask; 00598 if (med_set == (ME_SET_VAL << med_fst)) 00599 return false; 00600 med ^= med_set; 00601 med ^= ME_SET_VAL << med_fst; 00602 break; 00603 } 00604 case ME_SET_CARD: 00605 { 00606 static const Gecode::ModEventDelta me_c[ME_SET_CBB+1] = { 00607 (ME_SET_NONE ^ ME_SET_CARD) << med_fst, 00608 (ME_SET_VAL ^ ME_SET_VAL ) << med_fst, 00609 (ME_SET_CARD ^ ME_SET_CARD) << med_fst, 00610 (ME_SET_LUB ^ ME_SET_CLUB) << med_fst, 00611 (ME_SET_GLB ^ ME_SET_CGLB) << med_fst, 00612 (ME_SET_BB ^ ME_SET_CBB ) << med_fst, 00613 (ME_SET_CLUB ^ ME_SET_CLUB) << med_fst, 00614 (ME_SET_CGLB ^ ME_SET_CGLB) << med_fst, 00615 (ME_SET_CBB ^ ME_SET_CBB ) << med_fst 00616 }; 00617 Gecode::ModEvent me_o = (med & med_mask) >> med_fst; 00618 Gecode::ModEventDelta med_n = me_c[me_o]; 00619 if (med_n == 0) 00620 return false; 00621 med ^= med_n; 00622 break; 00623 } 00624 case ME_SET_LUB: 00625 { 00626 static const Gecode::ModEventDelta me_c[ME_SET_CBB+1] = { 00627 (ME_SET_NONE ^ ME_SET_LUB ) << med_fst, 00628 (ME_SET_VAL ^ ME_SET_VAL ) << med_fst, 00629 (ME_SET_CARD ^ ME_SET_CLUB) << med_fst, 00630 (ME_SET_LUB ^ ME_SET_LUB ) << med_fst, 00631 (ME_SET_GLB ^ ME_SET_BB ) << med_fst, 00632 (ME_SET_BB ^ ME_SET_BB ) << med_fst, 00633 (ME_SET_CLUB ^ ME_SET_CLUB) << med_fst, 00634 (ME_SET_CGLB ^ ME_SET_CBB ) << med_fst, 00635 (ME_SET_CBB ^ ME_SET_CBB ) << med_fst 00636 }; 00637 Gecode::ModEvent me_o = (med & med_mask) >> med_fst; 00638 Gecode::ModEventDelta med_n = me_c[me_o]; 00639 if (med_n == 0) 00640 return false; 00641 med ^= med_n; 00642 break; 00643 } 00644 case ME_SET_GLB: 00645 { 00646 static const Gecode::ModEventDelta me_c[ME_SET_CBB+1] = { 00647 (ME_SET_NONE ^ ME_SET_GLB ) << med_fst, 00648 (ME_SET_VAL ^ ME_SET_VAL ) << med_fst, 00649 (ME_SET_CARD ^ ME_SET_CGLB) << med_fst, 00650 (ME_SET_LUB ^ ME_SET_BB ) << med_fst, 00651 (ME_SET_GLB ^ ME_SET_GLB ) << med_fst, 00652 (ME_SET_BB ^ ME_SET_BB ) << med_fst, 00653 (ME_SET_CLUB ^ ME_SET_CBB ) << med_fst, 00654 (ME_SET_CGLB ^ ME_SET_CGLB) << med_fst, 00655 (ME_SET_CBB ^ ME_SET_CBB ) << med_fst 00656 }; 00657 Gecode::ModEvent me_o = (med & med_mask) >> med_fst; 00658 Gecode::ModEventDelta med_n = me_c[me_o]; 00659 if (med_n == 0) 00660 return false; 00661 med ^= med_n; 00662 break; 00663 } 00664 case ME_SET_BB: 00665 { 00666 static const Gecode::ModEventDelta me_c[ME_SET_CBB+1] = { 00667 (ME_SET_NONE ^ ME_SET_BB ) << med_fst, 00668 (ME_SET_VAL ^ ME_SET_VAL ) << med_fst, 00669 (ME_SET_CARD ^ ME_SET_CBB ) << med_fst, 00670 (ME_SET_LUB ^ ME_SET_BB ) << med_fst, 00671 (ME_SET_GLB ^ ME_SET_BB ) << med_fst, 00672 (ME_SET_BB ^ ME_SET_BB ) << med_fst, 00673 (ME_SET_CLUB ^ ME_SET_CBB ) << med_fst, 00674 (ME_SET_CGLB ^ ME_SET_CBB ) << med_fst, 00675 (ME_SET_CBB ^ ME_SET_CBB ) << med_fst 00676 }; 00677 Gecode::ModEvent me_o = (med & med_mask) >> med_fst; 00678 Gecode::ModEventDelta med_n = me_c[me_o]; 00679 if (med_n == 0) 00680 return false; 00681 med ^= med_n; 00682 break; 00683 } 00684 case ME_SET_CLUB: 00685 { 00686 static const Gecode::ModEventDelta me_c[ME_SET_CBB+1] = { 00687 (ME_SET_NONE ^ ME_SET_CLUB) << med_fst, 00688 (ME_SET_VAL ^ ME_SET_VAL ) << med_fst, 00689 (ME_SET_CARD ^ ME_SET_CLUB) << med_fst, 00690 (ME_SET_LUB ^ ME_SET_CLUB) << med_fst, 00691 (ME_SET_GLB ^ ME_SET_CBB ) << med_fst, 00692 (ME_SET_BB ^ ME_SET_CBB ) << med_fst, 00693 (ME_SET_CLUB ^ ME_SET_CLUB) << med_fst, 00694 (ME_SET_CGLB ^ ME_SET_CBB ) << med_fst, 00695 (ME_SET_CBB ^ ME_SET_CBB ) << med_fst 00696 }; 00697 Gecode::ModEvent me_o = (med & med_mask) >> med_fst; 00698 Gecode::ModEventDelta med_n = me_c[me_o]; 00699 if (med_n == 0) 00700 return false; 00701 med ^= med_n; 00702 break; 00703 } 00704 case ME_SET_CGLB: 00705 { 00706 static const Gecode::ModEventDelta me_c[ME_SET_CBB+1] = { 00707 (ME_SET_NONE ^ ME_SET_CGLB) << med_fst, 00708 (ME_SET_VAL ^ ME_SET_VAL ) << med_fst, 00709 (ME_SET_CARD ^ ME_SET_CGLB) << med_fst, 00710 (ME_SET_LUB ^ ME_SET_CBB ) << med_fst, 00711 (ME_SET_GLB ^ ME_SET_CGLB) << med_fst, 00712 (ME_SET_BB ^ ME_SET_CBB ) << med_fst, 00713 (ME_SET_CLUB ^ ME_SET_CBB ) << med_fst, 00714 (ME_SET_CGLB ^ ME_SET_CGLB) << med_fst, 00715 (ME_SET_CBB ^ ME_SET_CBB ) << med_fst 00716 }; 00717 Gecode::ModEvent me_o = (med & med_mask) >> med_fst; 00718 Gecode::ModEventDelta med_n = me_c[me_o]; 00719 if (med_n == 0) 00720 return false; 00721 med ^= med_n; 00722 break; 00723 } 00724 case ME_SET_CBB: 00725 { 00726 static const Gecode::ModEventDelta me_c[ME_SET_CBB+1] = { 00727 (ME_SET_NONE ^ ME_SET_CBB ) << med_fst, 00728 (ME_SET_VAL ^ ME_SET_VAL ) << med_fst, 00729 (ME_SET_CARD ^ ME_SET_CBB ) << med_fst, 00730 (ME_SET_LUB ^ ME_SET_CBB ) << med_fst, 00731 (ME_SET_GLB ^ ME_SET_CBB ) << med_fst, 00732 (ME_SET_BB ^ ME_SET_CBB ) << med_fst, 00733 (ME_SET_CLUB ^ ME_SET_CBB ) << med_fst, 00734 (ME_SET_CGLB ^ ME_SET_CBB ) << med_fst, 00735 (ME_SET_CBB ^ ME_SET_CBB ) << med_fst 00736 }; 00737 Gecode::ModEvent me_o = (med & med_mask) >> med_fst; 00738 Gecode::ModEventDelta med_n = me_c[me_o]; 00739 if (med_n == 0) 00740 return false; 00741 med ^= med_n; 00742 break; 00743 } 00744 default: GECODE_NEVER; 00745 } 00746 return true; 00747 } 00748 00749 }} 00750 #endif 00751 namespace Gecode { 00752 forceinline ModEventDelta 00753 AllVarConf::med_combine(ModEventDelta med1, ModEventDelta med2) { 00754 #ifdef GECODE_HAS_INT_VARS 00755 (void) Gecode::Int::IntVarImpConf::med_update(med1,(med2 & Gecode::Int::IntVarImpConf::med_mask) >> Gecode::Int::IntVarImpConf::med_fst); 00756 #endif 00757 #ifdef GECODE_HAS_INT_VARS 00758 (void) Gecode::Int::BoolVarImpConf::med_update(med1,(med2 & Gecode::Int::BoolVarImpConf::med_mask) >> Gecode::Int::BoolVarImpConf::med_fst); 00759 #endif 00760 #ifdef GECODE_HAS_SET_VARS 00761 (void) Gecode::Set::SetVarImpConf::med_update(med1,(med2 & Gecode::Set::SetVarImpConf::med_mask) >> Gecode::Set::SetVarImpConf::med_fst); 00762 #endif 00763 return med1; 00764 } 00765 } 00766 00767 // STATISTICS: kernel-var