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)

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        //!
50        mxArray* toCell() {
51                mxArray* tmp = mxCreateStructMatrix ( 1, 1, 0, NULL );
52
53                //copied from itsave
54                int i;
55                string vec_name = "";
56                int istart, iend;
57
58                mat M; //temporary matrix
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;
66                                // copy the selection to mx
67                                mxArray* fld = mxCreateDoubleMatrix ( M.rows(), M.cols(), mxREAL );
68                                mat2mxArray ( M, fld );
69                                mxReplaceFieldNM ( tmp, vec_name.c_str(), fld );
70                        }
71                }
72                return tmp;
73        }
74        void from_setting ( const Setting &root ) {
75                maxlen = root["maxlen"];
76        }
77};
78UIREGISTER ( mexlog );
79SHAREDPTR ( mexlog );
80}
81
82#endif //MXLOG_H
Note: See TracBrowser for help on using the browser.