diff options
author | Yann Herklotz <ymherklotz@gmail.com> | 2017-11-02 12:46:35 +0000 |
---|---|---|
committer | Yann Herklotz <ymherklotz@gmail.com> | 2017-11-02 12:46:35 +0000 |
commit | 8b23c5f125140efcdd97912d4b2df20531b0a557 (patch) | |
tree | 0afbd7bb7b7ad2f52e74c8709b5e26f8164345f0 /yage/core/logmessage.h | |
parent | f49044c9886accc91dfd29056241da3b48324640 (diff) | |
download | YAGE-8b23c5f125140efcdd97912d4b2df20531b0a557.tar.gz YAGE-8b23c5f125140efcdd97912d4b2df20531b0a557.zip |
Adding logging system
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 |