00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019 #include <freecloth/base/baTraceStream.h>
00020 #include <freecloth/base/debug.h>
00021 #include <freecloth/base/fstream>
00022
00023 FREECLOTH_NAMESPACE_START
00024
00025 #ifndef NDEBUG
00026
00027
00028
00029 class BaTraceStream::Imp {
00030 public:
00031
00032 Imp();
00033
00034
00035 std::ofstream _stream;
00036 UInt32 _nbIndents;
00037 };
00038
00039
00040
00041 BaTraceStream::Imp::Imp()
00042 : _stream( "debug_trace.txt" ),
00043 _nbIndents( 0 )
00044 {
00045
00046 _stream << "// debug_trace.txt " << std::endl;
00047 _stream << std::endl;
00048 }
00049
00050
00051
00052
00053 BaTraceStream BaTraceStream::_theTraceStream;
00054
00055
00056
00057 BaTraceStream& BaTraceStream::theTraceStream()
00058 {
00059 return _theTraceStream;
00060 }
00061
00062
00063
00064
00065 BaTraceStream::BaTraceStream()
00066 : _imp( new Imp )
00067 {
00068 }
00069
00070
00071
00072 BaTraceStream::~BaTraceStream()
00073 {
00074 delete _imp;
00075 }
00076
00077
00078
00079 std::ostream& BaTraceStream::getStream()
00080 {
00081 return _imp->_stream;
00082 }
00083
00084
00085
00086 String BaTraceStream::startl( BaTraceStream::LineType lineType ) const
00087 {
00088 String retVal;
00089 for ( UInt32 i = 0; i < _imp->_nbIndents; ++i ) {
00090 retVal += " ";
00091 }
00092 switch ( lineType ) {
00093 case LINE_NORMAL: {
00094 retVal += "| ";
00095 } break;
00096
00097 case LINE_INDENT: {
00098 retVal += "\\ ";
00099 } break;
00100
00101 case LINE_UNINDENT: {
00102 retVal += "/ ";
00103 } break;
00104 }
00105 return retVal;
00106 }
00107
00108
00109
00110 void BaTraceStream::indent()
00111 {
00112 ++_imp->_nbIndents;
00113 }
00114
00115
00116
00117 void BaTraceStream::unindent()
00118 {
00119 DGFX_ASSERT( _imp->_nbIndents > 0 );
00120 --_imp->_nbIndents;
00121 }
00122 #endif
00123
00124 FREECLOTH_NAMESPACE_END