member.cpp
Go to the documentation of this file.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
00029
00030
00031
00032
00033
00034 #include <gecode/minimodel.hh>
00035 #include "test/int.hh"
00036
00037 namespace Test { namespace Int {
00038
00040 namespace Member {
00041
00047
00048 class Int : public Test {
00049 public:
00051 Int(int n) : Test("Member::Int::"+str(n),n+1,0,n,true) {}
00053 virtual bool solution(const Assignment& x) const {
00054 int n = x.size() - 1;
00055 for (int i=n; i--; )
00056 if (x[i] == x[n])
00057 return true;
00058 return false;
00059 }
00061 virtual void post(Gecode::Space& home, Gecode::IntVarArray& x) {
00062 using namespace Gecode;
00063 int n = x.size() - 1;
00064 IntVarArgs y(n);
00065 for (int i=n; i--; )
00066 y[i] = x[i];
00067 member(home, y, x[n]);
00068 }
00070 virtual void post(Gecode::Space& home, Gecode::IntVarArray& x,
00071 Gecode::Reify r) {
00072 using namespace Gecode;
00073 int n = x.size() - 1;
00074 IntVarArgs y(n);
00075 for (int i=n; i--; )
00076 y[i] = x[i];
00077 member(home, y, x[n], r);
00078 }
00079 };
00080
00082 class Bool : public Test {
00083 public:
00085 Bool(int n) : Test("Member::Bool::"+str(n),n+1,0,1,true) {}
00087 virtual bool solution(const Assignment& x) const {
00088 int n = x.size() - 1;
00089 for (int i=n; i--; )
00090 if (x[i] == x[n])
00091 return true;
00092 return false;
00093 }
00095 virtual void post(Gecode::Space& home, Gecode::IntVarArray& x) {
00096 using namespace Gecode;
00097 int n = x.size() - 1;
00098 BoolVarArgs y(n);
00099 for (int i=n; i--; )
00100 y[i] = channel(home,x[i]);
00101 member(home, y, channel(home,x[n]));
00102 }
00104 virtual void post(Gecode::Space& home, Gecode::IntVarArray& x,
00105 Gecode::Reify r) {
00106 using namespace Gecode;
00107 int n = x.size() - 1;
00108 BoolVarArgs y(n);
00109 for (int i=n; i--; )
00110 y[i] = channel(home,x[i]);
00111 member(home, y, channel(home,x[n]), r);
00112 }
00113 };
00114
00116 class Create {
00117 public:
00119 Create(void) {
00120 for (int i=0; i<=4; i++) {
00121 (void) new Int(i);
00122 (void) new Bool(i);
00123 }
00124 }
00125 };
00126
00127 Create c;
00129
00130 }
00131 }}
00132
00133
00134