mex_datasource.h
00001 #ifndef MXDS_H 00002 #define MXDS_H 00003 00004 00005 #include "../bdm/bdmerror.h" 00006 #include "../bdm/base/datasources.h" 00007 #include "mex_parser.h" 00008 00009 namespace bdm { 00017 class mxArrayDS : public DS { 00018 protected: 00020 double *data; 00022 int max_len; 00024 int column; 00025 public: 00026 00028 mxArrayDS () : DS() {}; 00029 00041 void from_setting ( const Setting &set ) { 00042 string name; 00043 UI::get(name, set, "varname", UI::compulsory); 00044 mxArray *mxAr = mexGetVariable ( "base", name.c_str() ); 00045 00046 bdm_assert(mxIsNumeric(mxAr),"Matlab variable: "+name +" is not a matrix"); 00047 00048 dtsize = mxGetM(mxAr); 00049 max_len= mxGetN(mxAr); 00050 data = (double*)mxGetPr(mxAr); 00051 utsize = 0; 00052 00053 DS::from_setting(set); //read drv 00054 00055 if (Drv._dsize()!=dtsize) { 00056 Drv=RV( ( const char* ) set["varname"], dtsize ); 00057 } 00058 column = 0; 00059 00060 if (max_length()>0) { 00061 dt = vec(&data[column*dtsize],dtsize); 00062 } 00063 } 00064 00065 int max_length() { 00066 return max_len; 00067 } 00068 00069 void step() { 00070 if (column<max_length()) { 00071 column++; 00072 00073 dt = vec(&data[column*dtsize],dtsize); 00074 } else { 00075 bdm_error("DS: trying to read after max_length()"); 00076 } 00077 } 00078 }; 00079 00080 UIREGISTER ( mxArrayDS ); 00081 SHAREDPTR ( mxArrayDS ); 00082 00083 } 00084 #endif //MXDS_H
Generated on 2 Dec 2013 for mixpp by 1.4.7