CouenneExprOp.hpp
Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011 #ifndef COUENNE_EXPROP_HPP
00012 #define COUENNE_EXPROP_HPP
00013
00014 #include <iostream>
00015
00016 #include "CouenneExpression.hpp"
00017 #include "CouenneTypes.hpp"
00018
00019 namespace Couenne {
00020
00021 #define MAX_ARG_LINE 10
00022
00023 class CouenneProblem;
00024 class Domain;
00025
00030
00031 class exprOp: public expression {
00032
00033 protected:
00034
00035 expression **arglist_;
00036 int nargs_;
00037
00038 public:
00039
00041 virtual inline enum nodeType Type () const
00042 {return N_ARY;}
00043
00045 exprOp (expression **arglist, int nargs):
00046 arglist_ (arglist),
00047 nargs_ (nargs)
00048 {}
00049
00051 exprOp (expression *arg0, expression *arg1):
00052 arglist_ (new expression * [2]),
00053 nargs_ (2)
00054 {arglist_ [0] = arg0; arglist_ [1] = arg1;}
00055
00057 virtual ~exprOp ();
00058
00061 exprOp (const exprOp &e, Domain *d = NULL):
00062 arglist_ (new expression * [e.nArgs ()]),
00063 nargs_ (e.nArgs ()) {}
00064
00066 inline expression **ArgList () const
00067 {return arglist_;}
00068
00070 virtual inline void ArgList (expression **al)
00071 {arglist_ = al;}
00072
00074 inline int nArgs () const
00075 {return nargs_;}
00076
00078 virtual void print (std::ostream &out = std::cout,
00079 bool = false) const;
00080
00082 virtual enum pos printPos () const
00083 {return INSIDE;}
00084
00086 virtual std::string printOp () const
00087 {return "??";}
00088
00091 virtual int DepList (std::set <int> &deplist, enum dig_type type = ORIG_ONLY);
00092
00094 virtual expression *simplify ();
00095
00097 expression **clonearglist (Domain *d = NULL) const {
00098 if (nargs_) {
00099 expression **al = new expression * [nargs_];
00100 for (register int i=0; i<nargs_; i++)
00101 al [i] = arglist_ [i] -> clone (d);
00102 return al;
00103 } else return NULL;
00104 }
00105
00107 int shrink_arglist (CouNumber, CouNumber);
00108
00110 virtual inline int Linearity ()
00111 {return NONLINEAR;}
00112
00114 virtual exprAux *standardize (CouenneProblem *, bool addAux = true);
00115
00117 virtual inline enum expr_type code ()
00118 {return COU_EXPROP;}
00119
00121 virtual bool isInteger ();
00122
00124 virtual int compare (exprOp &);
00125
00127 virtual int rank ();
00128
00131 virtual void fillDepSet (std::set <DepNode *, compNode> *dep, DepGraph *g) {
00132 for (int i=nargs_; i--;)
00133 arglist_ [i] -> fillDepSet (dep, g);
00134 }
00135
00137 virtual void replace (exprVar *, exprVar *);
00138
00140 virtual void realign (const CouenneProblem *p);
00141 };
00142
00143 }
00144
00145 #endif