Generated on Thu Apr 11 13:59:07 2019 for Gecode by doxygen 1.6.3

set.hpp

Go to the documentation of this file.
00001 /* -*- mode: C++; c-basic-offset: 2; indent-tabs-mode: nil -*- */
00002 /*
00003  *  Main authors:
00004  *     Guido Tack <tack@gecode.org>
00005  *     Christian Schulte <schulte@gecode.org>
00006  *     Gabor Szokoli <szokoli@gecode.org>
00007  *
00008  *  Copyright:
00009  *     Guido Tack, 2004
00010  *     Christian Schulte, 2004
00011  *     Gabor Szokoli, 2004
00012  *
00013  *  This file is part of Gecode, the generic constraint
00014  *  development environment:
00015  *     http://www.gecode.org
00016  *
00017  *  Permission is hereby granted, free of charge, to any person obtaining
00018  *  a copy of this software and associated documentation files (the
00019  *  "Software"), to deal in the Software without restriction, including
00020  *  without limitation the rights to use, copy, modify, merge, publish,
00021  *  distribute, sublicense, and/or sell copies of the Software, and to
00022  *  permit persons to whom the Software is furnished to do so, subject to
00023  *  the following conditions:
00024  *
00025  *  The above copyright notice and this permission notice shall be
00026  *  included in all copies or substantial portions of the Software.
00027  *
00028  *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
00029  *  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
00030  *  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
00031  *  NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
00032  *  LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
00033  *  OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
00034  *  WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
00035  *
00036  */
00037 
00038 namespace Gecode {
00039 
00040   /*
00041    * Constructors and access
00042    *
00043    */
00044 
00045   forceinline
00046   SetVar::SetVar(void) {}
00047 
00048   forceinline
00049   SetVar::SetVar(const SetVar& y)
00050     : VarImpVar<Set::SetVarImp>(y.varimp()) {}
00051 
00052   forceinline
00053   SetVar::SetVar(const Set::SetView& y)
00054     : VarImpVar<Set::SetVarImp>(y.varimp()) {}
00055 
00056 
00057   /*
00058    * Variable information
00059    *
00060    */
00061 
00062   forceinline unsigned int
00063   SetVar::glbSize(void) const { return x->glbSize(); }
00064 
00065   forceinline unsigned int
00066   SetVar::lubSize(void) const { return x->lubSize(); }
00067 
00068   forceinline unsigned int
00069   SetVar::unknownSize(void) const { return x->lubSize()-x->glbSize(); }
00070 
00071   forceinline bool
00072   SetVar::contains(int i) const { return x->knownIn(i); }
00073 
00074   forceinline bool
00075   SetVar::notContains(int i) const { return x->knownOut(i); }
00076 
00077   forceinline unsigned int
00078   SetVar::cardMin(void) const { return x->cardMin(); }
00079 
00080   forceinline unsigned int
00081   SetVar::cardMax(void) const { return x->cardMax(); }
00082 
00083   forceinline int
00084   SetVar::lubMin(void) const { return x->lubMin(); }
00085 
00086   forceinline int
00087   SetVar::lubMax(void) const { return x->lubMax(); }
00088 
00089   forceinline int
00090   SetVar::glbMin(void) const { return x->glbMin(); }
00091 
00092   forceinline int
00093   SetVar::glbMax(void) const { return x->glbMax(); }
00094 
00095 
00096 
00097   /*
00098    * Range and value iterators for set variables
00099    *
00100    */
00101 
00102   forceinline
00103   SetVarGlbRanges::SetVarGlbRanges(void) {}
00104 
00105   forceinline
00106   SetVarGlbRanges::SetVarGlbRanges(const SetVar& s)
00107     : iter(s.varimp()) {}
00108 
00109   forceinline
00110   bool
00111   SetVarGlbRanges::operator ()(void) const { return iter(); }
00112 
00113   forceinline
00114   void
00115   SetVarGlbRanges::operator ++(void) { ++iter; }
00116 
00117   forceinline
00118   int
00119   SetVarGlbRanges::min(void) const { return iter.min(); }
00120 
00121   forceinline
00122   int
00123   SetVarGlbRanges::max(void) const { return iter.max(); }
00124 
00125   forceinline
00126   unsigned int
00127   SetVarGlbRanges::width(void) const { return iter.width(); }
00128 
00129   forceinline
00130   SetVarLubRanges::SetVarLubRanges(void) {}
00131 
00132   forceinline
00133   SetVarLubRanges::SetVarLubRanges(const SetVar& s)
00134     : iter(s.varimp()) {}
00135 
00136   forceinline
00137   bool
00138   SetVarLubRanges::operator ()(void) const { return iter(); }
00139 
00140   forceinline
00141   void
00142   SetVarLubRanges::operator ++(void) { ++iter; }
00143 
00144   forceinline
00145   int
00146   SetVarLubRanges::min(void) const { return iter.min(); }
00147 
00148   forceinline
00149   int
00150   SetVarLubRanges::max(void) const { return iter.max(); }
00151 
00152   forceinline
00153   unsigned int
00154   SetVarLubRanges::width(void) const { return iter.width(); }
00155 
00156   forceinline
00157   SetVarUnknownRanges::SetVarUnknownRanges(void) {}
00158 
00159   forceinline
00160   SetVarUnknownRanges::SetVarUnknownRanges(const SetVar& s) {
00161     iter.init(s.varimp());
00162   }
00163 
00164   forceinline
00165   bool
00166   SetVarUnknownRanges::operator ()(void) const { return iter(); }
00167 
00168   forceinline
00169   void
00170   SetVarUnknownRanges::operator ++(void) { ++iter; }
00171 
00172   forceinline
00173   int
00174   SetVarUnknownRanges::min(void) const { return iter.min(); }
00175 
00176   forceinline
00177   int
00178   SetVarUnknownRanges::max(void) const { return iter.max(); }
00179 
00180   forceinline
00181   unsigned int
00182   SetVarUnknownRanges::width(void) const { return iter.width(); }
00183 
00184   forceinline
00185   SetVarGlbValues::SetVarGlbValues(const SetVar& x) {
00186     SetVarGlbRanges ivr(x);
00187     iter.init(ivr);
00188   }
00189 
00190   forceinline bool
00191   SetVarGlbValues::operator ()(void) const {
00192     return iter();
00193   }
00194 
00195   forceinline void
00196   SetVarGlbValues::operator ++(void) {
00197     ++iter;
00198   }
00199 
00200   forceinline int
00201   SetVarGlbValues::val(void) const {
00202     return iter.val();
00203   }
00204 
00205   forceinline
00206   SetVarLubValues::SetVarLubValues(const SetVar& x) {
00207     SetVarLubRanges ivr(x);
00208     iter.init(ivr);
00209   }
00210 
00211   forceinline bool
00212   SetVarLubValues::operator ()(void) const {
00213     return iter();
00214   }
00215 
00216   forceinline void
00217   SetVarLubValues::operator ++(void) {
00218     ++iter;
00219   }
00220 
00221   forceinline int
00222   SetVarLubValues::val(void) const {
00223     return iter.val();
00224   }
00225 
00226   forceinline
00227   SetVarUnknownValues::SetVarUnknownValues(const SetVar& x) {
00228     SetVarUnknownRanges ivr(x);
00229     iter.init(ivr);
00230   }
00231 
00232   forceinline bool
00233   SetVarUnknownValues::operator ()(void) const {
00234     return iter();
00235   }
00236 
00237   forceinline void
00238   SetVarUnknownValues::operator ++(void) {
00239     ++iter;
00240   }
00241 
00242   forceinline int
00243   SetVarUnknownValues::val(void) const {
00244     return iter.val();
00245   }
00246 
00247 }
00248 
00249 // STATISTICS: set-var
00250