00001
00013 #ifndef LGR_H
00014 #define LGR_H
00015
00016 #include "bdmbase.h"
00017 #include "user_info.h"
00018
00019 namespace bdm {
00020 using std::string;
00021
00025 class memlog : public logger {
00026
00027 protected:
00029 int maxlen;
00031 int ind;
00033 Array<mat> vectors;
00035 string itfilename;
00036 public:
00037 memlog ( int maxlen0, string itf = "" ) : maxlen ( maxlen0 ), ind ( 0 ), vectors ( 0 ), itfilename ( itf ) {}
00038
00040 memlog() : maxlen ( 0 ), ind ( 0 ), vectors ( 0 ) {}
00041
00043 void init();
00044
00045 void step() {
00046 if ( ind < maxlen ) ind++;
00047 else bdm_error ( "memlog::ind is too high;" );
00048 }
00049
00050 void logit ( int id, const vec &v ) {
00051 bdm_assert ( id < vectors.length(), "Logger was not initialized, run init()." );
00052 if ( id >= 0 ) {
00053 vectors ( id ).set_row ( ind, v );
00054 }
00055 }
00056 void logit ( int id, const double &d ) {
00057 bdm_assert_debug ( id < vectors.length(), "Logger was not initialized, run init()." );
00058 bdm_assert_debug ( vectors ( id ).cols() == 1, "Vector expected" );
00059 if ( id >= 0 ) {
00060 vectors ( id ) ( ind ) = d;
00061 }
00062 }
00064 void itsave ( const char* fname );
00066 void finalize() {
00067 if ( itfilename.length() > 0 ) itsave ( itfilename.c_str() );
00068 };
00069
00070
00083 void from_setting ( const Setting &set );
00084
00085
00086 };
00087
00088 UIREGISTER ( memlog );
00089 SHAREDPTR ( memlog );
00090
00091
00095 class stdlog: public memlog{
00096 public:
00098 stdlog():memlog(1){};
00099
00100 void init() {
00101 memlog::init();
00102 for (int i=0; i<entries.length();i++){
00103 if (entries(i)._dsize()==1) {
00104 cout << names(i) << entries(i).name(0) << "\t";
00105 }
00106 else
00107 for (int j=0; j<vectors(i).cols(); j++){
00108 cout << names(i) << entries(i).scalarname(j) << "\t";
00109 }
00110 }
00111 cout << endl;
00112
00113
00114 }
00116 void step() {
00117 for (int i=0; i<vectors.length();i++){
00118 for (int j=0; j<vectors(i).cols(); j++){
00119 cout << vectors(i)(0,j) << "\t";
00120 }
00121 }
00122 cout << endl;
00123 }
00134 void from_setting ( const Setting &set ){
00135 }
00136
00137 };
00138 UIREGISTER(stdlog);
00139
00147 class dirfilelog : public memlog {
00148
00149 protected:
00151 string dirname;
00153 Array<string> scalarnames;
00154 public:
00158 dirfilelog ( string dirname0, int maxlen0 ) : memlog ( maxlen0 ), dirname ( dirname0 ), scalarnames ( 0 ) {}
00159
00160 dirfilelog() {}
00161
00163 void init();
00164 void step();
00165 void finalize();
00169 void write_buffers ( int Len );
00170
00180 void from_setting ( const Setting &set );
00181
00182
00183 };
00184
00185 UIREGISTER ( dirfilelog );
00186 SHAREDPTR ( dirfilelog );
00187
00188 };
00189 #endif // LGR_H