this repo has no description
1/* -*- mode: C++; c-basic-offset: 2; indent-tabs-mode: nil -*- */ 2/* 3 * Main authors: 4 * Christian Schulte <schulte@gecode.org> 5 * 6 * Copyright: 7 * Christian Schulte, 2012 8 * 9 * This file is part of Gecode, the generic constraint 10 * development environment: 11 * http://www.gecode.org 12 * 13 * Permission is hereby granted, free of charge, to any person obtaining 14 * a copy of this software and associated documentation files (the 15 * "Software"), to deal in the Software without restriction, including 16 * without limitation the rights to use, copy, modify, merge, publish, 17 * distribute, sublicense, and/or sell copies of the Software, and to 18 * permit persons to whom the Software is furnished to do so, subject to 19 * the following conditions: 20 * 21 * The above copyright notice and this permission notice shall be 22 * included in all copies or substantial portions of the Software. 23 * 24 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 25 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 26 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 27 * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE 28 * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION 29 * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION 30 * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 31 * 32 */ 33 34namespace Gecode { 35 36 forceinline 37 FloatVarBranch::FloatVarBranch(void) 38 : s(SEL_NONE) {} 39 40 forceinline 41 FloatVarBranch::FloatVarBranch(Select s0, BranchTbl t) 42 : VarBranch<FloatVar>(t), s(s0) {} 43 44 forceinline 45 FloatVarBranch::FloatVarBranch(Rnd r) 46 : VarBranch<FloatVar>(r), s(SEL_RND) {} 47 48 forceinline 49 FloatVarBranch::FloatVarBranch(Select s0, double d, BranchTbl t) 50 : VarBranch<FloatVar>(d,t), s(s0) {} 51 52 forceinline 53 FloatVarBranch::FloatVarBranch(Select s0, FloatAFC a, BranchTbl t) 54 : VarBranch<FloatVar>(a,t), s(s0) {} 55 56 forceinline 57 FloatVarBranch::FloatVarBranch(Select s0, FloatAction a, BranchTbl t) 58 : VarBranch<FloatVar>(a,t), s(s0) {} 59 60 forceinline 61 FloatVarBranch::FloatVarBranch(Select s0, FloatCHB c, BranchTbl t) 62 : VarBranch<FloatVar>(c,t), s(s0) {} 63 64 forceinline 65 FloatVarBranch::FloatVarBranch(Select s0, FloatBranchMerit mf, BranchTbl t) 66 : VarBranch<FloatVar>(mf,t), s(s0) {} 67 68 forceinline FloatVarBranch::Select 69 FloatVarBranch::select(void) const { 70 return s; 71 } 72 73 forceinline void 74 FloatVarBranch::expand(Home home, const FloatVarArgs& x) { 75 switch (select()) { 76 case SEL_AFC_MIN: case SEL_AFC_MAX: 77 case SEL_AFC_SIZE_MIN: case SEL_AFC_SIZE_MAX: 78 if (!_afc) 79 _afc = FloatAFC(home,x,decay()); 80 break; 81 case SEL_ACTION_MIN: case SEL_ACTION_MAX: 82 case SEL_ACTION_SIZE_MIN: case SEL_ACTION_SIZE_MAX: 83 if (!_act) 84 _act = FloatAction(home,x,decay()); 85 break; 86 case SEL_CHB_MIN: case SEL_CHB_MAX: 87 case SEL_CHB_SIZE_MIN: case SEL_CHB_SIZE_MAX: 88 if (!_chb) 89 _chb = FloatCHB(home,x); 90 break; 91 default: ; 92 } 93 } 94 95 96 inline FloatVarBranch 97 FLOAT_VAR_NONE(void) { 98 return FloatVarBranch(FloatVarBranch::SEL_NONE,nullptr); 99 } 100 101 inline FloatVarBranch 102 FLOAT_VAR_MERIT_MIN(FloatBranchMerit bm, BranchTbl tbl) { 103 return FloatVarBranch(FloatVarBranch::SEL_MERIT_MIN,bm,tbl); 104 } 105 106 inline FloatVarBranch 107 FLOAT_VAR_MERIT_MAX(FloatBranchMerit bm, BranchTbl tbl) { 108 return FloatVarBranch(FloatVarBranch::SEL_MERIT_MAX,bm,tbl); 109 } 110 111 inline FloatVarBranch 112 FLOAT_VAR_RND(Rnd r) { 113 return FloatVarBranch(r); 114 } 115 116 inline FloatVarBranch 117 FLOAT_VAR_DEGREE_MIN(BranchTbl tbl) { 118 return FloatVarBranch(FloatVarBranch::SEL_DEGREE_MIN,tbl); 119 } 120 121 inline FloatVarBranch 122 FLOAT_VAR_DEGREE_MAX(BranchTbl tbl) { 123 return FloatVarBranch(FloatVarBranch::SEL_DEGREE_MAX,tbl); 124 } 125 126 inline FloatVarBranch 127 FLOAT_VAR_AFC_MIN(double d, BranchTbl tbl) { 128 return FloatVarBranch(FloatVarBranch::SEL_AFC_MIN,d,tbl); 129 } 130 131 inline FloatVarBranch 132 FLOAT_VAR_AFC_MIN(FloatAFC a, BranchTbl tbl) { 133 return FloatVarBranch(FloatVarBranch::SEL_AFC_MIN,a,tbl); 134 } 135 136 inline FloatVarBranch 137 FLOAT_VAR_AFC_MAX(double d, BranchTbl tbl) { 138 return FloatVarBranch(FloatVarBranch::SEL_AFC_MAX,d,tbl); 139 } 140 141 inline FloatVarBranch 142 FLOAT_VAR_AFC_MAX(FloatAFC a, BranchTbl tbl) { 143 return FloatVarBranch(FloatVarBranch::SEL_AFC_MAX,a,tbl); 144 } 145 146 inline FloatVarBranch 147 FLOAT_VAR_ACTION_MIN(double d, BranchTbl tbl) { 148 return FloatVarBranch(FloatVarBranch::SEL_ACTION_MIN,d,tbl); 149 } 150 151 inline FloatVarBranch 152 FLOAT_VAR_ACTION_MIN(FloatAction a, BranchTbl tbl) { 153 return FloatVarBranch(FloatVarBranch::SEL_ACTION_MIN,a,tbl); 154 } 155 156 inline FloatVarBranch 157 FLOAT_VAR_ACTION_MAX(double d, BranchTbl tbl) { 158 return FloatVarBranch(FloatVarBranch::SEL_ACTION_MAX,d,tbl); 159 } 160 161 inline FloatVarBranch 162 FLOAT_VAR_ACTION_MAX(FloatAction a, BranchTbl tbl) { 163 return FloatVarBranch(FloatVarBranch::SEL_ACTION_MAX,a,tbl); 164 } 165 166 inline FloatVarBranch 167 FLOAT_VAR_CHB_MIN(BranchTbl tbl) { 168 return FloatVarBranch(FloatVarBranch::SEL_CHB_MIN,tbl); 169 } 170 171 inline FloatVarBranch 172 FLOAT_VAR_CHB_MIN(FloatCHB c, BranchTbl tbl) { 173 return FloatVarBranch(FloatVarBranch::SEL_CHB_MIN,c,tbl); 174 } 175 176 inline FloatVarBranch 177 FLOAT_VAR_CHB_MAX(BranchTbl tbl) { 178 return FloatVarBranch(FloatVarBranch::SEL_CHB_MAX,tbl); 179 } 180 181 inline FloatVarBranch 182 FLOAT_VAR_CHB_MAX(FloatCHB c, BranchTbl tbl) { 183 return FloatVarBranch(FloatVarBranch::SEL_CHB_MAX,c,tbl); 184 } 185 186 inline FloatVarBranch 187 FLOAT_VAR_MIN_MIN(BranchTbl tbl) { 188 return FloatVarBranch(FloatVarBranch::SEL_MIN_MIN,tbl); 189 } 190 191 inline FloatVarBranch 192 FLOAT_VAR_MIN_MAX(BranchTbl tbl) { 193 return FloatVarBranch(FloatVarBranch::SEL_MIN_MAX,tbl); 194 } 195 196 inline FloatVarBranch 197 FLOAT_VAR_MAX_MIN(BranchTbl tbl) { 198 return FloatVarBranch(FloatVarBranch::SEL_MAX_MIN,tbl); 199 } 200 201 inline FloatVarBranch 202 FLOAT_VAR_MAX_MAX(BranchTbl tbl) { 203 return FloatVarBranch(FloatVarBranch::SEL_MAX_MAX,tbl); 204 } 205 206 inline FloatVarBranch 207 FLOAT_VAR_SIZE_MIN(BranchTbl tbl) { 208 return FloatVarBranch(FloatVarBranch::SEL_SIZE_MIN,tbl); 209 } 210 211 inline FloatVarBranch 212 FLOAT_VAR_SIZE_MAX(BranchTbl tbl) { 213 return FloatVarBranch(FloatVarBranch::SEL_SIZE_MAX,tbl); 214 } 215 216 inline FloatVarBranch 217 FLOAT_VAR_DEGREE_SIZE_MIN(BranchTbl tbl) { 218 return FloatVarBranch(FloatVarBranch::SEL_DEGREE_SIZE_MIN,tbl); 219 } 220 221 inline FloatVarBranch 222 FLOAT_VAR_DEGREE_SIZE_MAX(BranchTbl tbl) { 223 return FloatVarBranch(FloatVarBranch::SEL_DEGREE_SIZE_MAX,tbl); 224 } 225 226 inline FloatVarBranch 227 FLOAT_VAR_AFC_SIZE_MIN(double d, BranchTbl tbl) { 228 return FloatVarBranch(FloatVarBranch::SEL_AFC_SIZE_MIN,d,tbl); 229 } 230 231 inline FloatVarBranch 232 FLOAT_VAR_AFC_SIZE_MIN(FloatAFC a, BranchTbl tbl) { 233 return FloatVarBranch(FloatVarBranch::SEL_AFC_SIZE_MIN,a,tbl); 234 } 235 236 inline FloatVarBranch 237 FLOAT_VAR_AFC_SIZE_MAX(double d, BranchTbl tbl) { 238 return FloatVarBranch(FloatVarBranch::SEL_AFC_SIZE_MAX,d,tbl); 239 } 240 241 inline FloatVarBranch 242 FLOAT_VAR_AFC_SIZE_MAX(FloatAFC a, BranchTbl tbl) { 243 return FloatVarBranch(FloatVarBranch::SEL_AFC_SIZE_MAX,a,tbl); 244 } 245 246 inline FloatVarBranch 247 FLOAT_VAR_ACTION_SIZE_MIN(double d, BranchTbl tbl) { 248 return FloatVarBranch(FloatVarBranch::SEL_ACTION_SIZE_MIN,d,tbl); 249 } 250 251 inline FloatVarBranch 252 FLOAT_VAR_ACTION_SIZE_MIN(FloatAction a, BranchTbl tbl) { 253 return FloatVarBranch(FloatVarBranch::SEL_ACTION_SIZE_MIN,a,tbl); 254 } 255 256 inline FloatVarBranch 257 FLOAT_VAR_ACTION_SIZE_MAX(double d, BranchTbl tbl) { 258 return FloatVarBranch(FloatVarBranch::SEL_ACTION_SIZE_MAX,d,tbl); 259 } 260 261 inline FloatVarBranch 262 FLOAT_VAR_ACTION_SIZE_MAX(FloatAction a, BranchTbl tbl) { 263 return FloatVarBranch(FloatVarBranch::SEL_ACTION_SIZE_MAX,a,tbl); 264 } 265 266 inline FloatVarBranch 267 FLOAT_VAR_CHB_SIZE_MIN(BranchTbl tbl) { 268 return FloatVarBranch(FloatVarBranch::SEL_CHB_SIZE_MIN,tbl); 269 } 270 271 inline FloatVarBranch 272 FLOAT_VAR_CHB_SIZE_MIN(FloatCHB c, BranchTbl tbl) { 273 return FloatVarBranch(FloatVarBranch::SEL_CHB_SIZE_MIN,c,tbl); 274 } 275 276 inline FloatVarBranch 277 FLOAT_VAR_CHB_SIZE_MAX(BranchTbl tbl) { 278 return FloatVarBranch(FloatVarBranch::SEL_CHB_SIZE_MAX,tbl); 279 } 280 281 inline FloatVarBranch 282 FLOAT_VAR_CHB_SIZE_MAX(FloatCHB c, BranchTbl tbl) { 283 return FloatVarBranch(FloatVarBranch::SEL_CHB_SIZE_MAX,c,tbl); 284 } 285 286} 287 288// STATISTICS: float-branch