Generated on Mon May 5 05:53:56 2008 for Gecode by doxygen 1.5.5

linear-int.cc

Go to the documentation of this file.
00001 /* -*- mode: C++; c-basic-offset: 2; indent-tabs-mode: nil -*- */
00002 /*
00003  *  Main authors:
00004  *     Christian Schulte <schulte@gecode.org>
00005  *
00006  *  Copyright:
00007  *     Christian Schulte, 2002
00008  *
00009  *  Last modified:
00010  *     $Date: 2007-11-08 15:53:26 +0100 (Thu, 08 Nov 2007) $ by $Author: tack $
00011  *     $Revision: 5219 $
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 #include "gecode/int/linear.hh"
00039 
00040 namespace Gecode {
00041 
00042   using namespace Int;
00043 
00044   void
00045   linear(Space* home,
00046          const IntVarArgs& x, IntRelType r, int c, 
00047          IntConLevel icl, PropKind) {
00048     if (home->failed()) return;
00049     GECODE_AUTOARRAY(Linear::Term<IntView>, t, x.size());
00050     for (int i = x.size(); i--; ) {
00051       t[i].a=1; t[i].x=x[i];
00052     }
00053     Linear::post(home,t,x.size(),r,c,icl);
00054   }
00055 
00056   void
00057   linear(Space* home,
00058          const IntVarArgs& x, IntRelType r, int c, BoolVar b, 
00059          IntConLevel, PropKind) {
00060     if (home->failed()) return;
00061     GECODE_AUTOARRAY(Linear::Term<IntView>, t, x.size());
00062     for (int i = x.size(); i--; ) {
00063       t[i].a=1; t[i].x=x[i];
00064     }
00065     Linear::post(home,t,x.size(),r,c,b);
00066   }
00067 
00068   void
00069   linear(Space* home,
00070          const IntArgs& a, const IntVarArgs& x, IntRelType r, int c,
00071          IntConLevel icl, PropKind) {
00072     if (a.size() != x.size())
00073       throw ArgumentSizeMismatch("Int::linear");
00074     if (home->failed()) return;
00075     GECODE_AUTOARRAY(Linear::Term<IntView>, t, x.size());
00076     for (int i = x.size(); i--; ) {
00077       t[i].a=a[i]; t[i].x=x[i];
00078     }
00079     Linear::post(home,t,x.size(),r,c,icl);
00080   }
00081 
00082   void
00083   linear(Space* home,
00084          const IntArgs& a, const IntVarArgs& x, IntRelType r, int c, BoolVar b,
00085          IntConLevel, PropKind) {
00086     if (a.size() != x.size())
00087       throw ArgumentSizeMismatch("Int::linear");
00088     if (home->failed()) return;
00089     GECODE_AUTOARRAY(Linear::Term<IntView>, t, x.size());
00090     for (int i = x.size(); i--; ) {
00091       t[i].a=a[i]; t[i].x=x[i];
00092     }
00093     Linear::post(home,t,x.size(),r,c,b);
00094   }
00095 
00096   void
00097   linear(Space* home,
00098          const IntVarArgs& x, IntRelType r, IntVar y, 
00099          IntConLevel icl, PropKind) {
00100     if (home->failed()) return;
00101     GECODE_AUTOARRAY(Linear::Term<IntView>, t, x.size()+1);
00102     for (int i = x.size(); i--; ) {
00103       t[i].a=1; t[i].x=x[i];
00104     }
00105     t[x.size()].a=-1; t[x.size()].x=y;
00106     Linear::post(home,t,x.size()+1,r,0,icl);
00107   }
00108 
00109   void
00110   linear(Space* home,
00111          const IntVarArgs& x, IntRelType r, IntVar y, BoolVar b,
00112          IntConLevel, PropKind) {
00113     if (home->failed()) return;
00114     GECODE_AUTOARRAY(Linear::Term<IntView>, t, x.size()+1);
00115     for (int i = x.size(); i--; ) {
00116       t[i].a=1; t[i].x=x[i];
00117     }
00118     t[x.size()].a=-1; t[x.size()].x=y;
00119     Linear::post(home,t,x.size()+1,r,0,b);
00120   }
00121 
00122   void
00123   linear(Space* home,
00124          const IntArgs& a, const IntVarArgs& x, IntRelType r, IntVar y,
00125          IntConLevel icl, PropKind) {
00126     if (a.size() != x.size())
00127       throw ArgumentSizeMismatch("Int::linear");
00128     if (home->failed()) return;
00129     GECODE_AUTOARRAY(Linear::Term<IntView>, t, x.size()+1);
00130     for (int i = x.size(); i--; ) {
00131       t[i].a=a[i]; t[i].x=x[i];
00132     }
00133     t[x.size()].a=-1; t[x.size()].x=y;
00134     Linear::post(home,t,x.size()+1,r,0,icl);
00135   }
00136 
00137   void
00138   linear(Space* home,
00139          const IntArgs& a, const IntVarArgs& x, IntRelType r, IntVar y,
00140          BoolVar b, IntConLevel, PropKind) {
00141     if (a.size() != x.size())
00142       throw ArgumentSizeMismatch("Int::linear");
00143     if (home->failed()) return;
00144     GECODE_AUTOARRAY(Linear::Term<IntView>, t, x.size()+1);
00145     for (int i = x.size(); i--; ) {
00146       t[i].a=a[i]; t[i].x=x[i];
00147     }
00148     t[x.size()].a=-1; t[x.size()].x=y;
00149     Linear::post(home,t,x.size()+1,r,0,b);
00150   }
00151 
00152     namespace {
00153       using namespace Int;
00154       GECODE_REGISTER3(Linear::DomEq<double,ScaleView<double,double> >);
00155       GECODE_REGISTER3(Linear::DomEq<int,ScaleView<int,unsigned int> >);
00156       GECODE_REGISTER3(Linear::Eq<double,Linear::NoView,Linear::NoView>);
00157       GECODE_REGISTER4(Linear::Eq<double,ScaleView<double,double>,Linear::NoView>);
00158       GECODE_REGISTER5(Linear::Eq<double,ScaleView<double,double>,ScaleView<double,double> >);
00159       GECODE_REGISTER3(Linear::Eq<int,IntView,IntView>);
00160       GECODE_REGISTER3(Linear::Eq<int,IntView,Linear::NoView>);
00161       GECODE_REGISTER3(Linear::Eq<int,Linear::NoView,Linear::NoView>);
00162       GECODE_REGISTER4(Linear::Eq<int,ScaleView<int,unsigned int>,Linear::NoView>);
00163       GECODE_REGISTER5(Linear::Eq<int,ScaleView<int,unsigned int>,ScaleView<int,unsigned int> >);
00164       GECODE_REGISTER3(Linear::EqBin<int,IntView,IntView>);
00165       GECODE_REGISTER3(Linear::EqBin<int,IntView,MinusView>);
00166       GECODE_REGISTER3(Linear::EqBin<int,MinusView,MinusView>);
00167       GECODE_REGISTER4(Linear::EqTer<int,IntView,IntView,IntView>);
00168       GECODE_REGISTER4(Linear::EqTer<int,IntView,IntView,MinusView>);
00169       GECODE_REGISTER4(Linear::EqTer<int,IntView,MinusView,MinusView>);
00170       GECODE_REGISTER4(Linear::EqTer<int,MinusView,MinusView,MinusView>);
00171       GECODE_REGISTER3(Linear::GqBin<int,IntView,IntView>);
00172       GECODE_REGISTER3(Linear::GqBin<int,IntView,MinusView>);
00173       GECODE_REGISTER3(Linear::GqBin<int,MinusView,MinusView>);
00174       GECODE_REGISTER3(Linear::Lq<double,Linear::NoView,Linear::NoView>);
00175       GECODE_REGISTER4(Linear::Lq<double,Linear::NoView,ScaleView<double,double> >);
00176       GECODE_REGISTER4(Linear::Lq<double,ScaleView<double,double>,Linear::NoView>);
00177       GECODE_REGISTER5(Linear::Lq<double,ScaleView<double,double>,ScaleView<double,double> >);
00178       GECODE_REGISTER3(Linear::Lq<int,IntView,IntView>);
00179       GECODE_REGISTER3(Linear::Lq<int,IntView,Linear::NoView>);
00180       GECODE_REGISTER3(Linear::Lq<int,Linear::NoView,IntView>);
00181       GECODE_REGISTER3(Linear::Lq<int,Linear::NoView,Linear::NoView>);
00182       GECODE_REGISTER4(Linear::Lq<int,Linear::NoView,ScaleView<int,unsigned int> >);
00183       GECODE_REGISTER4(Linear::Lq<int,ScaleView<int,unsigned int>,Linear::NoView>);
00184       GECODE_REGISTER5(Linear::Lq<int,ScaleView<int,unsigned int>,ScaleView<int,unsigned int> >);
00185       GECODE_REGISTER3(Linear::LqBin<int,IntView,IntView>);
00186       GECODE_REGISTER3(Linear::LqBin<int,IntView,MinusView>);
00187       GECODE_REGISTER3(Linear::LqBin<int,MinusView,MinusView>);
00188       GECODE_REGISTER4(Linear::LqTer<int,IntView,IntView,IntView>);
00189       GECODE_REGISTER4(Linear::LqTer<int,IntView,IntView,MinusView>);
00190       GECODE_REGISTER4(Linear::LqTer<int,IntView,MinusView,MinusView>);
00191       GECODE_REGISTER4(Linear::LqTer<int,MinusView,MinusView,MinusView>);
00192       GECODE_REGISTER3(Linear::Nq<double,Linear::NoView,Linear::NoView>);
00193       GECODE_REGISTER4(Linear::Nq<double,ScaleView<double,double>,Linear::NoView>);
00194       GECODE_REGISTER5(Linear::Nq<double,ScaleView<double,double>,ScaleView<double,double> >);
00195       GECODE_REGISTER3(Linear::Nq<int,IntView,IntView>);
00196       GECODE_REGISTER3(Linear::Nq<int,IntView,Linear::NoView>);
00197       GECODE_REGISTER3(Linear::Nq<int,Linear::NoView,Linear::NoView>);
00198       GECODE_REGISTER4(Linear::Nq<int,ScaleView<int,unsigned int>,Linear::NoView>);
00199       GECODE_REGISTER5(Linear::Nq<int,ScaleView<int,unsigned int>,ScaleView<int,unsigned int> >);
00200       GECODE_REGISTER3(Linear::NqBin<int,IntView,IntView>);
00201       GECODE_REGISTER3(Linear::NqBin<int,IntView,MinusView>);
00202       GECODE_REGISTER3(Linear::NqBin<int,MinusView,MinusView>);
00203       GECODE_REGISTER4(Linear::NqTer<int,IntView,IntView,IntView>);
00204       GECODE_REGISTER4(Linear::NqTer<int,IntView,IntView,MinusView>);
00205       GECODE_REGISTER4(Linear::NqTer<int,IntView,MinusView,MinusView>);
00206       GECODE_REGISTER4(Linear::NqTer<int,MinusView,MinusView,MinusView>);
00207       GECODE_REGISTER5(Linear::ReEq<double,ScaleView<double,double>,Linear::NoView,BoolView>);
00208       GECODE_REGISTER5(Linear::ReEq<double,ScaleView<double,double>,Linear::NoView,NegBoolView>);
00209       GECODE_REGISTER6(Linear::ReEq<double,ScaleView<double,double>,ScaleView<double,double>,BoolView>);
00210       GECODE_REGISTER6(Linear::ReEq<double,ScaleView<double,double>,ScaleView<double,double>,NegBoolView>);
00211       GECODE_REGISTER4(Linear::ReEq<int,IntView,IntView,BoolView>);
00212       GECODE_REGISTER4(Linear::ReEq<int,IntView,IntView,NegBoolView>);
00213       GECODE_REGISTER4(Linear::ReEq<int,IntView,Linear::NoView,BoolView>);
00214       GECODE_REGISTER4(Linear::ReEq<int,IntView,Linear::NoView,NegBoolView>);
00215       GECODE_REGISTER5(Linear::ReEq<int,ScaleView<int,unsigned int>,Linear::NoView,BoolView>);
00216       GECODE_REGISTER5(Linear::ReEq<int,ScaleView<int,unsigned int>,Linear::NoView,NegBoolView>);
00217       GECODE_REGISTER6(Linear::ReEq<int,ScaleView<int,unsigned int>,ScaleView<int,unsigned int>,BoolView>);
00218       GECODE_REGISTER6(Linear::ReEq<int,ScaleView<int,unsigned int>,ScaleView<int,unsigned int>,NegBoolView>);
00219       GECODE_REGISTER4(Linear::ReEqBin<int,IntView,IntView,BoolView>);
00220       GECODE_REGISTER4(Linear::ReEqBin<int,IntView,IntView,NegBoolView>);
00221       GECODE_REGISTER4(Linear::ReEqBin<int,IntView,MinusView,BoolView>);
00222       GECODE_REGISTER4(Linear::ReEqBin<int,IntView,MinusView,NegBoolView>);
00223       GECODE_REGISTER4(Linear::ReLq<double,Linear::NoView,ScaleView<double,double> >);
00224       GECODE_REGISTER4(Linear::ReLq<double,ScaleView<double,double>,Linear::NoView>);
00225       GECODE_REGISTER5(Linear::ReLq<double,ScaleView<double,double>,ScaleView<double,double> >);
00226       GECODE_REGISTER3(Linear::ReLq<int,IntView,IntView>);
00227       GECODE_REGISTER3(Linear::ReLq<int,IntView,Linear::NoView>);
00228       GECODE_REGISTER3(Linear::ReLq<int,Linear::NoView,IntView>);
00229       GECODE_REGISTER4(Linear::ReLq<int,Linear::NoView,ScaleView<int,unsigned int> >);
00230       GECODE_REGISTER4(Linear::ReLq<int,ScaleView<int,unsigned int>,Linear::NoView>);
00231       GECODE_REGISTER5(Linear::ReLq<int,ScaleView<int,unsigned int>,ScaleView<int,unsigned int> >);
00232       GECODE_REGISTER3(Linear::ReLqBin<int,IntView,IntView>);
00233       GECODE_REGISTER3(Linear::ReLqBin<int,IntView,MinusView>);
00234       GECODE_REGISTER3(Linear::ReLqBin<int,MinusView,MinusView>);
00235     }
00236 
00237 }
00238 
00239 // STATISTICS: int-post
00240