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

Revision 609, 2.0 kB (checked in by smidl, 15 years ago)

remove "delays" from memory DS, check length of datasource

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