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