Generated on Wed Nov 1 15:04:29 2006 for Gecode by doxygen 1.4.5

array.cc

Go to the documentation of this file.
00001 /*
00002  *  Main authors:
00003  *     Guido Tack <tack@gecode.org>
00004  *     Christian Schulte <schulte@gecode.org>
00005  *     Gabor Szokoli <szokoli@gecode.org>
00006  *
00007  *  Copyright:
00008  *     Guido Tack, 2004
00009  *     Christian Schulte, 2004
00010  *     Gabor Szokoli, 2004
00011  *
00012  *  Last modified:
00013  *     $Date: 2006-04-11 15:58:37 +0200 (Tue, 11 Apr 2006) $ by $Author: tack $
00014  *     $Revision: 3188 $
00015  *
00016  *  This file is part of Gecode, the generic constraint
00017  *  development environment:
00018  *     http://www.gecode.org
00019  *
00020  *  See the file "LICENSE" for information on usage and
00021  *  redistribution of this file, and for a
00022  *     DISCLAIMER OF ALL WARRANTIES.
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 // STATISTICS: set-other
00114