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