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/int/member.hh>
00035
00036 namespace Gecode {
00037
00038 void
00039 member(Home home, const IntVarArgs& x, IntVar y,
00040 IntPropLevel) {
00041 using namespace Int;
00042 GECODE_POST;
00043
00044 ViewArray<IntView> xv(home,x);
00045 GECODE_ES_FAIL(Member::Prop<IntView>::post(home,xv,y));
00046 }
00047
00048 void
00049 member(Home home, const BoolVarArgs& x, BoolVar y,
00050 IntPropLevel) {
00051 using namespace Int;
00052 GECODE_POST;
00053
00054 ViewArray<BoolView> xv(home,x);
00055 GECODE_ES_FAIL(Member::Prop<BoolView>::post(home,xv,y));
00056 }
00057
00058 void
00059 member(Home home, const IntVarArgs& x, IntVar y, Reify r,
00060 IntPropLevel) {
00061 using namespace Int;
00062 GECODE_POST;
00063
00064 ViewArray<IntView> xv(home,x);
00065
00066 switch (r.mode()) {
00067 case RM_EQV:
00068 GECODE_ES_FAIL((Member::ReProp<IntView,RM_EQV>
00069 ::post(home,xv,y,r.var())));
00070 break;
00071 case RM_IMP:
00072 GECODE_ES_FAIL((Member::ReProp<IntView,RM_IMP>
00073 ::post(home,xv,y,r.var())));
00074 break;
00075 case RM_PMI:
00076 GECODE_ES_FAIL((Member::ReProp<IntView,RM_PMI>
00077 ::post(home,xv,y,r.var())));
00078 break;
00079 default: throw UnknownReifyMode("Int::member");
00080 }
00081 }
00082
00083 void
00084 member(Home home, const BoolVarArgs& x, BoolVar y, Reify r,
00085 IntPropLevel) {
00086 using namespace Int;
00087 GECODE_POST;
00088
00089 ViewArray<BoolView> xv(home,x);
00090
00091 switch (r.mode()) {
00092 case RM_EQV:
00093 GECODE_ES_FAIL((Member::ReProp<BoolView,RM_EQV>
00094 ::post(home,xv,y,r.var())));
00095 break;
00096 case RM_IMP:
00097 GECODE_ES_FAIL((Member::ReProp<BoolView,RM_IMP>
00098 ::post(home,xv,y,r.var())));
00099 break;
00100 case RM_PMI:
00101 GECODE_ES_FAIL((Member::ReProp<BoolView,RM_PMI>
00102 ::post(home,xv,y,r.var())));
00103 break;
00104 default: throw UnknownReifyMode("Int::member");
00105 }
00106
00107 }
00108
00109 }
00110
00111
00112