root/library/bdm/mex/mex_logger.h @ 593

Revision 593, 1.9 kB (checked in by smidl, 15 years ago)

new test for mxArrayDS (former MexDS)

RevLine 
[593]1#ifndef MXLOG_H
2#define MXLOG_H
3
[384]4#include "base/loggers.h"
[293]5
[477]6namespace bdm {
7int mxReplaceFieldNM ( mxArray *X, const char * fname, mxArray *X1 ) {
[293]8        mxArray *Old;
9        int i;
10
[477]11        if ( ( i = mxGetFieldNumber ( X, fname ) ) == -1 ) {
12                if ( ( i = mxAddField ( X, fname ) ) == -1 ) return i;
[293]13
14        }
15
[477]16        Old = mxGetFieldByNumber ( X, 0, i );
17        if ( Old ) mxDestroyArray ( Old );
18        mxSetFieldByNumber ( X, 0, i, X1 );
[293]19        return i;
20
21};
22
[477]23void Arrayvec2mxArray ( const Array<vec> &in, mxArray *out ) {
24        int rows, cols, r, c;
[384]25
[477]26        double* temp = ( double * ) mxGetPr ( out );
27        if ( temp == 0 ) mexErrMsgTxt ( "mat2mxArray: Pointer to data is NULL" );
[384]28
[477]29        cols = in.size();
30        if ( cols == 0 ) mexErrMsgTxt ( "mat2mxArray: Data has zero columns" );
[384]31
[477]32        rows = in ( 0 ).length(); //length of the first vec
33        if ( rows == 0 ) mexErrMsgTxt ( "mat2mxArray: Data has zero rows" );
[384]34
[477]35        for ( c = 0; c < cols; c++ ) {
36                for ( r = 0; r < rows; r++ ) {
37                        *temp++ = in ( c ) ( r );
[593]38                       
[477]39                }
40        }
[384]41
42}
[536]43
44//! Logger storing results into an mxArray
[373]45class mexlog : public memlog {
[477]46public:
[293]47        //! constructor
[477]48        mexlog() : memlog ( 0, "" ) {};
[293]49        //!
[477]50        mxArray* toCell() {
51                mxArray* tmp = mxCreateStructMatrix ( 1, 1, 0, NULL );
[293]52
[347]53                //copied from itsave
54                int i;
[477]55                string vec_name = "";
[347]56                int istart, iend;
[477]57
[347]58                mat M; //temporary matrix
[477]59                for ( i = 0; i < entries.length(); i++ ) {
60                        istart = 0;
61                        for ( int j = 0; j < entries ( i ).length(); j++ ) { // same for as in add!!!
62                                vec_name = names ( i ) + entries ( i ).name ( j );
63                                iend = istart + entries ( i ).size ( j ) - 1;
64                                M = vectors ( i ).get_cols ( istart, iend );
65                                istart = iend + 1;
[347]66                                // copy the selection to mx
[477]67                                mxArray* fld = mxCreateDoubleMatrix ( M.rows(), M.cols(), mxREAL );
68                                mat2mxArray ( M, fld );
69                                mxReplaceFieldNM ( tmp, vec_name.c_str(), fld );
[347]70                        }
[293]71                }
72                return tmp;
73        }
[477]74        void from_setting ( const Setting &root ) {
75                maxlen = root["maxlen"];
[373]76        }
[293]77};
[477]78UIREGISTER ( mexlog );
[529]79SHAREDPTR ( mexlog );
[373]80}
[593]81
82#endif //MXLOG_H
Note: See TracBrowser for help on using the browser.