DGtal  0.6.devel
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Groups Pages
Trace.h
1 
17 #pragma once
18 
30 #if defined(Trace_RECURSES)
31 #error Recursive header files inclusion detected in Trace.h
32 #else // defined(Trace_RECURSES)
33 
34 #define Trace_RECURSES
35 
36 #if !defined Trace_h
37 
38 #define Trace_h
39 
41 // Inclusions
42 #include <iostream>
43 #include <ostream>
44 #include <string>
45 #include <stack>
46 
47 #include "DGtal/base/Config.h"
48 #include "DGtal/base/Clock.h"
49 #include "DGtal/base/Assert.h"
50 #include "DGtal/base/TraceWriter.h"
51 #include "DGtal/base/TraceWriterTerm.h"
53 
54 
55 namespace DGtal
56 {
57 
59  // class Trace
74  class Trace
75  {
76  // ----------------------- Standard services ------------------------------
77  public:
78 
80 #define TRACE_PATTERN " "
81 
82 
89  Trace(TraceWriter & writer);
90 
91 
95  ~Trace();
96 
101  void reset();
102 
103 
104 
110  void beginBlock(const std::string &keyword = "");
111 
117  long endBlock();
118 
123  std::ostream & info() const;
124 
130  std::ostream & warning() const;
131 
132 
138  std::ostream & error() const;
139 
140 
146  std::ostream & emphase() const;
147 
154  void progressBar(const double currentValue,
155  const double maximalValue) const;
156 
157 
158  // ----------------------- Interface --------------------------------------
159  public:
160 
165  void selfDisplay( std::ostream & out ) const;
166 
171  bool isValid() const;
172 
173  // ------------------------- Protected Datas ------------------------------
174  private:
175  // ------------------------- Private Datas --------------------------------
176  private:
178  unsigned int myCurrentLevel;
180  std::string myCurrentPrefix;
181 
183  std::stack<std::string> myKeywordStack;
184 
187 
189  std::stack<Clock*> myClockStack;
190 
191  // ------------------------- Hidden services ------------------------------
192  protected:
193 
194  private:
195 
201  Trace( const Trace & other );
202 
209  Trace & operator=( const Trace & other );
210 
211 
212 
213 
214  // ------------------------- Internals ------------------------------------
215  private:
216 
217  }; // end of class Trace
218 
219 
226  std::ostream&
227  operator<<( std::ostream & out, const Trace & object );
228 
229 
230 } // namespace DGtal
231 
232 
234 // Includes inline functions
235 #include "DGtal/base/Trace.ih"
236 
237 // //
239 
240 #endif // !defined Trace_h
241 
242 #undef Trace_RECURSES
243 #endif // else defined(Trace_RECURSES)