annotate common/logstream.h @ 0:a4671277546c tip

created the repository for the thymian project
author ferencd
date Tue, 17 Aug 2021 11:19:54 +0200
parents
children
rev   line source
ferencd@0 1 #ifndef _LOGSTREAM_H_
ferencd@0 2 #define _LOGSTREAM_H_
ferencd@0 3
ferencd@0 4 #ifdef QT_VERSION
ferencd@0 5 #include <QString>
ferencd@0 6 #endif
ferencd@0 7
ferencd@0 8 #include "logtypes.h"
ferencd@0 9
ferencd@0 10 #include <common.h>
ferencd@0 11
ferencd@0 12 #include <sstream>
ferencd@0 13 #include <string>
ferencd@0 14 #include <iomanip>
ferencd@0 15 #include <type_traits>
ferencd@0 16
ferencd@0 17 class logstream
ferencd@0 18 {
ferencd@0 19 public:
ferencd@0 20
ferencd@0 21 logstream() = delete;
ferencd@0 22 logstream(int line, const char pFile[], const char pFunc[], unafrog::log::LogLevel level);
ferencd@0 23
ferencd@0 24 virtual ~logstream();
ferencd@0 25
ferencd@0 26 template<class T>
ferencd@0 27 logstream &operator<<(T t)
ferencd@0 28 {
ferencd@0 29 const bool is_bool = std::is_same<T,bool>::value;
ferencd@0 30 std::string out = is_bool?(t ? "true" : "false") : unafrog::utils::to_string(t);
ferencd@0 31 mOutputStream << out;
ferencd@0 32 return appendSpace();
ferencd@0 33 }
ferencd@0 34
ferencd@0 35 logstream &operator<<(void* t)
ferencd@0 36 {
ferencd@0 37 mOutputStream << "0x" << std::uppercase << std::setfill('0') << std::setw(8) << std::hex << t;
ferencd@0 38 return appendSpace();
ferencd@0 39 }
ferencd@0 40
ferencd@0 41 logstream &operator<<(const char* t)
ferencd@0 42 {
ferencd@0 43 mOutputStream << t;
ferencd@0 44 return appendSpace();
ferencd@0 45 }
ferencd@0 46
ferencd@0 47 logstream &operator<<(const std::string& t)
ferencd@0 48 {
ferencd@0 49 return operator<<(t.c_str());
ferencd@0 50 }
ferencd@0 51
ferencd@0 52 #ifdef QT_VERSION
ferencd@0 53 logstream &operator<<(const QString& t)
ferencd@0 54 {
ferencd@0 55 return operator<<(t.toUtf8().constData());
ferencd@0 56 }
ferencd@0 57 #endif
ferencd@0 58
ferencd@0 59 private:
ferencd@0 60 logstream &operator=(const logstream &rOther);
ferencd@0 61 logstream(const logstream &rOther);
ferencd@0 62
ferencd@0 63 logstream &appendSpace();
ferencd@0 64
ferencd@0 65 private:
ferencd@0 66 std::stringstream mOutputStream;
ferencd@0 67 std::string mFile;
ferencd@0 68 std::string mFunc;
ferencd@0 69 unafrog::log::LogLevel mLevel;
ferencd@0 70 int mLine;
ferencd@0 71 };
ferencd@0 72
ferencd@0 73 #endif // logstream_H