00001
00002
00003
00004 #ifndef SmiQuadratic_HPP
00005 #define SmiQuadratic_HPP
00006
00007 #include "CoinPragma.hpp"
00008 #include "OsiSolverInterface.hpp"
00009 #include "CoinPackedVector.hpp"
00010
00011 #include <map>
00012 #include <vector>
00013
00014 using namespace std;
00015
00016
00017
00018
00019
00020
00021 class SmiQuadraticData {
00022 protected:
00023 int _n;
00024 int *_starts;
00025 int *_indx;
00026 double *_els;
00027 int _coff;
00028 bool _hasData;
00029 public:
00030 SmiQuadraticData(int n, int *starts, int *indx, double *els,int coff=0):
00031 _n(n),_starts(starts),_indx(indx),_els(els),_coff(coff){
00032 if (n==0 || starts==NULL || indx==NULL || els==NULL)
00033 _hasData=false;
00034 else
00035 _hasData=true;
00036 }
00037
00038 SmiQuadraticData():_n(0),_starts(NULL),_indx(NULL),_els(NULL),_coff(0),_hasData(false){}
00039
00040 bool hasData() {return _hasData;}
00041 void setHasData(bool hasData){_hasData=hasData;}
00042
00043 int *getQDstarts() {return _starts;}
00044 void setQDstarts(int *starts) {_starts=starts;}
00045 int *getQDindx() {return _indx;}
00046 void setQDindx(int *indx) {_indx=indx;}
00047 double *getQDels() {return _els;}
00048 void setQDels( double *els) {_els=els;}
00049 int getQDncols() {return _n;}
00050 void setQDncols(int ncols) {_n=ncols;}
00051 int getNumEls() {return _starts[_n] - _starts[0];}
00052
00053 };
00054
00055 class SmiQuadraticDataDC: public SmiQuadraticData{
00056 public:
00057 SmiQuadraticDataDC(int ncols, int nels){
00058 this->setQDstarts(new int[ncols+1]);
00059 memset(this->getQDstarts(),0,(ncols+1)*sizeof(int));
00060 this->setQDindx(new int[nels]);
00061 this->setQDels(new double[nels]);
00062 this->setQDncols(ncols);
00063 }
00064 ~SmiQuadraticDataDC() {
00065 delete[] _starts; delete[] _indx; delete[] _els;
00066 }
00067 };
00068
00069
00070
00071 #endif