Generated on Wed Nov 1 15:04:46 2006 for Gecode by doxygen 1.4.5

common.icc

Go to the documentation of this file.
00001 /*
00002  *  Main authors:
00003  *     Guido Tack <tack@gecode.org>
00004  *     Christian Schulte <schulte@gecode.org>
00005  *
00006  *  Contributing authors:
00007  *     Gabor Szokoli <szokoli@gecode.org>
00008  *
00009  *  Copyright:
00010  *     Guido Tack, 2004
00011  *     Christian Schulte, 2004
00012  *     Gabor Szokoli, 2004
00013  *
00014  *  Last modified:
00015  *     $Date: 2006-08-25 17:31:32 +0200 (Fri, 25 Aug 2006) $ by $Author: tack $
00016  *     $Revision: 3573 $
00017  *
00018  *  This file is part of Gecode, the generic constraint
00019  *  development environment:
00020  *     http://www.gecode.org
00021  *
00022  *  See the file "LICENSE" for information on usage and
00023  *  redistribution of this file, and for a
00024  *     DISCLAIMER OF ALL WARRANTIES.
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 // STATISTICS: set-prop