OpenANN  1.1.0
An open source library for artificial neural networks.
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
Logger.h
Go to the documentation of this file.
1 #ifndef OPENANN_IO_LOGGER_H_
2 #define OPENANN_IO_LOGGER_H_
3 
4 #include <string>
5 #include <iostream>
6 #include <sstream>
7 #include <fstream>
8 
9 #ifndef NDEBUG
10 
11 #define OPENANN_OUTPUT(msg) std::cout << __FILE__ << "(" << __LINE__ << "): " << msg << std::endl;
12 #define OPENANN_TRACE(msg) std::cerr << __FILE__ << "(" << __LINE__ << "): " << msg << std::endl;
13 
14 #else // NDEBUG
15 
16 #define OPENANN_OUTPUT(msg) std::cout << msg << std::endl;
17 #define OPENANN_TRACE(msg)
18 
19 #endif // NDEBUG
20 
21 #ifndef OPENANN_LOG_NAMESPACE
22 
25 #define OPENANN_LOG_NAMESPACE NULL
26 #endif // OPENANN_LOG_NAMESPACE
27 
28 #ifndef OPENANN_LOGLEVEL
29 
33 #define OPENANN_LOGLEVEL OpenANN::Log::DEBUG
34 #endif // OPENANN_LOGLEVEL
35 
40 #define OPENANN_LOG(level) \
41  if(level > OPENANN_LOGLEVEL) ; \
42  else if(level > OpenANN::Log::getLevel()) ; \
43  else OpenANN::Log().get(level, OPENANN_LOG_NAMESPACE)
44 
48 #define OPENANN_DEBUG OPENANN_LOG(OpenANN::Log::DEBUG)
49 
52 #define OPENANN_INFO OPENANN_LOG(OpenANN::Log::INFO)
53 
56 #define OPENANN_ERROR OPENANN_LOG(OpenANN::Log::ERROR)
57 
58 namespace OpenANN
59 {
60 
67 {
71  double value;
75  int precision;
76 
78  : value(value), precision(precision)
79  {}
80 };
81 
87 class Log
88 {
89 public:
90  enum LogLevel
91  {
92  DISABLED = 0,
94  INFO,
96  };
97 
98  Log();
99  virtual ~Log();
100 
101  std::ostream& get(LogLevel level, const char* name_space);
102 
103  static std::ostream& getStream();
104  static LogLevel& getLevel();
105 
106  static void setDisabled();
107  static void setError();
108  static void setInfo();
109  static void setDebug();
110 private:
111  std::ostringstream message;
112  LogLevel level;
113 };
114 
115 
121 class Logger
122 {
123 public:
127  static bool deactivate;
131  enum Target
132  {
137  } target;
138 
139  std::string name;
140  std::ofstream file;
141 
142  Logger(Target target, std::string name = "Logger");
143  ~Logger();
148  bool isActive();
149 };
150 
151 
152 std::ostream& operator<<(std::ostream& os, const FloatingPointFormatter& t);
154 template<typename T>
156 {
157  switch(logger.target)
158  {
159  case Logger::CONSOLE:
160  std::cout << t << std::flush;
161  break;
162  case Logger::APPEND_FILE:
163  case Logger::FILE:
164  logger.file << t << std::flush;
165  break;
166  default: // do not log
167  break;
168  }
169  return logger;
170 }
171 
172 } // namespace OpenANN
173 
174 #endif // OPENANN_IO_LOGGER_H_