00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028 #define GECODE_ME_CHECK_B(modified, tell) \
00029 { \
00030 ModEvent me = (tell); \
00031 if (me_modified(me)) \
00032 modified = true; \
00033 else \
00034 GECODE_ME_CHECK(me); \
00035 }
00036
00037 #define GECODE_ME_CHECK_VAL(p,f) { \
00038 ModEvent __me__ ## __LINE__ = (p); \
00039 if (me_failed(__me__ ## __LINE__)) return ES_FAILED; \
00040 if (ME_GEN_ASSIGNED==(__me__ ## __LINE__))f=true; }
00041
00042 #define GECODE_ME_CHECK_VAL_B(modified, tell, f) \
00043 { \
00044 ModEvent me = (tell); \
00045 modified |= me_modified(me); \
00046 if (ME_GEN_ASSIGNED==(me))f=true; \
00047 GECODE_ME_CHECK(me); \
00048 }
00049
00050 namespace Gecode { namespace Set { namespace Rel {
00051
00052 forceinline
00053 bool subsumesME(ModEvent me0, ModEvent me1, ModEvent me2, ModEvent me) {
00054 ModEvent cme = SetView::combine(me0,SetView::combine(me1, me2));
00055 return SetView::combine(cme, me)==cme;
00056 }
00057 forceinline
00058 bool subsumesME(ModEvent me0, ModEvent me1, ModEvent me) {
00059 ModEvent cme = SetView::combine(me0, me1);
00060 return SetView::combine(cme, me)==cme;
00061 }
00062 forceinline
00063 bool subsumesME(ModEvent me0, ModEvent me) {
00064 return SetView::combine(me0, me)==me0;
00065 }
00066
00067 forceinline
00068 bool testSetEventLB(ModEvent me0, ModEvent me1, ModEvent me2) {
00069 return subsumesME(me0, me1, me2, ME_SET_GLB);
00070 }
00071 forceinline
00072 bool testSetEventUB(ModEvent me0, ModEvent me1, ModEvent me2) {
00073 return subsumesME(me0, me1, me2, ME_SET_LUB);
00074 }
00075 forceinline
00076 bool testSetEventAnyB(ModEvent me0, ModEvent me1, ModEvent me2) {
00077 return ( me0!=ME_SET_CARD || me1!=ME_SET_CARD || me2!=ME_SET_CARD );
00078 }
00079 forceinline
00080 bool testSetEventCard(ModEvent me0, ModEvent me1, ModEvent me2) {
00081 return subsumesME(me0, me1, me2, ME_SET_CARD);
00082 }
00083 forceinline
00084 bool testSetEventLB(ModEvent me0, ModEvent me1) {
00085 return subsumesME(me0, me1, ME_SET_GLB);
00086 }
00087 forceinline
00088 bool testSetEventUB(ModEvent me0, ModEvent me1) {
00089 return subsumesME(me0, me1, ME_SET_LUB);
00090 }
00091 forceinline
00092 bool testSetEventAnyB(ModEvent me0, ModEvent me1) {
00093 return ( me0!=ME_SET_CARD || me1!=ME_SET_CARD );
00094 }
00095 forceinline
00096 bool testSetEventCard(ModEvent me0, ModEvent me1) {
00097 return subsumesME(me0, me1, ME_SET_CARD);
00098 }
00099 forceinline
00100 bool testSetEventLB(ModEvent me0) {
00101 return subsumesME(me0, ME_SET_GLB);
00102 }
00103 forceinline
00104 bool testSetEventUB(ModEvent me0) {
00105 return subsumesME(me0, ME_SET_LUB);
00106 }
00107 forceinline
00108 bool testSetEventAnyB(ModEvent me0) {
00109 return ( me0!=ME_SET_CARD );
00110 }
00111 forceinline
00112 bool testSetEventCard(ModEvent me0) {
00113 return subsumesME(me0, ME_SET_CARD);
00114 }
00115
00116 }}}
00117
00118