loggers.cpp itpp/itbase.h loggers.h ../osutils.h fcntl.h #include<itpp/itbase.h> #include"loggers.h" #include"../osutils.h" #include<fcntl.h> #ifdefWIN32 #include<io.h> #endif voidmemlog::itsave(constchar*fname){ it_fileitf(fname); inti; for(i=0;i<entries.length();i++){ if(names(i).length()<1){ std::ostringstreamo; o<<"Variable"<<i; itf<<Name(o.str())<<vectors(i); } else{ itf<<Name(names(i))<<vectors(i); } } } voiddirfilelog::init(){ inti,j,k; intnsc=0; for(i=0;i<entries.length();i++){nsc+=entries(i).count();} ;//allentries!! charfilename[200]; charnum[3]; //Initializedirectory makedir(dirname);// //directoryOK,oritcanbeoverwritten //Createfilenames scalarnames.set_length(nsc); //Forallentries intii=0; for(i=0;i<entries.length();i++){//forentries for(j=0;j<entries(i).length();j++){//forRVsinentries intrvsize=entries(i).size(j); if(rvsize==1){ scalarnames(ii)=names(i)+"_"+entries(i).name(j); ii++; } else{ for(k=0;k<rvsize;k++){//forallscalarsingivenRV sprintf(num,"%d",k); scalarnames(ii)=names(i)+"_"+entries(i).name(j)+"_"+num; ii++; } } } } //Createformat stringfrm="format"; get_fname(filename,dirname,frm); FILE*fpf; fpf=fopen(filename,"w"); for(i=0;i<ii;i++){ fprintf(fpf,"%sRAWd1\n",scalarnames(i).c_str()); } fclose(fpf); memlog::init(); //Deleteolddata write_buffers(0); } voiddirfilelog::write_buffers(intLen){ intfp; intnen=entries.length();//allentries!! double*Dt; intDtRows; inti,j,k; intii;//indexinscalarnames; intjj;//indexinvectors() charfilename[200]; it_assert_debug(Len<=maxlen,"diffilelog"); ii=0; for(i=0;i<nen;i++){//forentries Dt=vectors(i)._data(); DtRows=vectors(i).rows(); jj=0; for(j=0;j<entries(i).length();j++){//forRVsinentries intrvsize=entries(i).size(j); for(k=0;k<rvsize;k++){{//forallscalarsingivenRV get_fname(filename,dirname,scalarnames(ii)); if(Len==0)//initialization fp=open(filename,O_CREAT|O_WRONLY|O_TRUNC,00644); else fp=open(filename,O_CREAT|O_WRONLY|O_APPEND,00644); write(fp,&Dt[jj*(DtRows)],(Len)*sizeof(double)); close(fp); //nextrowinDt jj++; //nextscalarname ii++; } } } } } voiddirfilelog::step(){ if(ind==(maxlen-1)){ write_buffers(ind+1); ind=0; } else ind++; } voiddirfilelog::finalize(){ if(ind>0) write_buffers(ind);//assumingherethati+1wasnotfilled }