/home/coin/SVN-release/CoinAll-1.1.0/FlopCpp/src/MP_variable.hpp

Go to the documentation of this file.
00001 // ******************** FlopCpp **********************************************
00002 // File: MP_variable.hpp
00003 // $Id$
00004 // Author: Tim Helge Hultberg (thh@mat.ua.pt)
00005 // Copyright (C) 2003 Tim Helge Hultberg
00006 // All Rights Reserved.
00007 //****************************************************************************
00008 
00009 #ifndef _MP_variable_hpp_
00010 #define _MP_variable_hpp_
00011 
00012 #include "MP_set.hpp"
00013 #include "MP_index.hpp"
00014 #include "MP_expression.hpp"
00015 #include "MP_domain.hpp"
00016 #include "MP_data.hpp"
00017 
00018 namespace flopc {
00019 
00023   enum variableType {continuous, discrete};
00024 
00025   class MP_model;
00026   class MP_variable;
00027 
00035   class MP_variable : public RowMajor, public Functor , public Named {
00036     friend class MP_model;
00037     friend class DisplayVariable;
00038     friend class VariableRef;
00039   public:
00040     MP_variable(const MP_set_base &s1 = MP_set::getEmpty(), 
00041                 const MP_set_base &s2 = MP_set::getEmpty(), 
00042                 const MP_set_base &s3 = MP_set::getEmpty(),
00043                 const MP_set_base &s4 = MP_set::getEmpty(), 
00044                 const MP_set_base &s5 = MP_set::getEmpty());
00045 
00046     void display(const std::string &s = "");  
00047 
00048     ~MP_variable() {
00049     }
00050 
00052     double level(int i1=0, int i2=0, int i3=0, int i4=0, int i5=0);
00053 
00055     const VariableRef& operator()(
00056       const MP_index_exp& d1 = MP_index_exp::getEmpty(), 
00057       const MP_index_exp& d2 = MP_index_exp::getEmpty(), 
00058       const MP_index_exp& d3 = MP_index_exp::getEmpty(),
00059       const MP_index_exp& d4 = MP_index_exp::getEmpty(), 
00060       const MP_index_exp& d5 = MP_index_exp::getEmpty()
00061       ) {
00062       return *new VariableRef(this, d1, d2, d3, d4, d5);
00063     }
00064     
00065     //void display(string s = "");  
00066 
00068     void binary() { 
00069       upperLimit.initialize(1);
00070       type = discrete; 
00071     }
00072 
00074     void integer() { 
00075       type = discrete; 
00076     }
00077  
00079     MP_data upperLimit;
00081     MP_data lowerLimit;
00082   private:
00083     void operator()() const;
00084     const MP_set_base *S1, *S2, *S3, *S4, *S5;
00085     MP_index i1,i2,i3,i4,i5;
00086 
00087     MP_model *M;
00088     variableType type;
00089     int offset;
00090   };
00091 
00096   class MP_binary_variable : public MP_variable {
00097   public:
00098     MP_binary_variable(const MP_set_base &s1 = MP_set::getEmpty(), 
00099                        const MP_set_base &s2 = MP_set::getEmpty(), 
00100                        const MP_set_base &s3 = MP_set::getEmpty(),
00101                        const MP_set_base &s4 = MP_set::getEmpty(), 
00102                        const MP_set_base &s5 = MP_set::getEmpty()) :
00103       MP_variable(s1,s2,s3,s4,s5) {
00104       binary();
00105     }
00106   };
00107 
00108 } // End of namespace flopc
00109 #endif 

Generated on Sun Nov 14 14:06:33 2010 for Coin-All by  doxygen 1.4.7