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

Revision 1069, 2.5 kB (checked in by mido, 14 years ago)

documentation of loggers updated

  • Property svn:eol-style set to native
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//! \brief 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    //! copy internal data to output mxArray
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 ) + separator + 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
77    /*! Create object from the following structure
78
79    \code
80    class = 'mexlog';   
81    maxlen = [];               % size of memory buffer
82    \endcode
83    */
84    void from_setting ( const Setting &set ) {
85        UI::get ( maxlen,  set, "maxlen", UI::compulsory );
86    }
87
88    Config& _setting_conf() {
89        return setting_conf;
90    }
91};
92UIREGISTER ( mexlog );
93SHAREDPTR ( mexlog );
94}
95
96#endif //MXLOG_H
Note: See TracBrowser for help on using the browser.