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

Revision 414, 1.6 kB (checked in by smidl, 15 years ago)

details

Line 
1#include "base/loggers.h"
2
3namespace bdm{
4int mxReplaceFieldNM(mxArray *X,const char * fname,mxArray *X1)
5{
6        mxArray *Old;
7        int i;
8
9        if((i=mxGetFieldNumber(X,fname))==-1)
10        {
11                if((i=mxAddField(X,fname))==-1) return i;
12
13        }
14
15        Old=mxGetFieldByNumber(X,0,i);
16        if(Old)mxDestroyArray(Old);
17        mxSetFieldByNumber(X,0,i,X1);
18        return i;
19
20};
21
22void Arrayvec2mxArray(const Array<vec> &in, mxArray *out)
23{
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}
42class mexlog : public memlog {
43        public:
44        //! constructor
45        mexlog(): memlog(0,""){};
46        //!
47        mxArray* toCell(){
48                mxArray* tmp = mxCreateStructMatrix(1,1,0,NULL);
49
50                //copied from itsave
51                int i;
52                string vec_name="";
53                int istart, iend;
54               
55                mat M; //temporary matrix
56                for ( i=0; i<entries.length();i++ ) {
57                        istart=0;
58                        for (int j=0; j<entries(i).length(); j++){ // same for as in add!!!
59                                vec_name = names(i) + entries(i).name(j);
60                                iend=istart+entries(i).size(j)-1;
61                                M=vectors(i).get_cols(istart,iend);
62                                istart=iend+1;
63                                // copy the selection to mx
64                                mxArray* fld=mxCreateDoubleMatrix(M.rows(), M.cols(), mxREAL);
65                                mat2mxArray(M,fld);
66                                mxReplaceFieldNM(tmp, vec_name.c_str(), fld);
67                        }
68                }
69                return tmp;
70        }
71        void from_setting (const Setting &root){
72          maxlen=root["maxlen"];
73        }
74};
75UIREGISTER(mexlog);
76}
Note: See TracBrowser for help on using the browser.