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

Revision 536, 1.8 kB (checked in by smidl, 15 years ago)

removal of unused functions _e() and samplecond(,) and added documentation lines

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