PDFxTMDLib  1.0.0
Logger.h
Go to the documentation of this file.
1 #pragma once
2 #include <fstream>
3 #include <iostream>
4 #include <string>
5 #include <utility>
6 
7 namespace PDFxTMD
8 {
9 class Logger
10 {
11  public:
12  static Logger &getInstance()
13  {
14  static Logger instance;
15  return instance;
16  }
17 
18  void setEnabled(bool enable)
19  {
20  enabled = enable;
21  }
22 
23  // Set the output stream (e.g., std::cout, std::cerr, or a file stream)
24  void setLogStream(std::ostream &os)
25  {
26  logStream = &os;
27  }
28 
29  template <typename T> Logger &operator<<(T &&value)
30  {
31  if (enabled)
32  {
33  *logStream << std::forward<T>(value);
34  }
35  return *this;
36  }
37 
38  Logger &operator<<(std::ostream &(*manip)(std::ostream &))
39  {
40  if (enabled)
41  {
42  manip(*logStream);
43  }
44  return *this;
45  }
46 
47  // Prevent copying of the singleton
48  Logger(const Logger &) = delete;
49  Logger &operator=(const Logger &) = delete;
50 
51  private:
52  Logger() : enabled(false), logStream(&std::cout)
53  {
54  }
55 
56  bool enabled;
57  std::ostream *logStream;
58 };
59 } // namespace PDFxTMD
60 #define PDFxTMDLOG PDFxTMD::Logger::getInstance()
Definition: Logger.h:10
Logger(const Logger &)=delete
static Logger & getInstance()
Definition: Logger.h:12
Logger & operator<<(std::ostream &(*manip)(std::ostream &))
Definition: Logger.h:38
void setLogStream(std::ostream &os)
Definition: Logger.h:24
Logger & operator=(const Logger &)=delete
Logger & operator<<(T &&value)
Definition: Logger.h:29
void setEnabled(bool enable)
Definition: Logger.h:18
Definition: AllFlavorsShape.h:14