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
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(double *dr,const int dr_len,CoinPackedVector *cpv,double *dels,int *indx)=0;
00049 virtual int Process(double *dr,const int dr_len,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 static void ClearInstance();
00062 virtual void Process(double *d1, int o1, const CoinPackedVector &cpv2, char *type=0);
00063 virtual void Process(double *d1, int o1, const int len, const int* inds, const double *dels, char *type=0);
00064 virtual CoinPackedVector * Process(CoinPackedVector *cpv1, CoinPackedVector *cpv2, char *type=0);
00065 virtual int Process(double *dr,const int dr_len,CoinPackedVector *cpv,double *dels,int *indx);
00066 virtual int Process(double *dr,const int dr_len,const int nels, const int* cpv_ind,const double *cpv_els,double *dels,int *indx);
00067 protected:
00068 SmiCoreCombineReplace(){}
00069 private:
00070 static SmiCoreCombineReplace * _instance;
00071 };
00072
00074
00075
00077 class SmiCoreCombineAdd : public SmiCoreCombineRule
00078 {
00079 public:
00080 static SmiCoreCombineAdd * Instance();
00081 static void ClearInstance();
00082 virtual void Process(double *d1, int o1, const CoinPackedVector &cpv2, char* type=0);
00083 virtual void Process(double *d1, int o1, const int len, const int* inds, const double *dels, char *type=0);
00084 virtual CoinPackedVector * Process(CoinPackedVector *cpv1, CoinPackedVector *cpv2, char* type=0);
00085 virtual int Process(double *dr,const int dr_len,CoinPackedVector *cpv,double *dels,int *indx);
00086 virtual int Process(double *dr,const int dr_len,const int nels, const int* cpv_ind,const double *cpv_els,double *dels,int *indx);
00087 protected:
00088 SmiCoreCombineAdd(){}
00089 private:
00090 static SmiCoreCombineAdd * _instance;
00091 };
00092
00093
00094 #endif // !defined(SmiCoreCombineRule_HPP)