ferencd@0: #ifndef _LOGSTREAM_H_ ferencd@0: #define _LOGSTREAM_H_ ferencd@0: ferencd@0: #ifdef QT_VERSION ferencd@0: #include ferencd@0: #endif ferencd@0: ferencd@0: #include "logtypes.h" ferencd@0: ferencd@0: #include ferencd@0: ferencd@0: #include ferencd@0: #include ferencd@0: #include ferencd@0: #include ferencd@0: ferencd@0: class logstream ferencd@0: { ferencd@0: public: ferencd@0: ferencd@0: logstream() = delete; ferencd@0: logstream(int line, const char pFile[], const char pFunc[], unafrog::log::LogLevel level); ferencd@0: ferencd@0: virtual ~logstream(); ferencd@0: ferencd@0: template ferencd@0: logstream &operator<<(T t) ferencd@0: { ferencd@0: const bool is_bool = std::is_same::value; ferencd@0: std::string out = is_bool?(t ? "true" : "false") : unafrog::utils::to_string(t); ferencd@0: mOutputStream << out; ferencd@0: return appendSpace(); ferencd@0: } ferencd@0: ferencd@0: logstream &operator<<(void* t) ferencd@0: { ferencd@0: mOutputStream << "0x" << std::uppercase << std::setfill('0') << std::setw(8) << std::hex << t; ferencd@0: return appendSpace(); ferencd@0: } ferencd@0: ferencd@0: logstream &operator<<(const char* t) ferencd@0: { ferencd@0: mOutputStream << t; ferencd@0: return appendSpace(); ferencd@0: } ferencd@0: ferencd@0: logstream &operator<<(const std::string& t) ferencd@0: { ferencd@0: return operator<<(t.c_str()); ferencd@0: } ferencd@0: ferencd@0: #ifdef QT_VERSION ferencd@0: logstream &operator<<(const QString& t) ferencd@0: { ferencd@0: return operator<<(t.toUtf8().constData()); ferencd@0: } ferencd@0: #endif ferencd@0: ferencd@0: private: ferencd@0: logstream &operator=(const logstream &rOther); ferencd@0: logstream(const logstream &rOther); ferencd@0: ferencd@0: logstream &appendSpace(); ferencd@0: ferencd@0: private: ferencd@0: std::stringstream mOutputStream; ferencd@0: std::string mFile; ferencd@0: std::string mFunc; ferencd@0: unafrog::log::LogLevel mLevel; ferencd@0: int mLine; ferencd@0: }; ferencd@0: ferencd@0: #endif // logstream_H