Changeset 477 for library/bdm/mex/mex_logger.h
- Timestamp:
- 08/05/09 14:40:03 (15 years ago)
- Files:
-
- 1 modified
Legend:
- Unmodified
- Added
- Removed
-
library/bdm/mex/mex_logger.h
r414 r477 1 1 #include "base/loggers.h" 2 2 3 namespace bdm{ 4 int mxReplaceFieldNM(mxArray *X,const char * fname,mxArray *X1) 5 { 3 namespace bdm { 4 int mxReplaceFieldNM ( mxArray *X, const char * fname, mxArray *X1 ) { 6 5 mxArray *Old; 7 6 int i; 8 7 9 if((i=mxGetFieldNumber(X,fname))==-1) 10 { 11 if((i=mxAddField(X,fname))==-1) return i; 8 if ( ( i = mxGetFieldNumber ( X, fname ) ) == -1 ) { 9 if ( ( i = mxAddField ( X, fname ) ) == -1 ) return i; 12 10 13 11 } 14 12 15 Old =mxGetFieldByNumber(X,0,i);16 if (Old)mxDestroyArray(Old);17 mxSetFieldByNumber (X,0,i,X1);13 Old = mxGetFieldByNumber ( X, 0, i ); 14 if ( Old ) mxDestroyArray ( Old ); 15 mxSetFieldByNumber ( X, 0, i, X1 ); 18 16 return i; 19 17 20 18 }; 21 19 22 void Arrayvec2mxArray(const Array<vec> &in, mxArray *out) 23 { 24 int rows, cols, r, c; 20 void Arrayvec2mxArray ( const Array<vec> &in, mxArray *out ) { 21 int rows, cols, r, c; 25 22 26 double* temp = (double *) mxGetPr(out);27 if (temp == 0) mexErrMsgTxt("mat2mxArray: Pointer to data is NULL");23 double* temp = ( double * ) mxGetPr ( out ); 24 if ( temp == 0 ) mexErrMsgTxt ( "mat2mxArray: Pointer to data is NULL" ); 28 25 29 30 if (cols == 0) mexErrMsgTxt("mat2mxArray: Data has zero columns");26 cols = in.size(); 27 if ( cols == 0 ) mexErrMsgTxt ( "mat2mxArray: Data has zero columns" ); 31 28 32 rows = in(0).length(); //length of the first vec33 if (rows == 0) mexErrMsgTxt("mat2mxArray: Data has zero rows");29 rows = in ( 0 ).length(); //length of the first vec 30 if ( rows == 0 ) mexErrMsgTxt ( "mat2mxArray: Data has zero rows" ); 34 31 35 for (c = 0; c < cols; c++) {36 for (r = 0; r < rows; r++) {37 *temp++ = in(c)(r);38 39 32 for ( c = 0; c < cols; c++ ) { 33 for ( r = 0; r < rows; r++ ) { 34 *temp++ = in ( c ) ( r ); 35 } 36 } 40 37 41 38 } 42 39 class mexlog : public memlog { 43 40 public: 44 41 //! constructor 45 mexlog() : memlog(0,""){};42 mexlog() : memlog ( 0, "" ) {}; 46 43 //! 47 mxArray* toCell() {48 mxArray* tmp = mxCreateStructMatrix (1,1,0,NULL);44 mxArray* toCell() { 45 mxArray* tmp = mxCreateStructMatrix ( 1, 1, 0, NULL ); 49 46 50 47 //copied from itsave 51 48 int i; 52 string vec_name ="";49 string vec_name = ""; 53 50 int istart, iend; 54 51 55 52 mat M; //temporary matrix 56 for ( i =0; i<entries.length();i++ ) {57 istart =0;58 for ( int j=0; j<entries(i).length(); j++){ // same for as in add!!!59 vec_name = names (i) + entries(i).name(j);60 iend =istart+entries(i).size(j)-1;61 M =vectors(i).get_cols(istart,iend);62 istart =iend+1;53 for ( i = 0; i < entries.length(); i++ ) { 54 istart = 0; 55 for ( int j = 0; j < entries ( i ).length(); j++ ) { // same for as in add!!! 56 vec_name = names ( i ) + entries ( i ).name ( j ); 57 iend = istart + entries ( i ).size ( j ) - 1; 58 M = vectors ( i ).get_cols ( istart, iend ); 59 istart = iend + 1; 63 60 // copy the selection to mx 64 mxArray* fld =mxCreateDoubleMatrix(M.rows(), M.cols(), mxREAL);65 mat2mxArray (M,fld);66 mxReplaceFieldNM (tmp, vec_name.c_str(), fld);61 mxArray* fld = mxCreateDoubleMatrix ( M.rows(), M.cols(), mxREAL ); 62 mat2mxArray ( M, fld ); 63 mxReplaceFieldNM ( tmp, vec_name.c_str(), fld ); 67 64 } 68 65 } 69 66 return tmp; 70 67 } 71 void from_setting ( const Setting &root){72 maxlen=root["maxlen"];68 void from_setting ( const Setting &root ) { 69 maxlen = root["maxlen"]; 73 70 } 74 71 }; 75 UIREGISTER (mexlog);72 UIREGISTER ( mexlog ); 76 73 }