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 #include "gecode/set.hh"
00029
00030 namespace Gecode {
00031
00032 SetVarArray::SetVarArray(Space* home, int n)
00033 : VarArray<SetVar>(home,n) {
00034 for (int i = size(); i--; )
00035 x[i].init(home);
00036 }
00037
00038 SetVarArray::SetVarArray(Space* home,int n,
00039 int lbMin,int lbMax,int ubMin,int ubMax,
00040 unsigned int minCard,
00041 unsigned int maxCard)
00042 : VarArray<SetVar>(home,n) {
00043 if ((lbMin < Limits::Set::int_min) ||
00044 (lbMax > Limits::Set::int_max) ||
00045 (ubMin < Limits::Set::int_min) ||
00046 (ubMax > Limits::Set::int_max))
00047 throw Set::VariableOutOfRangeDomain("SetVarArray");
00048 if (maxCard > Limits::Set::card_max)
00049 throw Set::VariableOutOfRangeCardinality("SetVarArray");
00050 if (minCard > maxCard)
00051 throw Set::VariableFailedDomain("SetVarArray");
00052 for (int i = size(); i--; )
00053 x[i].init(home,lbMin,lbMax,ubMin,ubMax,minCard,maxCard);
00054 }
00055
00056 SetVarArray::SetVarArray(Space* home,int n,
00057 const IntSet& glb,int ubMin,int ubMax,
00058 unsigned int minCard,unsigned int maxCard)
00059 : VarArray<SetVar>(home,n) {
00060 if ( ((glb.size() > 0) &&
00061 ((glb.min() < Limits::Set::int_min) ||
00062 (glb.max() > Limits::Set::int_max))) ||
00063 (ubMin < Limits::Set::int_min) ||
00064 (ubMax > Limits::Set::int_max))
00065 throw Set::VariableOutOfRangeDomain("SetVar");
00066 if (maxCard > Limits::Set::card_max)
00067 throw Set::VariableOutOfRangeCardinality("SetVarArray");
00068 if (minCard > maxCard)
00069 throw Set::VariableFailedDomain("SetVarArray");
00070 for (int i = size(); i--; )
00071 x[i].init(home,glb,ubMin,ubMax,minCard,maxCard);
00072 }
00073
00074 SetVarArray::SetVarArray(Space* home,int n,
00075 int lbMin,int lbMax,const IntSet& lub,
00076 unsigned int minCard,unsigned int maxCard)
00077 : VarArray<SetVar>(home,n) {
00078 if ( ((lub.size() > 0) &&
00079 ((lub.min() < Limits::Set::int_min) ||
00080 (lub.max() > Limits::Set::int_max))) ||
00081 (lbMin < Limits::Set::int_min) ||
00082 (lbMax > Limits::Set::int_max))
00083 throw Set::VariableOutOfRangeDomain("SetVarArray");
00084 if (maxCard > Limits::Set::card_max)
00085 throw Set::VariableOutOfRangeCardinality("SetVarArray");
00086 if (minCard > maxCard)
00087 throw Set::VariableFailedDomain("SetVarArray");
00088 for (int i = size(); i--; )
00089 x[i].init(home,lbMin,lbMax,lub,minCard,maxCard);
00090 }
00091
00092 SetVarArray::SetVarArray(Space* home,int n,
00093 const IntSet& glb, const IntSet& lub,
00094 unsigned int minCard, unsigned int maxCard)
00095 : VarArray<SetVar>(home,n) {
00096 if (((glb.size() > 0) &&
00097 ((glb.min() < Limits::Set::int_min) ||
00098 (glb.max() > Limits::Set::int_max))) ||
00099 ((lub.size() > 0) &&
00100 ((lub.min() < Limits::Set::int_min) ||
00101 (lub.max() > Limits::Set::int_max))))
00102 throw Set::VariableOutOfRangeDomain("SetVar");
00103 if (maxCard > Limits::Set::card_max)
00104 throw Set::VariableOutOfRangeCardinality("SetVar");
00105 for (int i = size(); i--; )
00106 x[i].init(home,glb,lub,minCard,maxCard);
00107 if (minCard > maxCard)
00108 throw Set::VariableFailedDomain("SetVar");
00109 }
00110
00111 }
00112
00113
00114