this repo has no description
1/* -*- mode: C++; c-basic-offset: 2; indent-tabs-mode: nil -*- */ 2/* 3 * Main authors: 4 * Guido Tack <tack@gecode.org> 5 * Christian Schulte <schulte@gecode.org> 6 * 7 * Contributing authors: 8 * Gabor Szokoli <szokoli@gecode.org> 9 * 10 * Copyright: 11 * Guido Tack, 2004 12 * Christian Schulte, 2004 13 * Gabor Szokoli, 2004 14 * 15 * This file is part of Gecode, the generic constraint 16 * development environment: 17 * http://www.gecode.org 18 * 19 * Permission is hereby granted, free of charge, to any person obtaining 20 * a copy of this software and associated documentation files (the 21 * "Software"), to deal in the Software without restriction, including 22 * without limitation the rights to use, copy, modify, merge, publish, 23 * distribute, sublicense, and/or sell copies of the Software, and to 24 * permit persons to whom the Software is furnished to do so, subject to 25 * the following conditions: 26 * 27 * The above copyright notice and this permission notice shall be 28 * included in all copies or substantial portions of the Software. 29 * 30 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 31 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 32 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 33 * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE 34 * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION 35 * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION 36 * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 37 * 38 */ 39 40#define GECODE_SET_ME_CHECK_VAL(p,f) { \ 41 ModEvent gecode_me_ ## __LINE__ = (p); \ 42 if (me_failed(gecode_me_ ## __LINE__)) return ES_FAILED; \ 43 if (ME_GEN_ASSIGNED==(gecode_me_ ## __LINE__))f=true; } 44 45#define GECODE_SET_ME_CHECK_VAL_B(modified, tell, f) \ 46 { \ 47 ModEvent me = (tell); \ 48 modified |= me_modified(me); \ 49 if (ME_GEN_ASSIGNED==(me)) f=true; \ 50 GECODE_ME_CHECK(me); \ 51 } 52 53namespace Gecode { namespace Set { namespace Rel { 54 55 template<class VX, class VY> 56 forceinline bool 57 same(VX, VY) { 58 return false; 59 } 60 61 template<> 62 forceinline bool 63 same(SetView x, SetView y) { 64 return x == y; 65 } 66 67 forceinline bool 68 subsumesME(ModEvent me0, ModEvent me1, ModEvent me2, ModEvent me) { 69 ModEvent cme = SetVarImp::me_combine(me0,SetVarImp::me_combine(me1, me2)); 70 return SetVarImp::me_combine(cme, me)==cme; 71 } 72 forceinline bool 73 subsumesME(ModEvent me0, ModEvent me1, ModEvent me) { 74 ModEvent cme = SetVarImp::me_combine(me0, me1); 75 return SetVarImp::me_combine(cme, me)==cme; 76 } 77 forceinline bool 78 subsumesME(ModEvent me0, ModEvent me) { 79 return SetVarImp::me_combine(me0, me)==me0; 80 } 81 82 forceinline bool 83 testSetEventLB(ModEvent me0, ModEvent me1, ModEvent me2) { 84 return subsumesME(me0, me1, me2, ME_SET_GLB); 85 } 86 forceinline bool 87 testSetEventUB(ModEvent me0, ModEvent me1, ModEvent me2) { 88 return subsumesME(me0, me1, me2, ME_SET_LUB); 89 } 90 forceinline bool 91 testSetEventAnyB(ModEvent me0, ModEvent me1, ModEvent me2) { 92 return ( me0!=ME_SET_CARD || me1!=ME_SET_CARD || me2!=ME_SET_CARD ); 93 } 94 forceinline bool 95 testSetEventCard(ModEvent me0, ModEvent me1, ModEvent me2) { 96 return subsumesME(me0, me1, me2, ME_SET_CARD); 97 } 98 forceinline bool 99 testSetEventLB(ModEvent me0, ModEvent me1) { 100 return subsumesME(me0, me1, ME_SET_GLB); 101 } 102 forceinline bool 103 testSetEventUB(ModEvent me0, ModEvent me1) { 104 return subsumesME(me0, me1, ME_SET_LUB); 105 } 106 forceinline bool 107 testSetEventAnyB(ModEvent me0, ModEvent me1) { 108 return ( me0!=ME_SET_CARD || me1!=ME_SET_CARD ); 109 } 110 forceinline bool 111 testSetEventCard(ModEvent me0, ModEvent me1) { 112 return subsumesME(me0, me1, ME_SET_CARD); 113 } 114 forceinline bool 115 testSetEventLB(ModEvent me0) { 116 return subsumesME(me0, ME_SET_GLB); 117 } 118 forceinline bool 119 testSetEventUB(ModEvent me0) { 120 return subsumesME(me0, ME_SET_LUB); 121 } 122 forceinline bool 123 testSetEventAnyB(ModEvent me0) { 124 return ( me0!=ME_SET_CARD ); 125 } 126 forceinline bool 127 testSetEventCard(ModEvent me0) { 128 return subsumesME(me0, ME_SET_CARD); 129 } 130 131}}} 132 133// STATISTICS: set-prop