00001 #ifndef SCIL_VARIABLE_H 00002 #define SCIL_VARIABLE_H 00003 00004 #include <scil/global.h> 00005 #include<iostream> 00006 #define nil 0 00007 00008 namespace SCIL { 00009 00010 class row; 00011 class var_obj; 00012 class var; 00013 class monomial; 00014 class polynomial; 00015 class ABA_Variable; 00016 00017 //row operator*(double d, const var& v); 00018 00020 class var { 00021 00022 private: 00024 var_obj* VS; 00025 00026 public: 00027 00029 var(var_obj* VS_) { VS=VS_; } 00031 var() { VS=nil; } 00033 var(const var& v) { VS=v.VS; } 00035 ABA_Variable* Avar_pointer(); 00036 00038 var_obj* var_pointer() const; 00039 00041 double obj(); 00042 00044 double lower_bound(); 00045 00047 double upper_bound(); 00048 00050 Vartype type(); 00052 row operator+ (const row& r); 00054 row operator- (const row& r); 00056 polynomial operator+ (const polynomial& p); 00058 polynomial operator- (const polynomial& p); 00060 polynomial operator* (const polynomial& p); 00062 monomial operator* (const var& a); 00064 row operator+ (const var& v); 00066 row operator- (const var& v); 00068 var& operator=(const var& v) { VS=v.VS; return *this; } 00070 bool operator< (const var& v1) const; 00072 bool operator<= (const var& v1) const; 00074 bool operator!= (const var& v1) const; 00076 bool operator== (const var& v1) const; 00078 bool operator> (const var& v1) const; 00089 row operator* (double d); 00090 00091 friend std::ostream& operator<<(std::ostream& o,const var& v) { 00092 return o<<v.VS; }; 00093 }; 00094 00095 }; 00096 00097 #endif