Generated on Mon Jul 6 18:09:05 2009 for Gecode by doxygen 1.5.9

post-view-bool.cpp

Go to the documentation of this file.
00001 /*
00002  *  CAUTION:
00003  *    This file has been automatically generated. Do not edit,
00004  *    edit the specification file
00005  *      gecode/int/branch/post-view-bool.bs
00006  *    instead.
00007  *
00008  *  This file contains generated code fragments which are
00009  *  copyrighted as follows:
00010  *
00011  *  Main author:
00012  *     Christian Schulte <schulte@gecode.org>
00013  *
00014  *  Copyright:
00015  *     Christian Schulte, 2008
00016  *
00017  *  The generated code fragments are part of Gecode, the generic
00018  *  constraint 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 #include <gecode/int/branch.hh>
00043 
00044 namespace Gecode { namespace Int { namespace Branch {
00045 
00047   void
00048   virtualize(Gecode::Space& home, IntVarBranch vars,
00049              const Gecode::VarBranchOptions& o_vars,
00050              Gecode::ViewSelVirtualBase<BoolView>*& v) {
00051     switch (vars) {
00052      case INT_VAR_RND:
00053        v = new (home) ViewSelVirtual<ViewSelRnd<BoolView> >(home,o_vars);
00054        break;
00055      case INT_VAR_MIN_MIN:
00056        v = new (home) ViewSelVirtual<ViewSelNone<BoolView> >(home,o_vars);
00057        break;
00058      case INT_VAR_MIN_MAX:
00059        v = new (home) ViewSelVirtual<ViewSelNone<BoolView> >(home,o_vars);
00060        break;
00061      case INT_VAR_MAX_MIN:
00062        v = new (home) ViewSelVirtual<ViewSelNone<BoolView> >(home,o_vars);
00063        break;
00064      case INT_VAR_MAX_MAX:
00065        v = new (home) ViewSelVirtual<ViewSelNone<BoolView> >(home,o_vars);
00066        break;
00067      case INT_VAR_SIZE_MIN:
00068        v = new (home) ViewSelVirtual<ViewSelNone<BoolView> >(home,o_vars);
00069        break;
00070      case INT_VAR_SIZE_MAX:
00071        v = new (home) ViewSelVirtual<ViewSelNone<BoolView> >(home,o_vars);
00072        break;
00073      case INT_VAR_DEGREE_MIN:
00074        v = new (home) ViewSelVirtual<ViewSelDegreeMin<BoolView> >(home,o_vars);
00075        break;
00076      case INT_VAR_DEGREE_MAX:
00077        v = new (home) ViewSelVirtual<ViewSelDegreeMax<BoolView> >(home,o_vars);
00078        break;
00079      case INT_VAR_SIZE_DEGREE_MIN:
00080        v = new (home) ViewSelVirtual<ViewSelDegreeMax<BoolView> >(home,o_vars);
00081        break;
00082      case INT_VAR_SIZE_DEGREE_MAX:
00083        v = new (home) ViewSelVirtual<ViewSelDegreeMin<BoolView> >(home,o_vars);
00084        break;
00085      case INT_VAR_REGRET_MIN_MIN:
00086        v = new (home) ViewSelVirtual<ViewSelNone<BoolView> >(home,o_vars);
00087        break;
00088      case INT_VAR_REGRET_MIN_MAX:
00089        v = new (home) ViewSelVirtual<ViewSelNone<BoolView> >(home,o_vars);
00090        break;
00091      case INT_VAR_REGRET_MAX_MIN:
00092        v = new (home) ViewSelVirtual<ViewSelNone<BoolView> >(home,o_vars);
00093        break;
00094      case INT_VAR_REGRET_MAX_MAX:
00095        v = new (home) ViewSelVirtual<ViewSelNone<BoolView> >(home,o_vars);
00096        break;
00097     default:
00098       throw UnknownBranching("Int::branch");
00099     }
00100   }
00101 
00102 }}}
00103 
00104 namespace Gecode {
00105 
00106   void
00107   branch(Gecode::Space& home, const BoolVarArgs& x,
00108          IntVarBranch vars, IntValBranch vals,
00109          const Gecode::VarBranchOptions& o_vars,
00110          const Gecode::ValBranchOptions& o_vals) {
00111     using namespace Gecode;
00112     using namespace Gecode::Int;
00113     using namespace Gecode::Int::Branch;
00114 
00115 
00116     if (home.failed()) return;
00117     ViewArray<BoolView> xv(home,x);
00118     switch (vars) {
00119     case INT_VAR_NONE:
00120       {
00121         ViewSelNone<BoolView> v(home,o_vars);
00122         post(home,xv,v,vals,o_vals);
00123       }
00124       break;
00125     case INT_VAR_RND:
00126       {
00127         ViewSelRnd<BoolView> v(home,o_vars);
00128         post(home,xv,v,vals,o_vals);
00129       }
00130       break;
00131     case INT_VAR_MIN_MIN:
00132       {
00133         ViewSelNone<BoolView> v(home,o_vars);
00134         post(home,xv,v,vals,o_vals);
00135       }
00136       break;
00137     case INT_VAR_MIN_MAX:
00138       {
00139         ViewSelNone<BoolView> v(home,o_vars);
00140         post(home,xv,v,vals,o_vals);
00141       }
00142       break;
00143     case INT_VAR_MAX_MIN:
00144       {
00145         ViewSelNone<BoolView> v(home,o_vars);
00146         post(home,xv,v,vals,o_vals);
00147       }
00148       break;
00149     case INT_VAR_MAX_MAX:
00150       {
00151         ViewSelNone<BoolView> v(home,o_vars);
00152         post(home,xv,v,vals,o_vals);
00153       }
00154       break;
00155     case INT_VAR_SIZE_MIN:
00156       {
00157         ViewSelNone<BoolView> v(home,o_vars);
00158         post(home,xv,v,vals,o_vals);
00159       }
00160       break;
00161     case INT_VAR_SIZE_MAX:
00162       {
00163         ViewSelNone<BoolView> v(home,o_vars);
00164         post(home,xv,v,vals,o_vals);
00165       }
00166       break;
00167     case INT_VAR_DEGREE_MIN:
00168       {
00169         ViewSelDegreeMin<BoolView> v(home,o_vars);
00170         post(home,xv,v,vals,o_vals);
00171       }
00172       break;
00173     case INT_VAR_DEGREE_MAX:
00174       {
00175         ViewSelDegreeMax<BoolView> v(home,o_vars);
00176         post(home,xv,v,vals,o_vals);
00177       }
00178       break;
00179     case INT_VAR_SIZE_DEGREE_MIN:
00180       {
00181         ViewSelDegreeMax<BoolView> v(home,o_vars);
00182         post(home,xv,v,vals,o_vals);
00183       }
00184       break;
00185     case INT_VAR_SIZE_DEGREE_MAX:
00186       {
00187         ViewSelDegreeMin<BoolView> v(home,o_vars);
00188         post(home,xv,v,vals,o_vals);
00189       }
00190       break;
00191     case INT_VAR_REGRET_MIN_MIN:
00192       {
00193         ViewSelNone<BoolView> v(home,o_vars);
00194         post(home,xv,v,vals,o_vals);
00195       }
00196       break;
00197     case INT_VAR_REGRET_MIN_MAX:
00198       {
00199         ViewSelNone<BoolView> v(home,o_vars);
00200         post(home,xv,v,vals,o_vals);
00201       }
00202       break;
00203     case INT_VAR_REGRET_MAX_MIN:
00204       {
00205         ViewSelNone<BoolView> v(home,o_vars);
00206         post(home,xv,v,vals,o_vals);
00207       }
00208       break;
00209     case INT_VAR_REGRET_MAX_MAX:
00210       {
00211         ViewSelNone<BoolView> v(home,o_vars);
00212         post(home,xv,v,vals,o_vals);
00213       }
00214       break;
00215     default:
00216       throw UnknownBranching("Int::branch");
00217     }
00218   }
00219 
00220   void
00221   branch(Gecode::Space& home, const BoolVarArgs& x,
00222          const Gecode::TieBreakVarBranch<IntVarBranch>& vars,
00223          IntValBranch vals,
00224          const Gecode::TieBreakVarBranchOptions& o_vars,
00225          const Gecode::ValBranchOptions& o_vals) {
00226     using namespace Gecode;
00227     using namespace Gecode::Int;
00228     using namespace Gecode::Int::Branch;
00229 
00230 
00231     if (home.failed()) return;
00232     if ((vars.a == INT_VAR_NONE) || (vars.a == INT_VAR_RND) ||
00233         ((vars.b == INT_VAR_NONE) && (vars.c == INT_VAR_NONE) && (vars.d == INT_VAR_NONE))) {
00234       branch(home,x,vars.a,vals,o_vars.a,o_vals);
00235       return;
00236     }
00237     ViewArray<BoolView> xv(home,x);
00238     Gecode::ViewSelVirtualBase<BoolView>* tb[3];
00239     int n=0;
00240     if (vars.b != INT_VAR_NONE)
00241       virtualize(home,vars.b,o_vars.b,tb[n++]);
00242     if (vars.c != INT_VAR_NONE)
00243       virtualize(home,vars.c,o_vars.c,tb[n++]);
00244     if (vars.d != INT_VAR_NONE)
00245       virtualize(home,vars.d,o_vars.d,tb[n++]);
00246     assert(n > 0);
00247     ViewSelTieBreakDynamic<BoolView> vbcd(home,tb,n);
00248     switch (vars.a) {
00249     case INT_VAR_MIN_MIN:
00250       {
00251         ViewSelNone<BoolView> va(home,o_vars.a);
00252         ViewSelTieBreakStatic<ViewSelNone<BoolView>,
00253           ViewSelTieBreakDynamic<BoolView> > v(home,va,vbcd);
00254         post(home,xv,v,vals,o_vals);
00255       }
00256       break;
00257     case INT_VAR_MIN_MAX:
00258       {
00259         ViewSelNone<BoolView> va(home,o_vars.a);
00260         ViewSelTieBreakStatic<ViewSelNone<BoolView>,
00261           ViewSelTieBreakDynamic<BoolView> > v(home,va,vbcd);
00262         post(home,xv,v,vals,o_vals);
00263       }
00264       break;
00265     case INT_VAR_MAX_MIN:
00266       {
00267         ViewSelNone<BoolView> va(home,o_vars.a);
00268         ViewSelTieBreakStatic<ViewSelNone<BoolView>,
00269           ViewSelTieBreakDynamic<BoolView> > v(home,va,vbcd);
00270         post(home,xv,v,vals,o_vals);
00271       }
00272       break;
00273     case INT_VAR_MAX_MAX:
00274       {
00275         ViewSelNone<BoolView> va(home,o_vars.a);
00276         ViewSelTieBreakStatic<ViewSelNone<BoolView>,
00277           ViewSelTieBreakDynamic<BoolView> > v(home,va,vbcd);
00278         post(home,xv,v,vals,o_vals);
00279       }
00280       break;
00281     case INT_VAR_SIZE_MIN:
00282       {
00283         ViewSelNone<BoolView> va(home,o_vars.a);
00284         ViewSelTieBreakStatic<ViewSelNone<BoolView>,
00285           ViewSelTieBreakDynamic<BoolView> > v(home,va,vbcd);
00286         post(home,xv,v,vals,o_vals);
00287       }
00288       break;
00289     case INT_VAR_SIZE_MAX:
00290       {
00291         ViewSelNone<BoolView> va(home,o_vars.a);
00292         ViewSelTieBreakStatic<ViewSelNone<BoolView>,
00293           ViewSelTieBreakDynamic<BoolView> > v(home,va,vbcd);
00294         post(home,xv,v,vals,o_vals);
00295       }
00296       break;
00297     case INT_VAR_DEGREE_MIN:
00298       {
00299         ViewSelDegreeMin<BoolView> va(home,o_vars.a);
00300         ViewSelTieBreakStatic<ViewSelDegreeMin<BoolView>,
00301           ViewSelTieBreakDynamic<BoolView> > v(home,va,vbcd);
00302         post(home,xv,v,vals,o_vals);
00303       }
00304       break;
00305     case INT_VAR_DEGREE_MAX:
00306       {
00307         ViewSelDegreeMax<BoolView> va(home,o_vars.a);
00308         ViewSelTieBreakStatic<ViewSelDegreeMax<BoolView>,
00309           ViewSelTieBreakDynamic<BoolView> > v(home,va,vbcd);
00310         post(home,xv,v,vals,o_vals);
00311       }
00312       break;
00313     case INT_VAR_SIZE_DEGREE_MIN:
00314       {
00315         ViewSelDegreeMax<BoolView> va(home,o_vars.a);
00316         ViewSelTieBreakStatic<ViewSelDegreeMax<BoolView>,
00317           ViewSelTieBreakDynamic<BoolView> > v(home,va,vbcd);
00318         post(home,xv,v,vals,o_vals);
00319       }
00320       break;
00321     case INT_VAR_SIZE_DEGREE_MAX:
00322       {
00323         ViewSelDegreeMin<BoolView> va(home,o_vars.a);
00324         ViewSelTieBreakStatic<ViewSelDegreeMin<BoolView>,
00325           ViewSelTieBreakDynamic<BoolView> > v(home,va,vbcd);
00326         post(home,xv,v,vals,o_vals);
00327       }
00328       break;
00329     case INT_VAR_REGRET_MIN_MIN:
00330       {
00331         ViewSelNone<BoolView> va(home,o_vars.a);
00332         ViewSelTieBreakStatic<ViewSelNone<BoolView>,
00333           ViewSelTieBreakDynamic<BoolView> > v(home,va,vbcd);
00334         post(home,xv,v,vals,o_vals);
00335       }
00336       break;
00337     case INT_VAR_REGRET_MIN_MAX:
00338       {
00339         ViewSelNone<BoolView> va(home,o_vars.a);
00340         ViewSelTieBreakStatic<ViewSelNone<BoolView>,
00341           ViewSelTieBreakDynamic<BoolView> > v(home,va,vbcd);
00342         post(home,xv,v,vals,o_vals);
00343       }
00344       break;
00345     case INT_VAR_REGRET_MAX_MIN:
00346       {
00347         ViewSelNone<BoolView> va(home,o_vars.a);
00348         ViewSelTieBreakStatic<ViewSelNone<BoolView>,
00349           ViewSelTieBreakDynamic<BoolView> > v(home,va,vbcd);
00350         post(home,xv,v,vals,o_vals);
00351       }
00352       break;
00353     case INT_VAR_REGRET_MAX_MAX:
00354       {
00355         ViewSelNone<BoolView> va(home,o_vars.a);
00356         ViewSelTieBreakStatic<ViewSelNone<BoolView>,
00357           ViewSelTieBreakDynamic<BoolView> > v(home,va,vbcd);
00358         post(home,xv,v,vals,o_vals);
00359       }
00360       break;
00361     default:
00362       throw UnknownBranching("Int::branch");
00363     }
00364   }
00365 
00366 }
00367 
00368 
00369 // STATISTICS: int-branch
00370