diff options
author | Yann Herklotz <ymherklotz@gmail.com> | 2017-11-02 18:46:49 +0000 |
---|---|---|
committer | Yann Herklotz <ymherklotz@gmail.com> | 2017-11-02 18:46:49 +0000 |
commit | 5fb7c972d44a3ce0a067101885d2e0c1966e7c89 (patch) | |
tree | a65d6a67ab1a2728223dbb9cebcf156670e3e64b | |
parent | 2817eb3841960562d18cee18912cef1bbdb406f1 (diff) | |
download | YAGE-5fb7c972d44a3ce0a067101885d2e0c1966e7c89.tar.gz YAGE-5fb7c972d44a3ce0a067101885d2e0c1966e7c89.zip |
Adding logsink
-rw-r--r-- | CMakeLists.txt | 1 | ||||
-rw-r--r-- | tests/logtest.cpp | 14 | ||||
-rw-r--r-- | yage/core/logger.cpp | 9 | ||||
-rw-r--r-- | yage/core/logger.h | 4 | ||||
-rw-r--r-- | yage/core/logmessage.cpp | 5 | ||||
-rw-r--r-- | yage/core/logsink.cpp | 19 | ||||
-rw-r--r-- | yage/core/logsink.h | 57 | ||||
-rw-r--r-- | yage/yage.h | 3 |
8 files changed, 104 insertions, 8 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt index 7a3abb66..5d8ae083 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -46,4 +46,5 @@ if($ENV{UNIT_TESTS}) make_test(spritesheettest ${SIMULATION_RUNS}) make_test(vector3test ${SIMULATION_RUNS}) make_test(vector4test ${SIMULATION_RUNS}) + make_test(logtest 1) endif() diff --git a/tests/logtest.cpp b/tests/logtest.cpp new file mode 100644 index 00000000..9cd5288a --- /dev/null +++ b/tests/logtest.cpp @@ -0,0 +1,14 @@ +#include <yage.h> + +#include <iostream> + +int main() +{ + gLog << "Hello World"; + yage::Logger l; + l() << "Hello my name is Yann"; + std::cout << "#####################\n"; + + gLog << "Yanananan"; + gLog << "Remove the top element"; +} diff --git a/yage/core/logger.cpp b/yage/core/logger.cpp index f64b908b..d289c0e6 100644 --- a/yage/core/logger.cpp +++ b/yage/core/logger.cpp @@ -11,8 +11,6 @@ #include <iostream> #include <string> -using namespace std; - namespace yage { @@ -21,9 +19,12 @@ LogMessage Logger::operator()() return LogMessage(this); } -void Logger::flush(const LogMessage &msg) +void Logger::flush(const LogMessage *msg) { - string asString(msg.buffer_.str()); + using std::string; + using std::cout; + + string asString(msg->buffer_.str()); cout << asString << "\n"; } diff --git a/yage/core/logger.h b/yage/core/logger.h index e7187a81..6829327e 100644 --- a/yage/core/logger.h +++ b/yage/core/logger.h @@ -19,11 +19,13 @@ class Logger public: LogMessage operator()(); - void flush(const LogMessage &msg); + void flush(const LogMessage *msg); static Logger &instance(); }; } // namespace yage +#define gLog yage::Logger::instance()() + #endif diff --git a/yage/core/logmessage.cpp b/yage/core/logmessage.cpp index aa512042..82b63d2e 100644 --- a/yage/core/logmessage.cpp +++ b/yage/core/logmessage.cpp @@ -9,6 +9,9 @@ #include "logmessage.h" #include "logger.h" + +#include <iostream> + namespace yage { @@ -19,7 +22,7 @@ LogMessage::LogMessage(LogMessage &&msg) : owner_(std::move(msg.owner_)) {} LogMessage::~LogMessage() { if (owner_ != nullptr) { - owner_->flush(*this); + owner_->flush(this); } } diff --git a/yage/core/logsink.cpp b/yage/core/logsink.cpp new file mode 100644 index 00000000..1cc8b139 --- /dev/null +++ b/yage/core/logsink.cpp @@ -0,0 +1,19 @@ +/* ---------------------------------------------------------------------------- + * logsink.cpp + * + * Copyright (c) 2017 Yann Herklotz Grave <ymherklotz@gmail.com> -- MIT License + * See file LICENSE for more details + * ---------------------------------------------------------------------------- + */ + +#include "logsink.h" + +namespace yage +{ + +void LogSink::write(const LogMessage::Meta &meta, const std::string &msg) +{ + wrapper_->write(meta, msg); +} + +} // namespace yage diff --git a/yage/core/logsink.h b/yage/core/logsink.h index bdfc70cf..e898d15f 100644 --- a/yage/core/logsink.h +++ b/yage/core/logsink.h @@ -1,5 +1,5 @@ /* ---------------------------------------------------------------------------- - * logger.cpp + * logsink.h * * Copyright (c) 2017 Yann Herklotz Grave <ymherklotz@gmail.com> -- MIT License * See file LICENSE for more details @@ -11,6 +11,7 @@ #include "logmessage.h" +#include <memory> #include <string> namespace yage @@ -19,9 +20,61 @@ namespace yage class LogSink { public: - void operator()(const LogMessage::Meta &, const std::string &message); + template <typename T> + LogSink(T impl); + + void write(const LogMessage::Meta &meta, const std::string &msg); + +private: + struct Concept { + virtual ~Concept() = default; + + virtual Concept *clone() const = 0; + virtual void write(const LogMessage::Meta &meta, + const std::string &msg) = 0; + }; + + template <typename T> + struct Model : Concept { + Model(T impl_i); + virtual Concept *clone() const override; + virtual void write(const LogMessage::Meta &meta, + const std::string &msg) override; + + T impl; + }; + + std::unique_ptr<Concept> wrapper_; }; +/* ----------------------------------------------------------------------------- + * Template Implementation + * ----------------------------------------------------------------------------- + */ + +template <typename T> +LogSink::LogSink(T impl) : wrapper_(new Model<T>(std::move(impl))) +{ +} + +template <typename T> +LogSink::Model<T>::Model(T impl_i) : impl(impl_i) +{ +} + +template <typename T> +LogSink::Concept *LogSink::Model<T>::clone() const +{ + return new Model<T>(impl); +} + +template <typename T> +void LogSink::Model<T>::write(const LogMessage::Meta &meta, + const std::string &msg) +{ + impl(meta, msg); +} + } // namespace yage #endif diff --git a/yage/yage.h b/yage/yage.h index e6d64a28..8becefde 100644 --- a/yage/yage.h +++ b/yage/yage.h @@ -26,6 +26,9 @@ #include "core/texture.h" #include "core/vertex.h" #include "core/window.h" +#include "core/logger.h" +#include "core/logmessage.h" +#include "core/logsink.h" #include "physics/body.h" #include "physics/particlebody.h" |