00001
00002
00003
00004
00005
00006
00007
00008
00010
00011 #if !defined(SmiCoreCombineRule_HPP)
00012 #define SmiCoreCombineRule_HPP
00013
00014 #include "CoinPragma.hpp"
00015 #include "CoinPackedVector.hpp"
00016 #include <string>
00017 #include <vector>
00018 using namespace std;
00019
00039 class SmiCoreCombineRule
00040 {
00041 public:
00044
00045 virtual void Process(double *d1, int o1, const CoinPackedVector &cpv2, char *type=0)=0;
00046 virtual void Process(double *d1, int o1, const int len, const int* inds, const double *dels, char *type=0)=0;
00047 virtual CoinPackedVector * Process(CoinPackedVector *cpv1, CoinPackedVector *cpv2, char *type=0)=0;
00048 virtual int Process(vector<double> *dr,CoinPackedVector *cpv,double *dels,int *indx)=0;
00049 virtual int Process(vector<double> *dr,const int cpv_nels,const int* cpv_ind,const double *cpv_els,double *dels,int *indx)=0;
00050 virtual ~SmiCoreCombineRule(){}
00051 };
00052
00054
00055
00057 class SmiCoreCombineReplace : public SmiCoreCombineRule
00058 {
00059 public:
00060 static SmiCoreCombineReplace * Instance();
00061 virtual void Process(double *d1, int o1, const CoinPackedVector &cpv2, char *type=0);
00062 virtual void Process(double *d1, int o1, const int len, const int* inds, const double *dels, char *type=0);
00063 virtual CoinPackedVector * Process(CoinPackedVector *cpv1, CoinPackedVector *cpv2, char *type=0);
00064 virtual int Process(vector<double> *dr,CoinPackedVector *cpv,double *dels,int *indx);
00065 virtual int Process(vector<double> *dr,const int nels, const int* cpv_ind,const double *cpv_els,double *dels,int *indx);
00066 protected:
00067 SmiCoreCombineReplace(){}
00068 private:
00069 static SmiCoreCombineReplace * _instance;
00070 };
00071
00073
00074
00076 class SmiCoreCombineAdd : public SmiCoreCombineRule
00077 {
00078 public:
00079 static SmiCoreCombineAdd * Instance();
00080 virtual void Process(double *d1, int o1, const CoinPackedVector &cpv2, char* type=0);
00081 virtual void Process(double *d1, int o1, const int len, const int* inds, const double *dels, char *type=0);
00082 virtual CoinPackedVector * Process(CoinPackedVector *cpv1, CoinPackedVector *cpv2, char* type=0);
00083 virtual int Process(vector<double> *dr,CoinPackedVector *cpv,double *dels,int *indx);
00084 virtual int Process(vector<double> *dr,const int nels, const int* cpv_ind,const double *cpv_els,double *dels,int *indx);
00085 protected:
00086 SmiCoreCombineAdd(){}
00087 private:
00088 static SmiCoreCombineAdd * _instance;
00089 };
00090
00091
00092 #endif // !defined(SmiCoreCombineRule_HPP)