/* -*- mode: C++; c-basic-offset: 2; indent-tabs-mode: nil -*- */ /* * Main authors: * Christian Schulte * * Copyright: * Christian Schulte, 2012 * * This file is part of Gecode, the generic constraint * development environment: * http://www.gecode.org * * Permission is hereby granted, free of charge, to any person obtaining * a copy of this software and associated documentation files (the * "Software"), to deal in the Software without restriction, including * without limitation the rights to use, copy, modify, merge, publish, * distribute, sublicense, and/or sell copies of the Software, and to * permit persons to whom the Software is furnished to do so, subject to * the following conditions: * * The above copyright notice and this permission notice shall be * included in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. * */ #include namespace Gecode { namespace Int { namespace Branch { ViewSel* viewsel(Space& home, const IntVarBranch& ivb) { switch (ivb.select()) { case IntVarBranch::SEL_NONE: return new (home) ViewSelNone(home,ivb); case IntVarBranch::SEL_RND: return new (home) ViewSelRnd(home,ivb); default: break; } if (ivb.tbl() != nullptr) { switch (ivb.select()) { case IntVarBranch::SEL_MERIT_MIN: return new (home) ViewSelMinTbl>(home,ivb); case IntVarBranch::SEL_MERIT_MAX: return new (home) ViewSelMaxTbl>(home,ivb); case IntVarBranch::SEL_MIN_MIN: return new (home) ViewSelMinTbl>(home,ivb); case IntVarBranch::SEL_MIN_MAX: return new (home) ViewSelMaxTbl>(home,ivb); case IntVarBranch::SEL_MAX_MIN: return new (home) ViewSelMinTbl>(home,ivb); case IntVarBranch::SEL_MAX_MAX: return new (home) ViewSelMaxTbl>(home,ivb); case IntVarBranch::SEL_SIZE_MIN: return new (home) ViewSelMinTbl>(home,ivb); case IntVarBranch::SEL_SIZE_MAX: return new (home) ViewSelMaxTbl>(home,ivb); case IntVarBranch::SEL_DEGREE_MIN: return new (home) ViewSelMinTbl>(home,ivb); case IntVarBranch::SEL_DEGREE_MAX: return new (home) ViewSelMaxTbl>(home,ivb); case IntVarBranch::SEL_AFC_MIN: return new (home) ViewSelMinTbl>(home,ivb); case IntVarBranch::SEL_AFC_MAX: return new (home) ViewSelMaxTbl>(home,ivb); case IntVarBranch::SEL_ACTION_MIN: return new (home) ViewSelMinTbl>(home,ivb); case IntVarBranch::SEL_ACTION_MAX: return new (home) ViewSelMaxTbl>(home,ivb); case IntVarBranch::SEL_CHB_MIN: return new (home) ViewSelMinTbl>(home,ivb); case IntVarBranch::SEL_CHB_MAX: return new (home) ViewSelMaxTbl>(home,ivb); case IntVarBranch::SEL_DEGREE_SIZE_MIN: return new (home) ViewSelMinTbl>(home,ivb); case IntVarBranch::SEL_DEGREE_SIZE_MAX: return new (home) ViewSelMaxTbl>(home,ivb); case IntVarBranch::SEL_AFC_SIZE_MIN: return new (home) ViewSelMinTbl>(home,ivb); case IntVarBranch::SEL_AFC_SIZE_MAX: return new (home) ViewSelMaxTbl>(home,ivb); case IntVarBranch::SEL_ACTION_SIZE_MIN: return new (home) ViewSelMinTbl>(home,ivb); case IntVarBranch::SEL_ACTION_SIZE_MAX: return new (home) ViewSelMaxTbl>(home,ivb); case IntVarBranch::SEL_CHB_SIZE_MIN: return new (home) ViewSelMinTbl>(home,ivb); case IntVarBranch::SEL_CHB_SIZE_MAX: return new (home) ViewSelMaxTbl>(home,ivb); case IntVarBranch::SEL_REGRET_MIN_MIN: return new (home) ViewSelMinTbl>(home,ivb); case IntVarBranch::SEL_REGRET_MIN_MAX: return new (home) ViewSelMaxTbl>(home,ivb); case IntVarBranch::SEL_REGRET_MAX_MIN: return new (home) ViewSelMinTbl>(home,ivb); case IntVarBranch::SEL_REGRET_MAX_MAX: return new (home) ViewSelMaxTbl>(home,ivb); default: throw UnknownBranching("Int::branch"); } } else { switch (ivb.select()) { case IntVarBranch::SEL_MERIT_MIN: return new (home) ViewSelMin>(home,ivb); case IntVarBranch::SEL_MERIT_MAX: return new (home) ViewSelMax>(home,ivb); case IntVarBranch::SEL_MIN_MIN: return new (home) ViewSelMin>(home,ivb); case IntVarBranch::SEL_MIN_MAX: return new (home) ViewSelMax>(home,ivb); case IntVarBranch::SEL_MAX_MIN: return new (home) ViewSelMin>(home,ivb); case IntVarBranch::SEL_MAX_MAX: return new (home) ViewSelMax>(home,ivb); case IntVarBranch::SEL_SIZE_MIN: return new (home) ViewSelMin>(home,ivb); case IntVarBranch::SEL_SIZE_MAX: return new (home) ViewSelMax>(home,ivb); case IntVarBranch::SEL_DEGREE_MIN: return new (home) ViewSelMin>(home,ivb); case IntVarBranch::SEL_DEGREE_MAX: return new (home) ViewSelMax>(home,ivb); case IntVarBranch::SEL_AFC_MIN: return new (home) ViewSelMin>(home,ivb); case IntVarBranch::SEL_AFC_MAX: return new (home) ViewSelMax>(home,ivb); case IntVarBranch::SEL_ACTION_MIN: return new (home) ViewSelMin>(home,ivb); case IntVarBranch::SEL_ACTION_MAX: return new (home) ViewSelMax>(home,ivb); case IntVarBranch::SEL_CHB_MIN: return new (home) ViewSelMin>(home,ivb); case IntVarBranch::SEL_CHB_MAX: return new (home) ViewSelMax>(home,ivb); case IntVarBranch::SEL_DEGREE_SIZE_MIN: return new (home) ViewSelMin>(home,ivb); case IntVarBranch::SEL_DEGREE_SIZE_MAX: return new (home) ViewSelMax>(home,ivb); case IntVarBranch::SEL_AFC_SIZE_MIN: return new (home) ViewSelMin>(home,ivb); case IntVarBranch::SEL_AFC_SIZE_MAX: return new (home) ViewSelMax>(home,ivb); case IntVarBranch::SEL_ACTION_SIZE_MIN: return new (home) ViewSelMin>(home,ivb); case IntVarBranch::SEL_ACTION_SIZE_MAX: return new (home) ViewSelMax>(home,ivb); case IntVarBranch::SEL_CHB_SIZE_MIN: return new (home) ViewSelMin>(home,ivb); case IntVarBranch::SEL_CHB_SIZE_MAX: return new (home) ViewSelMax>(home,ivb); case IntVarBranch::SEL_REGRET_MIN_MIN: return new (home) ViewSelMin>(home,ivb); case IntVarBranch::SEL_REGRET_MIN_MAX: return new (home) ViewSelMax>(home,ivb); case IntVarBranch::SEL_REGRET_MAX_MIN: return new (home) ViewSelMin>(home,ivb); case IntVarBranch::SEL_REGRET_MAX_MAX: return new (home) ViewSelMax>(home,ivb); default: throw UnknownBranching("Int::branch"); } } GECODE_NEVER; return nullptr; } ViewSel* viewsel(Space& home, const BoolVarBranch& bvb) { switch (bvb.select()) { case BoolVarBranch::SEL_NONE: return new (home) ViewSelNone(home,bvb); case BoolVarBranch::SEL_RND: return new (home) ViewSelRnd(home,bvb); default: break; } if (bvb.tbl() != nullptr) { switch (bvb.select()) { case BoolVarBranch::SEL_MERIT_MIN: return new (home) ViewSelMinTbl>(home,bvb); case BoolVarBranch::SEL_MERIT_MAX: return new (home) ViewSelMaxTbl>(home,bvb); case BoolVarBranch::SEL_DEGREE_MIN: return new (home) ViewSelMinTbl>(home,bvb); case BoolVarBranch::SEL_DEGREE_MAX: return new (home) ViewSelMaxTbl>(home,bvb); case BoolVarBranch::SEL_AFC_MIN: return new (home) ViewSelMinTbl>(home,bvb); case BoolVarBranch::SEL_AFC_MAX: return new (home) ViewSelMaxTbl>(home,bvb); case BoolVarBranch::SEL_ACTION_MIN: return new (home) ViewSelMinTbl>(home,bvb); case BoolVarBranch::SEL_ACTION_MAX: return new (home) ViewSelMaxTbl>(home,bvb); case BoolVarBranch::SEL_CHB_MIN: return new (home) ViewSelMinTbl>(home,bvb); case BoolVarBranch::SEL_CHB_MAX: return new (home) ViewSelMaxTbl>(home,bvb); default: throw UnknownBranching("Int::branch"); } } else { switch (bvb.select()) { case BoolVarBranch::SEL_MERIT_MIN: return new (home) ViewSelMin>(home,bvb); case BoolVarBranch::SEL_MERIT_MAX: return new (home) ViewSelMax>(home,bvb); case BoolVarBranch::SEL_DEGREE_MIN: return new (home) ViewSelMin>(home,bvb); case BoolVarBranch::SEL_DEGREE_MAX: return new (home) ViewSelMax>(home,bvb); case BoolVarBranch::SEL_AFC_MIN: return new (home) ViewSelMin>(home,bvb); case BoolVarBranch::SEL_AFC_MAX: return new (home) ViewSelMax>(home,bvb); case BoolVarBranch::SEL_ACTION_MIN: return new (home) ViewSelMin>(home,bvb); case BoolVarBranch::SEL_ACTION_MAX: return new (home) ViewSelMax>(home,bvb); case BoolVarBranch::SEL_CHB_MIN: return new (home) ViewSelMin>(home,bvb); case BoolVarBranch::SEL_CHB_MAX: return new (home) ViewSelMax>(home,bvb); default: throw UnknownBranching("Int::branch"); } } GECODE_NEVER; return nullptr; } }}} // STATISTICS: int-branch