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