00001 #ifndef SCIL_ROW_H 00002 #define SCIL_ROW_H 00003 00004 #include <list> 00005 #undef set 00006 #include <scil/row_entry.h> 00007 00008 namespace SCIL { 00009 00010 class var; 00011 class cons_obj; 00012 class polynomial; 00013 00015 class row { 00016 00017 public: 00018 00019 //private: 00020 00021 private: 00023 std::list<row_entry> NZ; 00024 00025 public: 00026 00028 row() { 00029 }; 00030 00032 row(double d); 00033 00035 row(var v); 00036 00038 row(std::list<row_entry>& L); 00039 00041 row operator* (double d); 00043 polynomial operator* (const polynomial& p); 00045 polynomial operator* (const var& v); 00047 polynomial operator* (const monomial& m); 00049 polynomial operator+ (const polynomial& p); 00051 polynomial operator- (const polynomial& p); 00053 row operator- (const var& v); 00055 row operator+ (const row& r1); 00057 row operator+ (const var& v); 00059 row operator+ (double d); 00061 row operator- (const row& r1); 00063 row& operator+= (const var& v); 00065 row& operator-= (const var& v); 00067 row& operator+= (const row_entry& r); 00069 row& operator+= (const row& r1); 00071 row& operator-= (const row& r1); 00073 cons_obj* operator== (row r1); 00075 cons_obj* operator<= (row r1); 00077 cons_obj* operator>= (row r1); 00078 00094 void normalize(bool clean = false); 00095 00097 std::list<row_entry>::const_iterator begin() const; 00098 00100 std::list<row_entry>::const_iterator end() const; 00101 00103 std::list<row_entry>::iterator begin(); 00104 00106 std::list<row_entry>::iterator end(); 00107 00109 int size() const; 00110 00112 friend std::ostream& operator<<(std::ostream& o,const row&); 00113 }; 00114 00116 row operator*(double d, var v); 00117 00119 row operator*(double d, row r1); 00120 00121 } 00122 00123 00124 #endif