Generated on Sat Aug 25 2012 03:32:52 for Gecode by doxygen 1.8.1.2
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 
101 }}
102 #endif
103 #ifdef GECODE_HAS_INT_VARS
104 namespace Gecode { namespace Int {
110 
127 }}
128 #endif
129 #ifdef GECODE_HAS_SET_VARS
130 namespace Gecode { namespace Set {
136 
249 }}
250 #endif
251 #ifdef GECODE_HAS_INT_VARS
252 namespace Gecode { namespace Int {
255  public:
257  static const int idx_c = 0;
259  static const int idx_d = -1;
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;
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 {
294  public:
302  static const int free_bits = 2;
306  static const int med_lst = med_fst + 1;
308  static const int med_mask = ((1 << 1) - 1) << med_fst;
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 {
333  public:
341  static const int free_bits = 0;
345  static const int med_lst = med_fst + 4;
347  static const int med_mask = ((1 << 4) - 1) << med_fst;
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;
365  };
366 }}
367 #endif
368 
369 namespace Gecode {
370 
372  class AllVarConf {
373  public:
380  };
381 
382 }
383 
384 #ifdef GECODE_HAS_INT_VARS
385 namespace Gecode { namespace Int {
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
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 {
464  return me1 | me2;
465  }
466  forceinline bool
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 {
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
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] = {
608  (ME_SET_VAL ^ ME_SET_VAL ) << med_fst,
612  (ME_SET_BB ^ ME_SET_CBB ) << med_fst,
613  (ME_SET_CLUB ^ ME_SET_CLUB) << 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] = {
628  (ME_SET_VAL ^ ME_SET_VAL ) << 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,
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] = {
648  (ME_SET_VAL ^ ME_SET_VAL ) << 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,
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,
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,
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] = {
688  (ME_SET_VAL ^ ME_SET_VAL ) << 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] = {
708  (ME_SET_VAL ^ ME_SET_VAL ) << med_fst,
710  (ME_SET_LUB ^ ME_SET_CBB ) << med_fst,
712  (ME_SET_BB ^ ME_SET_CBB ) << 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] = {
728  (ME_SET_VAL ^ ME_SET_VAL ) << 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,
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 {
754 #ifdef GECODE_HAS_INT_VARS
756 #endif
757 #ifdef GECODE_HAS_INT_VARS
759 #endif
760 #ifdef GECODE_HAS_SET_VARS
762 #endif
763  return med1;
764  }
765 }
766 
767 // STATISTICS: kernel-var