00001 #include "../bdm/stat/loggers_ui.h"
00002 
00003 int mxReplaceFieldNM(mxArray *X,const char * fname,mxArray *X1)
00004 {
00005         mxArray *Old;
00006         int i;
00007 
00008         if((i=mxGetFieldNumber(X,fname))==-1)
00009         {
00010                 if((i=mxAddField(X,fname))==-1) return i;
00011 
00012         }
00013 
00014         Old=mxGetFieldByNumber(X,0,i);
00015         if(Old)mxDestroyArray(Old);
00016         mxSetFieldByNumber(X,0,i,X1);
00017         return i;
00018 
00019 };
00020 
00021 class mexlog : public memlog{
00022         public:
00024         mexlog(int maxlen): memlog(maxlen,"mx"){};
00026         mxArray* toCell(){
00027                 mxArray* tmp = mxCreateStructMatrix(1,1,0,NULL);
00028 
00029                 
00030                 int i;
00031                 string vec_name="";
00032                 int istart, iend;
00033                 
00034                 mat M; 
00035                 for ( i=0; i<entries.length();i++ ) {
00036                         istart=0;
00037                         for (int j=0; j<entries(i).length(); j++){ 
00038                                 vec_name = names(i) + entries(i).name(j);
00039                                 iend=istart+entries(i).size(j)-1;
00040                                 M=vectors(i).get_cols(istart,iend);
00041                                 istart=iend+1;
00042                                 
00043                                 mxArray* fld=mxCreateDoubleMatrix(M.rows(), M.cols(), mxREAL);
00044                                 mat2mxArray(M,fld);
00045                                 mxReplaceFieldNM(tmp, vec_name.c_str(), fld);
00046                         }
00047                 }
00048                 return tmp;
00049         }
00050 };
00051 
00052 class UImexlog: public UIbuilder{
00053         public:
00054                 UImexlog():UIbuilder("mexlog"){};
00055                 bdmroot* build(Setting &S) const{
00056                         return new mexlog(S["maxlen"]);
00057                 };
00058 };
00059 UIREGISTER(UImexlog);