exprBQuad.hpp

Go to the documentation of this file.
00001 /* $Id: exprBQuad.hpp 141 2009-06-03 04:19:19Z pbelotti $ */
00002 /*
00003  * Name:    exprBQuad.hpp
00004  * Author:  Pietro Belotti
00005  * Purpose: definition of operators to compute lower/upper bounds of quadratic forms
00006  *
00007  * (C) Carnegie-Mellon University, 2006. 
00008  * This file is licensed under the Common Public License (CPL)
00009  */
00010 
00011 #ifndef COUENNE_EXPRBQUAD_H
00012 #define COUENNE_EXPRBQUAD_H
00013 
00014 #include "exprOp.hpp"
00015 #include "exprQuad.hpp"
00016 
00017 
00020 
00021 class exprLBQuad: public expression {
00022 
00023   exprQuad *ref_; 
00024 
00025  public:
00026 
00028   exprLBQuad (exprQuad *ref): 
00029     ref_ (ref) {}
00030 
00032   exprLBQuad (const exprLBQuad &src, Domain *d = NULL): 
00033     ref_ (dynamic_cast <exprQuad *> (src.ref_ -> isaCopy () ? 
00034                                      src.ref_ -> Copy () -> clone (d) : 
00035                                      src.ref_ -> clone (d))) {}
00036 
00038   ~exprLBQuad () {}
00039 
00041   expression *clone (Domain *d = NULL) const
00042   {return new exprLBQuad (*this, d);}
00043 
00045   inline CouNumber operator () () 
00046   {return ref_ -> computeQBound (-1);}
00047 
00049   virtual void print (std::ostream &s = std::cout,     //< output stream
00050                       bool descend = false) const      //< descend into auxiliaries' image?
00051 
00052   {s << "quadLower("; ref_ -> print (s, descend); s << ')';}
00053 };
00054 
00055 
00058 
00059 class exprUBQuad: public expression {
00060 
00061   exprQuad *ref_; 
00062 
00063  public:
00064 
00066   exprUBQuad (exprQuad *ref): 
00067     ref_ (ref) {}
00068 
00070   exprUBQuad (const exprUBQuad &src, Domain *d = NULL): 
00071     ref_ (dynamic_cast <exprQuad *> (src.ref_ -> isaCopy () ? 
00072                                      src.ref_ -> Copy () -> clone (d) : 
00073                                      src.ref_ -> clone (d))) {}
00074 
00076   ~exprUBQuad () {}
00077 
00079   expression *clone (Domain *d = NULL) const
00080   {return new exprUBQuad (*this, d);}
00081 
00083   inline CouNumber operator () () 
00084   {return ref_ -> computeQBound (1);}
00085 
00087   virtual void print (std::ostream &s = std::cout,     //< output stream
00088                       bool descend = false) const      //< descend into auxiliaries' image?
00089 
00090   {s << "quadUpper("; ref_ -> print (s, descend); s << ')';}
00091 };
00092 
00093 #endif

Generated on Wed May 19 03:12:37 2010 for Couenne by  doxygen 1.4.7