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_SET_ME_CHECK_VAL(p,f) { \
00029 ModEvent __me__ ## __LINE__ = (p); \
00030 if (me_failed(__me__ ## __LINE__)) return ES_FAILED; \
00031 if (ME_GEN_ASSIGNED==(__me__ ## __LINE__))f=true; }
00032
00033 #define GECODE_SET_ME_CHECK_VAL_B(modified, tell, f) \
00034 { \
00035 ModEvent me = (tell); \
00036 modified |= me_modified(me); \
00037 if (ME_GEN_ASSIGNED==(me))f=true; \
00038 GECODE_ME_CHECK(me); \
00039 }
00040
00041 namespace Gecode { namespace Set { namespace Rel {
00042
00043 forceinline
00044 bool subsumesME(ModEvent me0, ModEvent me1, ModEvent me2, ModEvent me) {
00045 ModEvent cme = SetView::combine(me0,SetView::combine(me1, me2));
00046 return SetView::combine(cme, me)==cme;
00047 }
00048 forceinline
00049 bool subsumesME(ModEvent me0, ModEvent me1, ModEvent me) {
00050 ModEvent cme = SetView::combine(me0, me1);
00051 return SetView::combine(cme, me)==cme;
00052 }
00053 forceinline
00054 bool subsumesME(ModEvent me0, ModEvent me) {
00055 return SetView::combine(me0, me)==me0;
00056 }
00057
00058 forceinline
00059 bool testSetEventLB(ModEvent me0, ModEvent me1, ModEvent me2) {
00060 return subsumesME(me0, me1, me2, ME_SET_GLB);
00061 }
00062 forceinline
00063 bool testSetEventUB(ModEvent me0, ModEvent me1, ModEvent me2) {
00064 return subsumesME(me0, me1, me2, ME_SET_LUB);
00065 }
00066 forceinline
00067 bool testSetEventAnyB(ModEvent me0, ModEvent me1, ModEvent me2) {
00068 return ( me0!=ME_SET_CARD || me1!=ME_SET_CARD || me2!=ME_SET_CARD );
00069 }
00070 forceinline
00071 bool testSetEventCard(ModEvent me0, ModEvent me1, ModEvent me2) {
00072 return subsumesME(me0, me1, me2, ME_SET_CARD);
00073 }
00074 forceinline
00075 bool testSetEventLB(ModEvent me0, ModEvent me1) {
00076 return subsumesME(me0, me1, ME_SET_GLB);
00077 }
00078 forceinline
00079 bool testSetEventUB(ModEvent me0, ModEvent me1) {
00080 return subsumesME(me0, me1, ME_SET_LUB);
00081 }
00082 forceinline
00083 bool testSetEventAnyB(ModEvent me0, ModEvent me1) {
00084 return ( me0!=ME_SET_CARD || me1!=ME_SET_CARD );
00085 }
00086 forceinline
00087 bool testSetEventCard(ModEvent me0, ModEvent me1) {
00088 return subsumesME(me0, me1, ME_SET_CARD);
00089 }
00090 forceinline
00091 bool testSetEventLB(ModEvent me0) {
00092 return subsumesME(me0, ME_SET_GLB);
00093 }
00094 forceinline
00095 bool testSetEventUB(ModEvent me0) {
00096 return subsumesME(me0, ME_SET_LUB);
00097 }
00098 forceinline
00099 bool testSetEventAnyB(ModEvent me0) {
00100 return ( me0!=ME_SET_CARD );
00101 }
00102 forceinline
00103 bool testSetEventCard(ModEvent me0) {
00104 return subsumesME(me0, ME_SET_CARD);
00105 }
00106
00107 }}}
00108
00109