root/library/bdm/base/loggers.cpp @ 471

Revision 471, 3.5 kB (checked in by mido, 15 years ago)

1) ad UserInfo?: UI::get a UI::build predelany tak, ze vraci fals / NULL v pripade neexistence pozadovaneho Settingu, pridana enumericky typ UI::SettingPresence?, predelany stavajici UI implementace, dodelana UI dokumentace
2) dokoncena konfigurace ASTYLERU, brzy bude aplikovan
3) doxygen nastaven tak, ze vytvari soubor doxy_warnings.txt

  • Property svn:eol-style set to native
Line 
1
2#include "loggers.h"
3#include "../osutils.h"
4
5#include <fcntl.h>
6#ifdef WIN32
7#include <io.h>
8#endif
9
10namespace bdm{
11void memlog::itsave ( const char* fname ) {
12        it_file itf ( fname );
13        int i;
14        string vec_name="";
15        int istart, iend;
16        for ( i=0; i<entries.length();i++ ) {
17                istart=0;
18                for (int j=0; j<entries(i).length(); j++){ // same for as in add!!!
19                        vec_name = names(i) + entries(i).name(j);
20                        iend=istart+entries(i).size(j)-1;
21                        itf << Name ( vec_name ) << vectors ( i ).get_cols(istart,iend);
22                        // move start after current end...
23                        istart=iend+1;
24                }
25               
26        }
27}
28
29void memlog::from_setting( const Setting &set ) 
30{       
31        // TODO tady se natvrdo ocekava existence stringu, nejsou zadne defaulty.. je to tak OK?
32        string itfilename = (const char*)set["filename"];
33        maxlen = set["maxlen"];
34}
35
36void dirfilelog::init() {
37        int i,j,k;
38        int nsc=0;
39        for ( i=0;i<entries.length();i++ ) {nsc+=entries ( i )._dsize();}
40        ; //all entries!!
41
42        char filename[200];
43        char num[3];
44
45// Initialize directory
46        makedir ( dirname ); //
47
48// directory OK, or it can be overwritten
49
50//Create filenames
51        scalarnames.set_length ( nsc );
52        // For all entries
53        int ii=0;
54        for ( i=0;i<entries.length();i++ ) { //for entries
55                for ( j=0;j<entries ( i ).length();j++ ) { //for RVs in entries
56                        int rvsize = entries ( i ).size ( j );
57                        // for non-empty names
58                        if (names(i).length()>0) {scalarnames(ii)=names(i) + "_";}
59                        // add name
60                        scalarnames ( ii ) +=  entries ( i ).name ( j );
61                        // add number when needed
62                        if ( rvsize >1 ) {
63                                // copy the same name for th whole RV
64                                for ( k=1;k<rvsize;k++ ) {scalarnames(ii+k)=scalarnames(ii);}
65                                // add numbers
66                                for ( k=0;k<rvsize;k++ ) { //for all scalars in given RV
67                                        sprintf ( num,"%d",k );
68                                        scalarnames ( ii ) += (std::string)"_" + num;
69                                        ii++;
70                                }
71                        } 
72                        else {
73                                ii++;}
74                }
75        }
76        //Create format
77        string frm="format";
78        get_fname ( filename, dirname, frm );
79
80        FILE* fpf;
81        fpf = fopen ( filename, "w" );
82        for ( i=0;i<ii;i++ ) {
83                fprintf ( fpf, "%s RAW d 1\n", scalarnames ( i ).c_str() );
84        }
85        fclose ( fpf );
86
87        memlog::init();
88
89        //Delete old data
90        write_buffers ( 0 );
91}
92
93
94void dirfilelog::write_buffers ( int Len ) {
95        int fp;
96        int nen=entries.length(); //all entries!!
97        double *Dt;
98        int DtRows;
99        int i,j,k;
100        int ii; //index in scalarnames;
101        int jj; //index in vectors()
102        char filename[200];
103
104        it_assert_debug ( Len<=maxlen,"diffilelog" );
105
106        ii = 0;
107        for ( i=0;i<nen;i++ ) { //for entries
108                Dt = vectors ( i )._data();
109                DtRows = vectors ( i ).rows();
110
111                jj=0;
112                for ( j=0;j<entries ( i ).length();j++ ) { //for RVs in entries
113                        int rvsize = entries ( i ).size ( j );
114                        for ( k=0;k<rvsize;k++ ) { { //for all scalars in given RV
115                                        get_fname ( filename,dirname,scalarnames ( ii ) );
116                                        if ( Len==0 ) //initialization
117                                                fp = open ( filename, O_CREAT | O_WRONLY | O_TRUNC, 00644 );
118                                        else
119                                                fp = open ( filename, O_CREAT | O_WRONLY | O_APPEND, 00644 );
120
121                                        write ( fp,&Dt[jj* ( DtRows ) ], ( Len ) *sizeof ( double ) );
122                                        close ( fp );
123
124                                        //next row in Dt
125                                        jj++;
126                                        //next scalarname
127                                        ii++;
128                                }
129                        }
130                }
131        }
132}
133
134void dirfilelog::step ( ) {
135
136        if ( ind== ( maxlen -1 ) ) {
137                write_buffers ( ind+1 );
138                ind = 0;
139        }
140        else
141                ind++;
142
143}
144
145void dirfilelog::finalize ( ) {
146        if ( ind>0 )
147                write_buffers ( ind ); //assuming here that i+1 was not filled
148}
149
150
151void dirfilelog::from_setting( const Setting &set ) 
152{       
153        // TODO tady se natvrdo ocekava existence stringu, nejsou zadne defaulty.. je to tak OK?
154        dirname = (const char*)set["dirname"];
155        maxlen = set["maxlen"];
156        scalarnames.set_length(0);
157}
158
159}
Note: See TracBrowser for help on using the browser.