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

set.icc

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: 2005-10-11 17:57:38 +0200 (Tue, 11 Oct 2005) $ by $Author: tack $
00014  *     $Revision: 2334 $
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 namespace Gecode {
00027 
00028   /*
00029    * Constructors and access
00030    *
00031    */
00032 
00033   forceinline
00034   SetVar::SetVar(void) {
00035     //Beware! Constructor bypassed when instance created via VarArray!
00036     //Use init() instead!
00037   }
00038 
00039   forceinline void
00040   SetVar::init(Space* home) {
00041     x = new (home) Set::SetVarImp(home);
00042   }
00043 
00044   forceinline void
00045   SetVar::init(Space* home,int lbMin,int lbMax,int ubMin,int ubMax,
00046                unsigned int cardMin, unsigned int cardMax) {
00047     x = new (home) Set::SetVarImp(home, lbMin,lbMax,ubMin,ubMax,
00048                                   cardMin, cardMax);
00049   }
00050 
00051   forceinline void
00052   SetVar::init(Space* home, const IntSet& glb,int ubMin,int ubMax,
00053                unsigned int cardMin, unsigned int cardMax) {
00054     x = new (home) Set::SetVarImp(home, glb, ubMin, ubMax, cardMin, cardMax);
00055   }
00056 
00057   forceinline void
00058   SetVar::init(Space* home, int lbMin,int lbMax,const IntSet& lub,
00059                unsigned int cardMin, unsigned int cardMax) {
00060     x = new (home) Set::SetVarImp(home, lbMin, lbMax, lub, cardMin, cardMax);
00061   }
00062 
00063   forceinline void
00064   SetVar::init(Space* home, const IntSet& glb, const IntSet& lub,
00065                unsigned int cardMin, unsigned int cardMax) {
00066     x = new (home) Set::SetVarImp(home, glb, lub, cardMin, cardMax);
00067   }
00068 
00069   forceinline Set::SetVarImp*
00070   SetVar::variable(void) const {
00071     return x;
00072   }
00073 
00074 
00075 
00076   /*
00077    * Variable information
00078    *
00079    */
00080 
00081   forceinline unsigned int
00082   SetVar::glbSize(void) const { return x->glbSize(); }
00083 
00084   forceinline unsigned int
00085   SetVar::lubSize(void) const { return x->lubSize(); }
00086 
00087   forceinline unsigned int
00088   SetVar::unknownSize(void) const { return x->lubSize() - x->glbSize(); }
00089 
00090   forceinline bool
00091   SetVar::assigned(void)  const { return x->assigned(); }
00092 
00093   forceinline bool
00094   SetVar::contains(int i) const { return (x->knownIn(i)); }
00095 
00096   forceinline bool
00097   SetVar::notContains(int i) const { return (x->knownOut(i)); }
00098 
00099   forceinline unsigned int
00100   SetVar::cardMin(void) const { return x->cardMin(); }
00101 
00102   forceinline unsigned int
00103   SetVar::cardMax(void) const { return x->cardMax(); }
00104 
00105   forceinline int
00106   SetVar::lubMin(void) const { return x->lubMin(); }
00107 
00108   forceinline int
00109   SetVar::lubMax(void) const { return x->lubMax(); }
00110 
00111   forceinline int
00112   SetVar::glbMin(void) const { return x->glbMin(); }
00113 
00114   forceinline int
00115   SetVar::glbMax(void) const { return x->glbMax(); }
00116 
00117   /*
00118    * Cloning
00119    *
00120    */
00121 
00122   forceinline void
00123   SetVar::update(Space* home, bool share, SetVar& y) {
00124     x = y.x->copy(home,share);
00125   }
00126 
00127 
00128   /*
00129    * Range and value iterators for set variables
00130    *
00131    */
00132 
00133   forceinline
00134   SetVarGlbRanges::SetVarGlbRanges(void) {}
00135 
00136   forceinline
00137   SetVarGlbRanges::SetVarGlbRanges(const SetVar& s)
00138     : iter(s.variable()) {}
00139 
00140   forceinline
00141   bool
00142   SetVarGlbRanges::operator()(void) const { return iter(); }
00143 
00144   forceinline
00145   void
00146   SetVarGlbRanges::operator++(void) { ++iter; }
00147 
00148   forceinline
00149   int
00150   SetVarGlbRanges::min(void) const { return iter.min(); }
00151 
00152   forceinline
00153   int
00154   SetVarGlbRanges::max(void) const { return iter.max(); }
00155 
00156   forceinline
00157   unsigned int
00158   SetVarGlbRanges::width(void) const { return iter.width(); }  
00159 
00160   forceinline
00161   SetVarLubRanges::SetVarLubRanges(void) {}
00162 
00163   forceinline
00164   SetVarLubRanges::SetVarLubRanges(const SetVar& s)
00165     : iter(s.variable()) {}
00166 
00167   forceinline
00168   bool
00169   SetVarLubRanges::operator()(void) const { return iter(); }
00170 
00171   forceinline
00172   void
00173   SetVarLubRanges::operator++(void) { ++iter; }
00174 
00175   forceinline
00176   int
00177   SetVarLubRanges::min(void) const { return iter.min(); }
00178 
00179   forceinline
00180   int
00181   SetVarLubRanges::max(void) const { return iter.max(); }
00182 
00183   forceinline
00184   unsigned int
00185   SetVarLubRanges::width(void) const { return iter.width(); }  
00186 
00187   forceinline
00188   SetVarUnknownRanges::SetVarUnknownRanges(void) {}
00189 
00190   forceinline
00191   SetVarUnknownRanges::SetVarUnknownRanges(const SetVar& s) {
00192     Set::SetVarImp *si = s.variable();
00193     iter.init(si);
00194   }
00195 
00196   forceinline
00197   bool
00198   SetVarUnknownRanges::operator()(void) const { return iter(); }
00199 
00200   forceinline
00201   void
00202   SetVarUnknownRanges::operator++(void) { ++iter; }
00203 
00204   forceinline
00205   int
00206   SetVarUnknownRanges::min(void) const { return iter.min(); }
00207 
00208   forceinline
00209   int
00210   SetVarUnknownRanges::max(void) const { return iter.max(); }
00211 
00212   forceinline
00213   unsigned int
00214   SetVarUnknownRanges::width(void) const { return iter.width(); }  
00215 
00216   forceinline
00217   SetVarGlbValues::SetVarGlbValues(const SetVar& x) {
00218     SetVarGlbRanges ivr(x);
00219     iter.init(ivr);
00220   }
00221 
00222   forceinline bool
00223   SetVarGlbValues::operator()(void) const {
00224     return iter();
00225   }
00226 
00227   forceinline void
00228   SetVarGlbValues::operator++(void) {
00229     ++iter;
00230   }
00231 
00232   forceinline int
00233   SetVarGlbValues::val(void) const {
00234     return iter.val();
00235   }
00236 
00237   forceinline
00238   SetVarLubValues::SetVarLubValues(const SetVar& x) {
00239     SetVarLubRanges ivr(x);
00240     iter.init(ivr);
00241   }
00242 
00243   forceinline bool
00244   SetVarLubValues::operator()(void) const {
00245     return iter();
00246   }
00247 
00248   forceinline void
00249   SetVarLubValues::operator++(void) {
00250     ++iter;
00251   }
00252 
00253   forceinline int
00254   SetVarLubValues::val(void) const {
00255     return iter.val();
00256   }
00257 
00258   forceinline
00259   SetVarUnknownValues::SetVarUnknownValues(const SetVar& x) {
00260     SetVarUnknownRanges ivr(x);
00261     iter.init(ivr);
00262   }
00263 
00264   forceinline bool
00265   SetVarUnknownValues::operator()(void) const {
00266     return iter();
00267   }
00268 
00269   forceinline void
00270   SetVarUnknownValues::operator++(void) {
00271     ++iter;
00272   }
00273 
00274   forceinline int
00275   SetVarUnknownValues::val(void) const {
00276     return iter.val();
00277   }
00278 
00279 }
00280 
00281 // STATISTICS: set-var
00282