diff options
Diffstat (limited to 'yage/core/logmessage.h')
-rw-r--r-- | yage/core/logmessage.h | 65 |
1 files changed, 65 insertions, 0 deletions
diff --git a/yage/core/logmessage.h b/yage/core/logmessage.h new file mode 100644 index 00000000..ded40c19 --- /dev/null +++ b/yage/core/logmessage.h @@ -0,0 +1,65 @@ +/* ---------------------------------------------------------------------------- + * logmessage.h + * + * Copyright (c) 2017 Yann Herklotz Grave <ymherklotz@gmail.com> -- MIT License + * See file LICENSE for more details + * ---------------------------------------------------------------------------- + */ + +#ifndef YAGE_CORE_LOGMESSAGE_H +#define YAGE_CORE_LOGMESSAGE_H + +#include <memory> +#include <sstream> +#include <string> + +namespace yage +{ + +class Logger; + +class LogMessage +{ +public: + ~LogMessage(); + + LogMessage(const LogMessage &msg) = delete; + + LogMessage &operator=(const LogMessage &msg) = delete; + LogMessage &operator=(LogMessage &&msg) = delete; + + template <typename T> + LogMessage &operator<<(const T &value); + + LogMessage &operator<<(std::ostream &(*fn)(std::ostream &os)); + + struct Meta { + std::string fileName; + int lineNo; + }; + +private: + friend class Logger; + + std::ostringstream buffer_; + Logger *owner_; + + LogMessage(Logger *owner); + LogMessage(LogMessage &&msg); +}; + +/* ----------------------------------------------------------------------------- + * Template definitions + * ----------------------------------------------------------------------------- + */ + +template <typename T> +LogMessage &LogMessage::operator<<(const T &value) +{ + buffer_ << value; + return *this; +} + +} // namespace yage + +#endif |