aboutsummaryrefslogtreecommitdiffstats
path: root/yage/core/logmessage.h
diff options
context:
space:
mode:
Diffstat (limited to 'yage/core/logmessage.h')
-rw-r--r--yage/core/logmessage.h65
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