00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
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