1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116
| /*
Classe CDebugWithIndent:
Cette classe sert à déboguer.
*/
#ifndef CDEBUGWITHINDENT_HPP_INCLUS
#define CDEBUGWITHINDENT_HPP_INCLUS
#include <iostream>
#include <string>
#include <sstream>
namespace NsFredUtil
{
class CDebugWithIndent
{
//////////////////////////////// L'opérateur est déclaré ici ///////////////////
//--- Fonctions amies ---
template< class T >
friend CDebugWithIndent & operator <<(
CDebugWithIndent &rDwi, //[in] Objet CDebugWithIndent dans lequel écrire
T const &rcDonnee //[in] Donnée à écrire
);
//--- Variables de classe ---
private:
//--- Variables d'instance ---
protected:
size_t m_nIndent;
std::wostringstream m_ossW;
//--- Constructeurs et destructeur ---
protected:
//Constructeur
//[inline]
CDebugWithIndent(
void
) : m_nIndent(0)
{
//Rien.
}
//Destructeur virtuel
//[inline]
virtual ~CDebugWithIndent(void)
{
//Rien.
}
//--- Méthodes de classe ---
public:
//--- Méthodes d'instance ---
protected:
//Réaction à l'opération d'insertion de flux
//[virtuelle]
virtual void v_InsertionFlux(void);
//--- Opérateurs ---
public:
//Opérateur pour incrémenter le niveau d'indentation (préfixe)
//[non-virtuelle + NULL-safe]
//[inline]
CDebugWithIndent & operator ++ (void)
{
if(this != NULL)
m_nIndent++;
return *this;
}
//Opérateur pour incrémenter le niveau d'indentation (postfixe)
//[non-virtuelle + NULL-safe]
//[inline]
void operator ++ (int)
{
if(this != NULL)
m_nIndent++;
}
//Opérateur pour décrémenter le niveau d'indentation (préfixe)
//[non-virtuelle + NULL-safe]
//[inline]
CDebugWithIndent & operator -- (void)
{
if(this != NULL && m_nIndent > 0)
m_nIndent--;
return *this;
}
//Opérateur pour décrémenter le niveau d'indentation (postfixe)
//[non-virtuelle + NULL-safe]
//[inline]
void operator -- (int)
{
if(this != NULL && m_nIndent > 0)
m_nIndent--;
}
};
//--- Fonctions templates ---
/* Opérateur d'insertion de flux
----------------------------- */
template< class T >
NsFredUtil::CDebugWithIndent & operator <<(
NsFredUtil::CDebugWithIndent &rDwi, //[in] Objet CDebugWithIndent dans lequel écrire
T const &rcDonnee //[in] Donnée à écrire
)
{
if(this != NULL)
{
m_ossW << rcDonnee;
v_InsertionFlux();
}
return *this;
}
}//namespace NsFredUtil
#endif// ! CDEBUGWITHINDENT_HPP_INCLUS |