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

Revision 529, 1.8 kB (checked in by vbarta, 15 years ago)

defined *_ptr wrappers of shared pointers

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}
39class mexlog : public memlog {
40public:
41        //! constructor
42        mexlog() : memlog ( 0, "" ) {};
43        //!
44        mxArray* toCell() {
45                mxArray* tmp = mxCreateStructMatrix ( 1, 1, 0, NULL );
46
47                //copied from itsave
48                int i;
49                string vec_name = "";
50                int istart, iend;
51
52                mat M; //temporary matrix
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;
60                                // copy the selection to mx
61                                mxArray* fld = mxCreateDoubleMatrix ( M.rows(), M.cols(), mxREAL );
62                                mat2mxArray ( M, fld );
63                                mxReplaceFieldNM ( tmp, vec_name.c_str(), fld );
64                        }
65                }
66                return tmp;
67        }
68        void from_setting ( const Setting &root ) {
69                maxlen = root["maxlen"];
70        }
71};
72UIREGISTER ( mexlog );
73SHAREDPTR ( mexlog );
74}
Note: See TracBrowser for help on using the browser.