00001
00011 #ifndef COUENNE_LQELEMS_H
00012 #define COUENNE_LQELEMS_H
00013
00014 #include <map>
00015
00016 #include "CouenneTypes.hpp"
00017
00018 class quadElem {
00019
00020 private:
00021 exprVar *varI_;
00022 exprVar *varJ_;
00023 CouNumber coeff_;
00024
00025 public:
00026
00027 quadElem (exprVar *i, exprVar *j, CouNumber c):
00028 varI_ (i),
00029 varJ_ (j),
00030 coeff_ (c) {}
00031
00032 quadElem (const quadElem &src):
00033 varI_ (src.varI_),
00034 varJ_ (src.varJ_),
00035 coeff_ (src.coeff_) {}
00036
00037 quadElem *clone ()
00038 {return new quadElem (*this);}
00039
00040 inline exprVar *varI () {return varI_;}
00041 inline exprVar *varJ () {return varJ_;}
00042 inline CouNumber coeff () {return coeff_;}
00043 };
00044
00045
00046 class LinMap {
00047
00048 private:
00049 std::map <int, CouNumber> lmap_;
00050
00051 public:
00052
00054 std::map <int, CouNumber> &Map ()
00055 {return lmap_;}
00056
00058 void insert (int index, CouNumber coe) {
00059
00060 std::map <int, CouNumber>::iterator i = lmap_.find (index);
00061
00062 if (i != lmap_.end()) {
00063 if (fabs (i -> second += coe) < COUENNE_EPS)
00064 lmap_.erase (i);
00065 } else {
00066 std::pair <int, CouNumber> npair (index, coe);
00067 lmap_.insert (npair);
00068 }
00069 }
00070 };
00071
00072
00073 class QuadMap {
00074
00075 private:
00076 std::map <std::pair <int, int>, CouNumber> qmap_;
00077
00078 public:
00079
00081 std::map <std::pair <int, int>, CouNumber> &Map ()
00082 {return qmap_;}
00083
00085 void insert (int indI, int indJ, CouNumber coe) {
00086
00087 std::pair <int, int> nind (indI, indJ);
00088 std::map <std::pair <int, int>, CouNumber>::iterator i = qmap_.find (nind);
00089
00090 if (i != qmap_.end()) {
00091 if (fabs (i -> second += coe) < COUENNE_EPS)
00092 qmap_.erase (i);
00093 } else {
00094 std::pair <std::pair <int, int>, CouNumber> npair (nind, coe);
00095 qmap_.insert (npair);
00096 }
00097 }
00098 };
00099
00100 #endif