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 #include <gecode/set.hh>
00040
00041 namespace Gecode {
00042
00043 SetVar::SetVar(Space& home)
00044 : VarImpVar<Set::SetVarImp>(new (home) Set::SetVarImp(home)) {}
00045
00046 SetVar::SetVar(Space& home,int lbMin,int lbMax,int ubMin,int ubMax,
00047 unsigned int minCard, unsigned int maxCard)
00048 : VarImpVar<Set::SetVarImp>(new (home) Set::SetVarImp(home,lbMin,lbMax,
00049 ubMin,ubMax,
00050 minCard,maxCard)) {
00051 Set::Limits::check(lbMin,"SetVar::SetVar");
00052 Set::Limits::check(lbMax,"SetVar::SetVar");
00053 Set::Limits::check(ubMin,"SetVar::SetVar");
00054 Set::Limits::check(ubMax,"SetVar::SetVar");
00055 Set::Limits::check(maxCard,"SetVar::SetVar");
00056 if (minCard > maxCard || minCard > lubSize() || maxCard < glbSize() ||
00057 lbMin < ubMin || lbMax > ubMax)
00058 throw Set::VariableEmptyDomain("SetVar::SetVar");
00059 }
00060
00061 SetVar::SetVar(Space& home, const IntSet& glb,int ubMin,int ubMax,
00062 unsigned int minCard, unsigned int maxCard)
00063 : VarImpVar<Set::SetVarImp>(new (home) Set::SetVarImp(home,glb,ubMin,ubMax,
00064 minCard,maxCard)) {
00065 Set::Limits::check(glb,"SetVar::SetVar");
00066 Set::Limits::check(ubMin,"SetVar::SetVar");
00067 Set::Limits::check(ubMax,"SetVar::SetVar");
00068 Set::Limits::check(maxCard,"SetVar::SetVar");
00069 if (minCard > maxCard || minCard > lubSize() || maxCard < glbSize() ||
00070 glb.min() < ubMin || glb.max() > ubMax)
00071 throw Set::VariableEmptyDomain("SetVar::SetVar");
00072 }
00073
00074 SetVar::SetVar(Space& home,int lbMin,int lbMax,const IntSet& lub,
00075 unsigned int minCard, unsigned int maxCard)
00076 : VarImpVar<Set::SetVarImp>(new (home) Set::SetVarImp(home,lbMin,lbMax,lub,
00077 minCard,maxCard)) {
00078 Set::Limits::check(lbMin,"SetVar::SetVar");
00079 Set::Limits::check(lbMax,"SetVar::SetVar");
00080 Set::Limits::check(lub,"SetVar::SetVar");
00081 Set::Limits::check(maxCard,"SetVar::SetVar");
00082 Iter::Ranges::Singleton glbr(lbMin,lbMax);
00083 IntSetRanges lubr(lub);
00084 if (minCard > maxCard || minCard > lubSize() || maxCard < glbSize() ||
00085 !Iter::Ranges::subset(glbr,lubr))
00086 throw Set::VariableEmptyDomain("SetVar::SetVar");
00087 }
00088
00089 SetVar::SetVar(Space& home,
00090 const IntSet& glb, const IntSet& lub,
00091 unsigned int minCard, unsigned int maxCard)
00092 : VarImpVar<Set::SetVarImp>(new (home) Set::SetVarImp(home,glb,lub,minCard,
00093 maxCard)) {
00094 Set::Limits::check(glb,"SetVar::SetVar");
00095 Set::Limits::check(lub,"SetVar::SetVar");
00096 Set::Limits::check(maxCard,"SetVar::SetVar");
00097 IntSetRanges glbr(glb);
00098 IntSetRanges lubr(lub);
00099 if (minCard > maxCard || minCard > lubSize() || maxCard < glbSize() ||
00100 !Iter::Ranges::subset(glbr,lubr))
00101 throw Set::VariableEmptyDomain("SetVar::SetVar");
00102 }
00103
00104 }
00105
00106
00107