00001 #include "base/loggers.h"
00002
00003 namespace bdm {
00004 int mxReplaceFieldNM ( mxArray *X, const char * fname, mxArray *X1 ) {
00005 mxArray *Old;
00006 int i;
00007
00008 if ( ( i = mxGetFieldNumber ( X, fname ) ) == -1 ) {
00009 if ( ( i = mxAddField ( X, fname ) ) == -1 ) return i;
00010
00011 }
00012
00013 Old = mxGetFieldByNumber ( X, 0, i );
00014 if ( Old ) mxDestroyArray ( Old );
00015 mxSetFieldByNumber ( X, 0, i, X1 );
00016 return i;
00017
00018 };
00019
00020 void Arrayvec2mxArray ( const Array<vec> &in, mxArray *out ) {
00021 int rows, cols, r, c;
00022
00023 double* temp = ( double * ) mxGetPr ( out );
00024 if ( temp == 0 ) mexErrMsgTxt ( "mat2mxArray: Pointer to data is NULL" );
00025
00026 cols = in.size();
00027 if ( cols == 0 ) mexErrMsgTxt ( "mat2mxArray: Data has zero columns" );
00028
00029 rows = in ( 0 ).length();
00030 if ( rows == 0 ) mexErrMsgTxt ( "mat2mxArray: Data has zero rows" );
00031
00032 for ( c = 0; c < cols; c++ ) {
00033 for ( r = 0; r < rows; r++ ) {
00034 *temp++ = in ( c ) ( r );
00035 }
00036 }
00037
00038 }
00039
00041 class mexlog : public memlog {
00042 public:
00044 mexlog() : memlog ( 0, "" ) {};
00046 mxArray* toCell() {
00047 mxArray* tmp = mxCreateStructMatrix ( 1, 1, 0, NULL );
00048
00049
00050 int i;
00051 string vec_name = "";
00052 int istart, iend;
00053
00054 mat M;
00055 for ( i = 0; i < entries.length(); i++ ) {
00056 istart = 0;
00057 for ( int j = 0; j < entries ( i ).length(); j++ ) {
00058 vec_name = names ( i ) + entries ( i ).name ( j );
00059 iend = istart + entries ( i ).size ( j ) - 1;
00060 M = vectors ( i ).get_cols ( istart, iend );
00061 istart = iend + 1;
00062
00063 mxArray* fld = mxCreateDoubleMatrix ( M.rows(), M.cols(), mxREAL );
00064 mat2mxArray ( M, fld );
00065 mxReplaceFieldNM ( tmp, vec_name.c_str(), fld );
00066 }
00067 }
00068 return tmp;
00069 }
00070 void from_setting ( const Setting &root ) {
00071 maxlen = root["maxlen"];
00072 }
00073 };
00074 UIREGISTER ( mexlog );
00075 SHAREDPTR ( mexlog );
00076 }