Sayonara Player
Logger.h
1 /* Logger.h */
2 
3 /* Copyright (C) 2011-2020 Michael Lugmair (Lucio Carreras)
4  *
5  * This file is part of sayonara player
6  *
7  * This program is free software: you can redistribute it and/or modify
8  * it under the terms of the GNU General Public License as published by
9  * the Free Software Foundation, either version 3 of the License, or
10  * (at your option) any later version.
11 
12  * This program is distributed in the hope that it will be useful,
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15  * GNU General Public License for more details.
16 
17  * You should have received a copy of the GNU General Public License
18  * along with this program. If not, see <http://www.gnu.org/licenses/>.
19  */
20 
21 #ifndef LOGGER_H
22 #define LOGGER_H
23 
24 #include <typeinfo>
25 #include <type_traits>
26 #include <string>
27 #include <QString>
28 #include <QMetaType>
29 
34 class QString;
35 class QStringList;
36 class QByteArray;
37 class QPoint;
38 class QChar;
39 class LogListener;
40 class QRegion;
41 class QMargins;
42 class QSize;
43 class QRect;
44 
45 enum class Log : unsigned char
46 {
47  Warning=0,
48  Error,
49  Info,
50  Debug,
51  Develop,
52  Crazy
53 };
54 
55 
60 class Logger
61 {
62 
63 private:
64  struct Private;
65  Private* m=nullptr;
66 
67 public:
68  explicit Logger(const Log& type, const QString& class_name);
69 
70  ~Logger();
71 
72  static void registerLogListener(LogListener* logListener);
73 
74  Logger& operator << (const QString& msg);
75  Logger& operator << (const QChar& c);
76  Logger& operator << (const QStringList& lst);
77  Logger& operator << (const QByteArray& arr);
78  Logger& operator << (const QPoint& point);
79  Logger& operator << (const QSize& size);
80  Logger& operator << (const QRect& size);
81  Logger& operator << (const char* str);
82  Logger& operator << (const std::string& str);
83  Logger& operator << (const Log& log_type);
84 
85  template<typename T>
86  typename std::enable_if< std::is_floating_point<T>::value, Logger&>::type
87  operator << (const T& val){
88 
89  (*this) << std::to_string(val);
90 
91  return *this;
92  }
93 
94  template<typename T>
95  typename std::enable_if< std::is_integral<T>::value, Logger&>::type
96  operator << (const T& val){
97 
98  (*this) << std::to_string(val);
99 
100  return *this;
101  }
102 
103  template<typename T, template <typename ELEM> class CONT>
104  Logger& operator << (const CONT<T> list){
105  for(const T& item : list){
106  (*this) << std::to_string(item) << ", ";
107  }
108 
109  return *this;
110  }
111 };
112 
113 Logger spLog(const Log& type, const std::string& data);
114 Logger spLog(const Log& type, const char* data);
115 
116 template<typename T>
117 typename std::enable_if< std::is_class<T>::value, Logger>::type
118 spLog(const Log& type, const T*)
119 {
120  return spLog(type, typeid(T).name());
121 }
122 
123 Q_DECLARE_METATYPE(Log)
124 
125 #endif // LOGGER_H
LogListener
Definition: LogListener.h:33
Logger
The Logger class.
Definition: Logger.h:61