Main Page | Class Hierarchy | Class List | File List | Class Members | File Members

mdp_log.h

Go to the documentation of this file.
00001 
00002 
00003 
00004 
00005 
00006 
00007 
00008 
00009 
00010 
00011 
00012 
00015 class mdp_log {
00016 private:
00017   int level;
00018   int max_level;
00019   vector<string> level_tag;
00020   ostream* os;
00021 public:
00022   bool print;
00023   void abort() {
00024     exit(-1);
00025   }
00026   void set_level(int i) {
00027     max_level=i;
00028   }
00029   mdp_log() {   
00030     level=0;
00031     max_level=100000;
00032     print=true;
00033     connect(cout);
00034   }
00035   void connect(ostream &os1) {
00036     os=&os1;
00037   }
00038   void connect(ofstream &os2) {
00039     os=&os2; // is this correct? I think so!
00040   }
00041   void error_message(string s, string file, int line) {
00042     if(print) {
00043       begin_function("error");
00044       *os << "In file \"" << file;
00045       *os << "\", before line " << line;
00046       *os << ", this error occurred: " << s << '\n';
00047       for(;level; level--) 
00048         if(level<max_level) 
00049           *os << "</" << level_tag[level-1] << ">" << '\n';
00050     }
00051     throw s;
00052   }
00053   void begin_function(string s) {
00054     level_tag.resize(++level);
00055     level_tag[level-1]=s;  
00056     if(print && level<max_level) 
00057       *os << "<" << s << ">" << '\n';
00058   }
00059   void end_function(string s) {
00060     if(level_tag[level-1]==s) {
00061       if(print && level<max_level) 
00062         *os << "</" << level_tag[level-1] << ">" << '\n';
00063       level--;
00064     } else error_message("missing end_function()", "unkown", 0);
00065   }
00066   template<class T>
00067     mdp_log &operator<< (const T x) {
00068     if (print && level<max_level) *os << x;
00069     return (*this);
00070   }
00071 };
00072 

Generated on Sun Feb 27 15:12:21 2005 by  doxygen 1.4.1