this repo has no description
1/* -*- mode: C++; c-basic-offset: 2; indent-tabs-mode: nil -*- */ 2/* 3 * Main authors: 4 * Guido Tack <tack@gecode.org> 5 * Christian Schulte <schulte@gecode.org> 6 * Gabor Szokoli <szokoli@gecode.org> 7 * 8 * Copyright: 9 * Guido Tack, 2004 10 * Christian Schulte, 2004 11 * Gabor Szokoli, 2004 12 * 13 * This file is part of Gecode, the generic constraint 14 * development environment: 15 * http://www.gecode.org 16 * 17 * Permission is hereby granted, free of charge, to any person obtaining 18 * a copy of this software and associated documentation files (the 19 * "Software"), to deal in the Software without restriction, including 20 * without limitation the rights to use, copy, modify, merge, publish, 21 * distribute, sublicense, and/or sell copies of the Software, and to 22 * permit persons to whom the Software is furnished to do so, subject to 23 * the following conditions: 24 * 25 * The above copyright notice and this permission notice shall be 26 * included in all copies or substantial portions of the Software. 27 * 28 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 29 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 30 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 31 * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE 32 * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION 33 * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION 34 * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 35 * 36 */ 37 38namespace Gecode { 39 40 /* 41 * Constructors and access 42 * 43 */ 44 45 forceinline 46 SetVar::SetVar(void) {} 47 48 forceinline 49 SetVar::SetVar(const SetVar& y) 50 : VarImpVar<Set::SetVarImp>(y.varimp()) {} 51 52 forceinline 53 SetVar::SetVar(const Set::SetView& y) 54 : VarImpVar<Set::SetVarImp>(y.varimp()) {} 55 56 57 /* 58 * Variable information 59 * 60 */ 61 62 forceinline unsigned int 63 SetVar::glbSize(void) const { return x->glbSize(); } 64 65 forceinline unsigned int 66 SetVar::lubSize(void) const { return x->lubSize(); } 67 68 forceinline unsigned int 69 SetVar::unknownSize(void) const { return x->lubSize()-x->glbSize(); } 70 71 forceinline bool 72 SetVar::contains(int i) const { return x->knownIn(i); } 73 74 forceinline bool 75 SetVar::notContains(int i) const { return x->knownOut(i); } 76 77 forceinline unsigned int 78 SetVar::cardMin(void) const { return x->cardMin(); } 79 80 forceinline unsigned int 81 SetVar::cardMax(void) const { return x->cardMax(); } 82 83 forceinline int 84 SetVar::lubMin(void) const { return x->lubMin(); } 85 86 forceinline int 87 SetVar::lubMax(void) const { return x->lubMax(); } 88 89 forceinline int 90 SetVar::glbMin(void) const { return x->glbMin(); } 91 92 forceinline int 93 SetVar::glbMax(void) const { return x->glbMax(); } 94 95 96 97 /* 98 * Range and value iterators for set variables 99 * 100 */ 101 102 forceinline 103 SetVarGlbRanges::SetVarGlbRanges(void) {} 104 105 forceinline 106 SetVarGlbRanges::SetVarGlbRanges(const SetVar& s) 107 : iter(s.varimp()) {} 108 109 forceinline 110 bool 111 SetVarGlbRanges::operator ()(void) const { return iter(); } 112 113 forceinline 114 void 115 SetVarGlbRanges::operator ++(void) { ++iter; } 116 117 forceinline 118 int 119 SetVarGlbRanges::min(void) const { return iter.min(); } 120 121 forceinline 122 int 123 SetVarGlbRanges::max(void) const { return iter.max(); } 124 125 forceinline 126 unsigned int 127 SetVarGlbRanges::width(void) const { return iter.width(); } 128 129 forceinline 130 SetVarLubRanges::SetVarLubRanges(void) {} 131 132 forceinline 133 SetVarLubRanges::SetVarLubRanges(const SetVar& s) 134 : iter(s.varimp()) {} 135 136 forceinline 137 bool 138 SetVarLubRanges::operator ()(void) const { return iter(); } 139 140 forceinline 141 void 142 SetVarLubRanges::operator ++(void) { ++iter; } 143 144 forceinline 145 int 146 SetVarLubRanges::min(void) const { return iter.min(); } 147 148 forceinline 149 int 150 SetVarLubRanges::max(void) const { return iter.max(); } 151 152 forceinline 153 unsigned int 154 SetVarLubRanges::width(void) const { return iter.width(); } 155 156 forceinline 157 SetVarUnknownRanges::SetVarUnknownRanges(void) {} 158 159 forceinline 160 SetVarUnknownRanges::SetVarUnknownRanges(const SetVar& s) { 161 iter.init(s.varimp()); 162 } 163 164 forceinline 165 bool 166 SetVarUnknownRanges::operator ()(void) const { return iter(); } 167 168 forceinline 169 void 170 SetVarUnknownRanges::operator ++(void) { ++iter; } 171 172 forceinline 173 int 174 SetVarUnknownRanges::min(void) const { return iter.min(); } 175 176 forceinline 177 int 178 SetVarUnknownRanges::max(void) const { return iter.max(); } 179 180 forceinline 181 unsigned int 182 SetVarUnknownRanges::width(void) const { return iter.width(); } 183 184 forceinline 185 SetVarGlbValues::SetVarGlbValues(const SetVar& x) { 186 SetVarGlbRanges ivr(x); 187 iter.init(ivr); 188 } 189 190 forceinline bool 191 SetVarGlbValues::operator ()(void) const { 192 return iter(); 193 } 194 195 forceinline void 196 SetVarGlbValues::operator ++(void) { 197 ++iter; 198 } 199 200 forceinline int 201 SetVarGlbValues::val(void) const { 202 return iter.val(); 203 } 204 205 forceinline 206 SetVarLubValues::SetVarLubValues(const SetVar& x) { 207 SetVarLubRanges ivr(x); 208 iter.init(ivr); 209 } 210 211 forceinline bool 212 SetVarLubValues::operator ()(void) const { 213 return iter(); 214 } 215 216 forceinline void 217 SetVarLubValues::operator ++(void) { 218 ++iter; 219 } 220 221 forceinline int 222 SetVarLubValues::val(void) const { 223 return iter.val(); 224 } 225 226 forceinline 227 SetVarUnknownValues::SetVarUnknownValues(const SetVar& x) { 228 SetVarUnknownRanges ivr(x); 229 iter.init(ivr); 230 } 231 232 forceinline bool 233 SetVarUnknownValues::operator ()(void) const { 234 return iter(); 235 } 236 237 forceinline void 238 SetVarUnknownValues::operator ++(void) { 239 ++iter; 240 } 241 242 forceinline int 243 SetVarUnknownValues::val(void) const { 244 return iter.val(); 245 } 246 247} 248 249// STATISTICS: set-var 250