mixpp: mex_datasource.h Source File

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  doxygen 1.4.7