00001 00013 #ifndef LGR_H 00014 #define LGR_H 00015 00016 #include "libBM.h" 00017 00018 namespace bdm{ 00019 using std::string; 00020 00027 class memlog : public logger { 00028 00029 protected: 00031 int maxlen; 00033 int ind; 00035 Array<mat> vectors; 00037 string itfilename; 00038 public: 00040 memlog ( int maxlen0, string itf="" ) : logger(),maxlen ( maxlen0 ),ind ( 0 ),vectors ( 0 ),itfilename(itf) {} 00042 void init() { 00043 int i; int n =entries.length(); 00044 vectors.set_size ( n ); 00045 for ( i=0;i<n;i++ ) {vectors(i).set_size (maxlen,entries(i)._dsize() );} 00046 } 00047 void step() {if ( ind<maxlen ) ind++; else it_error ( "memlog::ind is too high;" );} 00048 void logit ( int id, const vec &v ) { 00049 it_assert_debug(id<vectors.length(),"Logger was not initialized, run init()."); 00050 if(id>=0){ vectors ( id ).set_row ( ind,v );} 00051 } 00052 void logit ( int id, const double &d ) { 00053 it_assert_debug(id<vectors.length(),"Logger was not initialized, run init()."); 00054 it_assert_debug(vectors(id).cols()==1,"Vector expected"); 00055 if(id>=0){ vectors ( id ) ( ind )=d;} 00056 } 00058 void itsave(const char* fname); 00060 void finalize() {if (itfilename.length()>0) itsave(itfilename.c_str());}; 00061 00062 }; 00063 00072 class dirfilelog : public memlog { 00073 00074 protected: 00076 string dirname; 00078 Array<string> scalarnames; 00079 public: 00083 dirfilelog ( std::string dirname0, int maxlen0 ) : memlog ( maxlen0 ), dirname ( dirname0 ), scalarnames ( 0 ) {} 00085 void init(); 00086 void step(); 00087 void finalize(); 00091 void write_buffers ( int Len ); 00092 }; 00093 00094 }; 00095 #endif // LGR_H