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
00035
00036
00037
00038
00039
00040 #include "gecode/set/select.hh"
00041
00042 namespace Gecode {
00043
00044 using namespace Gecode::Set;
00045
00046 void
00047 selectUnion(Space* home, const SetVarArgs& x, SetVar y, SetVar z) {
00048 if (home->failed()) return;
00049 Set::Select::IdxViewArray<SetView> iv(home, x);
00050 GECODE_ES_FAIL(home,
00051 (Select::SelectUnion<SetView,SetView>::
00052 post(home,z,iv,y)));
00053 }
00054
00055 void
00056 selectUnion(Space* home, const IntSetArgs& s, SetVar y, SetVar z) {
00057 SharedArray<IntSet> x(s.size());
00058 for (int i=s.size(); i--;)
00059 new (&x[i]) IntSet(s[i]);
00060 if (home->failed()) return;
00061 GECODE_ES_FAIL(home,
00062 (Select::SelectUnionConst<SetView,SetView>::
00063 post(home,z,x,y)));
00064 }
00065
00066 void
00067 selectInter(Space* home, const SetVarArgs& x, SetVar y, SetVar z) {
00068 if (home->failed()) return;
00069 Set::Select::IdxViewArray<SetView> iv(home, x);
00070 IntSet universe(Set::Limits::min,
00071 Set::Limits::max);
00072 GECODE_ES_FAIL(home,
00073 (Select::SelectIntersection<SetView,SetView>::
00074 post(home,z,iv,y,universe)));
00075 }
00076
00077 void
00078 selectInterIn(Space* home, const SetVarArgs& x, SetVar y, SetVar z,
00079 const IntSet& universe) {
00080 if (home->failed()) return;
00081 Set::Select::IdxViewArray<SetView> iv(home, x);
00082 GECODE_ES_FAIL(home,
00083 (Select::SelectIntersection<SetView,SetView>::
00084 post(home,z,iv,y,universe)));
00085 }
00086
00087 void
00088 selectSet(Space* home, const SetVarArgs& x, IntVar y, SetVar z) {
00089 if (home->failed()) return;
00090 Set::Select::IdxViewArray<SetView > iv(home, x);
00091 SetView zv(z);
00092
00093 Int::IntView yv(y);
00094 SingletonView single(yv);
00095 GECODE_ES_FAIL(home,(Select::SelectUnion<SetView,
00096 SingletonView>::post(home, z, iv, single)));
00097 }
00098
00099 void
00100 selectSet(Space* home, const IntSetArgs& s, IntVar y, SetVar z) {
00101 for (int i=s.size(); i--;)
00102 Set::Limits::check(s[i], "Set::selectSet");
00103 if (home->failed()) return;
00104 SetView zv(z);
00105 SharedArray<IntSet> x(s.size());
00106 for (int i=s.size(); i--;)
00107 new (&x[i]) IntSet(s[i]);
00108
00109 Int::IntView yv(y);
00110 SingletonView single(yv);
00111 GECODE_ES_FAIL(home,(Select::SelectUnionConst<SetView,
00112 SingletonView>::post(home, z, x, single)));
00113 }
00114
00115 void
00116 selectDisjoint(Space* home, const SetVarArgs& x, SetVar y) {
00117 if (home->failed()) return;
00118 Set::Select::IdxViewArray<SetView> iv(home, x);
00119 GECODE_ES_FAIL(home,Select::SelectDisjoint::post(home,iv,y));
00120 }
00121
00122 namespace {
00123 GECODE_REGISTER2(Select::SelectUnion<Gecode::Set::SetView, Gecode::Set::SingletonView>);
00124 GECODE_REGISTER2(Select::SelectUnion<Gecode::Set::SetView, Gecode::Set::SetView>);
00125 GECODE_REGISTER1(Select::SelectDisjoint);
00126 GECODE_REGISTER2(Select::SelectUnionConst<Gecode::Set::SetView, Gecode::Set::SingletonView>);
00127 GECODE_REGISTER2(Select::SelectUnionConst<Gecode::Set::SetView, Gecode::Set::SetView>);
00128 GECODE_REGISTER2(Select::SelectIntersection<Gecode::Set::SetView, Gecode::Set::SetView>);
00129
00130 }
00131
00132 }
00133
00134
00135