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