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

count.cc

Go to the documentation of this file.
00001 /*
00002  *  Main authors:
00003  *     Christian Schulte <schulte@gecode.org>
00004  *
00005  *  Copyright:
00006  *     Christian Schulte, 2002
00007  *
00008  *  Last modified:
00009  *     $Date: 2006-08-27 10:58:48 +0200 (Sun, 27 Aug 2006) $ by $Author: schulte $
00010  *     $Revision: 3574 $
00011  *
00012  *  This file is part of Gecode, the generic constraint
00013  *  development environment:
00014  *     http://www.gecode.org
00015  *
00016  *  See the file "LICENSE" for information on usage and
00017  *  redistribution of this file, and for a
00018  *     DISCLAIMER OF ALL WARRANTIES.
00019  *
00020  */
00021 
00022 #include "gecode/int/count.hh"
00023 
00024 namespace Gecode {
00025 
00026   void
00027   count(Space* home, const IntVarArgs& xa, int y,
00028         IntRelType r, int z, IntConLevel icl) {
00029     using namespace Int;
00030     if (home->failed()) return;
00031     ViewArray<IntView> x(home,xa);
00032     ConstIntView yv(y);
00033     switch (r) {
00034     case IRT_EQ:
00035       GECODE_ES_FAIL(home,(Count::EqInt<IntView,ConstIntView>
00036                            ::post(home,x,yv,z)));
00037       break;
00038     case IRT_NQ:
00039       GECODE_ES_FAIL(home,(Count::NqInt<IntView,ConstIntView>
00040                            ::post(home,x,yv,z)));
00041       break;
00042     case IRT_LE:
00043       GECODE_ES_FAIL(home,(Count::LqInt<IntView,ConstIntView>
00044                            ::post(home,x,yv,z-1)));
00045       break;
00046     case IRT_LQ:
00047       GECODE_ES_FAIL(home,(Count::LqInt<IntView,ConstIntView>
00048                            ::post(home,x,yv,z)));
00049       break;
00050     case IRT_GR:
00051       GECODE_ES_FAIL(home,(Count::GqInt<IntView,ConstIntView>
00052                            ::post(home,x,yv,z+1)));
00053       break;
00054     case IRT_GQ:
00055       GECODE_ES_FAIL(home,(Count::GqInt<IntView,ConstIntView>
00056                            ::post(home,x,yv,z)));
00057       break;
00058     default:
00059       throw UnknownRelation("Int::count");
00060     }
00061   }
00062 
00063   void
00064   count(Space* home, const IntVarArgs& xa, IntVar y,
00065         IntRelType r, int z, IntConLevel icl) {
00066     using namespace Int;
00067     if (home->failed()) return;
00068     ViewArray<IntView> x(home,xa);
00069     switch (r) {
00070     case IRT_EQ:
00071       GECODE_ES_FAIL(home,(Count::EqInt<IntView,IntView>
00072                            ::post(home,x,y,z)));
00073       break;
00074     case IRT_NQ:
00075       GECODE_ES_FAIL(home,(Count::NqInt<IntView,IntView>
00076                            ::post(home,x,y,z)));
00077       break;
00078     case IRT_LE:
00079       GECODE_ES_FAIL(home,(Count::LqInt<IntView,IntView>
00080                            ::post(home,x,y,z-1)));
00081       break;
00082     case IRT_LQ:
00083       GECODE_ES_FAIL(home,(Count::LqInt<IntView,IntView>
00084                            ::post(home,x,y,z)));
00085       break;
00086     case IRT_GR:
00087       GECODE_ES_FAIL(home,(Count::GqInt<IntView,IntView>
00088                            ::post(home,x,y,z+1)));
00089       break;
00090     case IRT_GQ:
00091       GECODE_ES_FAIL(home,(Count::GqInt<IntView,IntView>
00092                            ::post(home,x,y,z)));
00093       break;
00094     default:
00095       throw UnknownRelation("Int::count");
00096     }
00097   }
00098 
00099   void
00100   count(Space* home, const IntVarArgs& xa, int y,
00101         IntRelType r, IntVar z, IntConLevel icl) {
00102     using namespace Int;
00103     if (home->failed()) return;
00104     ViewArray<IntView> x(home,xa);
00105     ConstIntView yv(y);
00106     switch (r) {
00107     case IRT_EQ:
00108       GECODE_ES_FAIL(home,(Count::EqView<IntView,ConstIntView,IntView,true>
00109                            ::post(home,x,yv,z,0)));
00110       break;
00111     case IRT_NQ:
00112       GECODE_ES_FAIL(home,(Count::NqView<IntView,ConstIntView,IntView,true>
00113                            ::post(home,x,yv,z,0)));
00114       break;
00115     case IRT_LE:
00116       GECODE_ES_FAIL(home,(Count::LqView<IntView,ConstIntView,IntView,true>
00117                            ::post(home,x,yv,z,-1)));
00118       break;
00119     case IRT_LQ:
00120       GECODE_ES_FAIL(home,(Count::LqView<IntView,ConstIntView,IntView,true>
00121                            ::post(home,x,yv,z,0)));
00122       break;
00123     case IRT_GR:
00124       GECODE_ES_FAIL(home,(Count::GqView<IntView,ConstIntView,IntView,true>
00125                            ::post(home,x,yv,z,1)));
00126       break;
00127     case IRT_GQ:
00128       GECODE_ES_FAIL(home,(Count::GqView<IntView,ConstIntView,IntView,true>
00129                            ::post(home,x,yv,z,0)));
00130       break;
00131     default:
00132       throw UnknownRelation("Int::count");
00133     }
00134   }
00135 
00136   void
00137   count(Space* home, const IntVarArgs& xa, IntVar y,
00138         IntRelType r, IntVar z, IntConLevel icl) {
00139     using namespace Int;
00140     if (home->failed()) return;
00141     ViewArray<IntView> x(home,xa);
00142     switch (r) {
00143     case IRT_EQ:
00144       GECODE_ES_FAIL(home,(Count::EqView<IntView,IntView,IntView,true>
00145                            ::post(home,x,y,z,0)));
00146       break;
00147     case IRT_NQ:
00148       GECODE_ES_FAIL(home,(Count::NqView<IntView,IntView,IntView,true>
00149                            ::post(home,x,y,z,0)));
00150       break;
00151     case IRT_LE:
00152       GECODE_ES_FAIL(home,(Count::LqView<IntView,IntView,IntView,true>
00153                            ::post(home,x,y,z,-1)));
00154       break;
00155     case IRT_LQ:
00156       GECODE_ES_FAIL(home,(Count::LqView<IntView,IntView,IntView,true>
00157                            ::post(home,x,y,z,0)));
00158       break;
00159     case IRT_GR:
00160       GECODE_ES_FAIL(home,(Count::GqView<IntView,IntView,IntView,true>
00161                            ::post(home,x,y,z,1)));
00162       break;
00163     case IRT_GQ:
00164       GECODE_ES_FAIL(home,(Count::GqView<IntView,IntView,IntView,true>
00165                            ::post(home,x,y,z,0)));
00166       break;
00167     default:
00168       throw UnknownRelation("Int::count");
00169     }
00170   }
00171 
00172 }
00173 
00174 // STATISTICS: int-post