00001 #include <scil/variable.h> 00002 #include <scil/var_obj.h> 00003 #include <scil/row.h> 00004 #include <scil/core/monomial.h> 00005 #include <scil/core/polynomial.h> 00006 00007 namespace SCIL { 00008 00009 double var::obj() { 00010 return var_pointer()->obj(); 00011 }; 00012 00013 double var::lower_bound() { 00014 return var_pointer()->lower_bound(); 00015 }; 00016 00017 double var::upper_bound() { 00018 return var_pointer()->upper_bound(); 00019 } 00020 00021 Vartype var::type() { 00022 return var_pointer()->type(); 00023 }; 00024 00025 var_obj* var::var_pointer() const { 00026 //if (VS==nil) cout<<"nil variable\n"; 00027 return VS; 00028 } 00029 00030 ABA_Variable* var::Avar_pointer() { 00031 if (VS==nil) cout<<"nil variable\n"; 00032 return VS->AVar(); 00033 } 00034 00035 row var::operator+ (const row& r) { 00036 return row(*this)+r; 00037 } 00038 00039 row var::operator- (const row& r) { 00040 return row(*this)-r; 00041 } 00042 00043 polynomial var::operator+(const polynomial& p) { 00044 return monomial(*this) + p; 00045 } 00046 00047 polynomial var::operator-(const polynomial& p) { 00048 return monomial(*this) - p; 00049 } 00050 00051 polynomial var::operator*(const polynomial& p) { 00052 return monomial(*this) * p; 00053 } 00054 00055 row var::operator+ (const var& v) { 00056 return *this + row(v); 00057 } 00058 00059 row var::operator- (const var& v) { 00060 return *this - row(v); 00061 } 00062 00063 row var::operator* (double d) { 00064 return row(*this)*d; 00065 } 00066 00067 monomial var::operator* (const var& a) { 00068 return monomial(*this)*a; 00069 } 00070 00071 bool var::operator< (const var& v1) const { 00072 return VS<v1.VS; 00073 } 00074 00075 bool var::operator<= (const var& v1) const { 00076 return VS<=v1.VS; 00077 } 00078 00079 bool var::operator!= (const var& v1) const { 00080 return VS!=v1.VS; 00081 } 00082 00083 bool var::operator== (const var& v1) const { 00084 return VS==v1.VS; 00085 } 00086 00087 bool var::operator> (const var& v1) const { 00088 return VS>v1.VS; 00089 } 00090 00091 /*row operator*(double d, const var& v) { 00092 return row(v)*d; 00093 }*/ 00094 00095 int compare(const var& v1, const var& v2) { 00096 if(v1>v2) return 1; 00097 if(v1<v2) return -1; 00098 return 0; 00099 }; 00100 int compare(var& v1, const var& v2) { 00101 if(v1>v2) return 1; 00102 if(v1<v2) return -1; 00103 return 0; 00104 } 00105 std::istream& operator>>(std::istream& in, SCIL::var& b) { 00106 return in; 00107 } 00108 00109 };