Page principale | Hiérarchie des classes | Liste des classes | Liste des fichiers | Membres de classe | Membres de fichier

Debug.hpp

Aller à la documentation de ce fichier.
00001 /// \file 00002 /// Définition des classes utiles pour le debug 00003 00004 #ifndef GUARD_Debug_h 00005 #define GUARD_Debug_h 00006 00007 #include <iostream> 00008 #include <fstream> 00009 #include <string> 00010 #include <iomanip> 00011 00012 00013 #include <time.h> 00014 00015 00016 using namespace std; 00017 // Trace activée 00018 static const bool debug = true; 00019 00020 /////////////////////////////////////////////////////////////////////////////// 00021 /// Représente un canal de sortie 00022 /// 00023 /// Les informations de debug sont dirigée dans un canal : fichier, 00024 /// cout, cerr,... Les canaux sont déclarées au niveau globale. 00025 /////////////////////////////////////////////////////////////////////////////// 00026 class Channel{ 00027 friend class Trace; 00028 /// Flot de sortie 00029 ostream* traceFile; 00030 public: 00031 /// Contructeur avec un flot de sortie comme paramètre par défaut cout 00032 /// \param o flot de srotie 00033 Channel(ostream* o = &cout): 00034 traceFile(o) 00035 {} 00036 /// Permet de changer de flot 00037 void reset(ostream* o){ 00038 traceFile = o; 00039 } 00040 }; 00041 00042 /////////////////////////////////////////////////////////////////////////////// 00043 /// Représente une trace 00044 /// 00045 /// L'utilisation typique est de créer une instance de Trace à l'entrée d'une 00046 /// fonction et loguer des informations dans cette trace. 00047 /////////////////////////////////////////////////////////////////////////////// 00048 class Trace{ 00049 /// Flot de sortie 00050 Channel* pChannel; 00051 /// Nom de la trace 00052 const char* name; 00053 /// Affiche les messages 00054 bool display; 00055 /// Chronomètre 00056 time_t start, end; 00057 public: 00058 /// Constructeur d'une trace 00059 /// \param _name : nom à afficher avec un message 00060 /// \param _pChannel : un flot de sortie 00061 /// \param _display : affiche les messages ou non 00062 Trace(const char* _name, Channel& _pChannel, bool _display = true){ 00063 if(debug){ 00064 time(&start); 00065 name = _name; 00066 pChannel = &_pChannel; 00067 display = _display; 00068 // Affiche la création d'une trace 00069 if(pChannel->traceFile && display){ 00070 *pChannel->traceFile << "->\t" << name << endl; 00071 } 00072 } 00073 } 00074 ~Trace(){ 00075 if(debug){ 00076 time(&end); 00077 // Affiche la destruction d'une trace 00078 if(pChannel->traceFile && display){ 00079 float dif = difftime (end,start); 00080 *pChannel->traceFile << "<-\t" << name << setw(10) << dif << " secondes" << endl; 00081 } 00082 } 00083 } 00084 /// Affiche un message dans la trace (C style) 00085 void print(const char* txt){ 00086 if(debug){ 00087 if(pChannel->traceFile && display){ 00088 *pChannel->traceFile << "\t" << txt << endl; 00089 } 00090 } 00091 } 00092 /// Affiche un message dans la trace (STL style) 00093 void print(const string txt){ 00094 if(debug){ 00095 if(pChannel->traceFile && display){ 00096 *pChannel->traceFile << "\t" << txt << endl; 00097 } 00098 } 00099 } 00100 00101 }; 00102 #endif

Généré le Thu Jul 1 23:13:32 2004 pour segment par doxygen 1.3.7