Added Logger class acting as threadsafe wrapper for QDebug
Tá an tiomantas seo le fáil i:
		
							
								
								
									
										36
									
								
								cli/logger.cpp
									
									
									
									
									
										Comhad gnáth
									
								
							
							
						
						
									
										36
									
								
								cli/logger.cpp
									
									
									
									
									
										Comhad gnáth
									
								
							| @@ -0,0 +1,36 @@ | ||||
| #include <QMutexLocker> | ||||
| #include "logger.h" | ||||
|  | ||||
| Logger::Logger(QFile *file) | ||||
| { | ||||
| 	out = new QDebug(file); | ||||
| 	this->file = file; | ||||
| } | ||||
|  | ||||
| Logger::Logger(Logger &&o) | ||||
| { | ||||
| 	this->out = o.out; | ||||
| 	o.out = nullptr; | ||||
| } | ||||
|  | ||||
| Logger &Logger::error() | ||||
| { | ||||
| 	static Logger result = [] | ||||
| 	{ | ||||
| 		QFile *file = new QFile(); | ||||
| 		file->open(stderr, QIODevice::WriteOnly); | ||||
| 		return Logger(file); | ||||
| 	}(); | ||||
| 	return result; | ||||
| } | ||||
|  | ||||
| Logger &Logger::info() | ||||
| { | ||||
| 	static Logger result = [] | ||||
| 	{ | ||||
| 		QFile *file = new QFile(); | ||||
| 		file->open(stdout, QIODevice::WriteOnly); | ||||
| 		return Logger(file); | ||||
| 	}(); | ||||
| 	return result; | ||||
| } | ||||
							
								
								
									
										43
									
								
								cli/logger.h
									
									
									
									
									
										Comhad gnáth
									
								
							
							
						
						
									
										43
									
								
								cli/logger.h
									
									
									
									
									
										Comhad gnáth
									
								
							| @@ -0,0 +1,43 @@ | ||||
| #ifndef LOGGER_H | ||||
| #define LOGGER_H | ||||
| #include <QFile> | ||||
| #include <QDebug> | ||||
| #include <QMutex> | ||||
| class Logger | ||||
| { | ||||
|   private: | ||||
| 	QDebug *out; | ||||
| 	QMutex mutex; | ||||
| 	QFile *file; | ||||
|  | ||||
|   public: | ||||
| 	Logger(QFile *file); | ||||
| 	Logger(Logger &&o); | ||||
|  | ||||
| 	template <class T> Logger &operator<<(const T &val) | ||||
| 	{ | ||||
| 		QMutexLocker locker(&this->mutex); | ||||
| 		*out << val; | ||||
| 		file->flush(); | ||||
| 		return *this; | ||||
| 	} | ||||
|  | ||||
| 	template <class T> Logger &operator<<(const T *val) | ||||
| 	{ | ||||
| 		QMutexLocker locker(&this->mutex); | ||||
| 		*out << val; | ||||
| 		file->flush(); | ||||
| 		return *this; | ||||
| 	} | ||||
|  | ||||
| 	~Logger() | ||||
| 	{ | ||||
| 		delete out; | ||||
| 	} | ||||
|  | ||||
| 	static Logger &error(); | ||||
|  | ||||
| 	static Logger &info(); | ||||
| }; | ||||
|  | ||||
| #endif // LOGGER_H | ||||
		Tagairt in Eagrán Nua
	
	Cuir bac ar úsáideoir