From e68759a4101567a27e306eae0a907baa759ae80c Mon Sep 17 00:00:00 2001 From: Yann Herklotz Date: Sun, 12 Nov 2017 22:30:20 +0000 Subject: Designing simple preview game --- yage/core/logger.cpp | 39 +++++++++++++++++++++++++++++++++------ yage/core/logger.h | 18 +++++++++++++++--- yage/core/loglevel.h | 10 ++++++++++ yage/core/logmessage.cpp | 7 +++++-- yage/core/logmessage.h | 3 ++- yage/core/logsink.cpp | 31 +++++++++++++++++++++++++++++++ yage/core/logsink.h | 9 +++++++++ yage/core/resourcemanager.cpp | 2 +- yage/core/spritebatch.h | 1 + 9 files changed, 107 insertions(+), 13 deletions(-) create mode 100644 yage/core/loglevel.h (limited to 'yage/core') diff --git a/yage/core/logger.cpp b/yage/core/logger.cpp index d289c0e6..9fba2239 100644 --- a/yage/core/logger.cpp +++ b/yage/core/logger.cpp @@ -7,25 +7,52 @@ */ #include "logger.h" +#include "logmessage.h" +#include "logsink.h" +#include #include #include namespace yage { -LogMessage Logger::operator()() +Logger::Logger() { - return LogMessage(this); + add(makeConsoleSink()); +} + +LogMessage Logger::operator()(const std::string &fileName, int lineNum) +{ + return LogMessage(this, fileName, lineNum); } void Logger::flush(const LogMessage *msg) { - using std::string; - using std::cout; + std::string asString(msg->buffer_.str()); - string asString(msg->buffer_.str()); - cout << asString << "\n"; + for (auto &&sink : sinks_) { + sink.write(msg->meta_, asString); + } +} + +void Logger::add(const LogSink &sink) +{ + sinks_.push_back(sink); +} + +void Logger::remove(const LogSink &sink) +{ + auto it = std::find(std::begin(sinks_), std::end(sinks_), sink); + + if(it != std::end(sinks_)) { + sinks_.erase(it); + } +} + +void Logger::clear() +{ + sinks_.clear(); } Logger &Logger::instance() diff --git a/yage/core/logger.h b/yage/core/logger.h index 6829327e..2c70fd04 100644 --- a/yage/core/logger.h +++ b/yage/core/logger.h @@ -9,23 +9,35 @@ #ifndef YAGE_CORE_LOGGER_H #define YAGE_CORE_LOGGER_H -#include "logmessage.h" +#include +#include namespace yage { +class LogMessage; +class LogSink; + class Logger { public: - LogMessage operator()(); + explicit Logger(); + + LogMessage operator()(const std::string &fileName, int lineNum); void flush(const LogMessage *msg); + void add(const LogSink &sink); + void remove(const LogSink &sink); + void clear(); static Logger &instance(); + +private: + std::vector sinks_; }; } // namespace yage -#define gLog yage::Logger::instance()() +#define gLog (yage::Logger::instance()(__FILE__, __LINE__)) #endif diff --git a/yage/core/loglevel.h b/yage/core/loglevel.h new file mode 100644 index 00000000..5e11ed83 --- /dev/null +++ b/yage/core/loglevel.h @@ -0,0 +1,10 @@ +#ifndef YAGE_CORE_LOGLEVEL_H +#define YAGE_CORE_LOGLEVEL_H + +class LogLevel +{ +public: + LogLevel(); +}; + +#endif diff --git a/yage/core/logmessage.cpp b/yage/core/logmessage.cpp index 82b63d2e..9f460bec 100644 --- a/yage/core/logmessage.cpp +++ b/yage/core/logmessage.cpp @@ -9,13 +9,16 @@ #include "logmessage.h" #include "logger.h" - #include namespace yage { -LogMessage::LogMessage(Logger *owner) : owner_(owner) {} +LogMessage::LogMessage(Logger *owner, const std::string &fileName_i, + int lineNum_i) + : owner_(owner), meta_({fileName_i, lineNum_i}) +{ +} LogMessage::LogMessage(LogMessage &&msg) : owner_(std::move(msg.owner_)) {} diff --git a/yage/core/logmessage.h b/yage/core/logmessage.h index ded40c19..8080f914 100644 --- a/yage/core/logmessage.h +++ b/yage/core/logmessage.h @@ -43,8 +43,9 @@ private: std::ostringstream buffer_; Logger *owner_; + Meta meta_; - LogMessage(Logger *owner); + LogMessage(Logger *owner, const std::string &fileName_i, int lineNum_i); LogMessage(LogMessage &&msg); }; diff --git a/yage/core/logsink.cpp b/yage/core/logsink.cpp index 1cc8b139..987a260d 100644 --- a/yage/core/logsink.cpp +++ b/yage/core/logsink.cpp @@ -8,12 +8,43 @@ #include "logsink.h" +#include + namespace yage { +LogSink::LogSink(const LogSink &sink) : wrapper_(sink.wrapper_->clone()) {} + +LogSink::LogSink(LogSink &&sink) : wrapper_(std::move(sink.wrapper_)) {} + +LogSink &LogSink::operator=(const LogSink &sink) +{ + wrapper_.reset(sink.wrapper_->clone()); + return *this; +} + +LogSink &LogSink::operator=(LogSink &&sink) +{ + wrapper_ = std::move(sink.wrapper_); + return *this; +} + +bool LogSink::operator==(const LogSink &sink) +{ + return (wrapper_.get() == sink.wrapper_.get()); +} + void LogSink::write(const LogMessage::Meta &meta, const std::string &msg) { wrapper_->write(meta, msg); } +LogSink makeConsoleSink() +{ + return [](const LogMessage::Meta &meta, const std::string &msg) { + std::cout << msg << " (" << meta.fileName << ":" << meta.lineNo + << ")\n"; + }; +} + } // namespace yage diff --git a/yage/core/logsink.h b/yage/core/logsink.h index e898d15f..f18a6d37 100644 --- a/yage/core/logsink.h +++ b/yage/core/logsink.h @@ -23,6 +23,13 @@ public: template LogSink(T impl); + LogSink(const LogSink &sink); + LogSink(LogSink &&sink); + + LogSink &operator=(const LogSink &sink); + LogSink &operator=(LogSink &&sink); + bool operator==(const LogSink &sink); + void write(const LogMessage::Meta &meta, const std::string &msg); private: @@ -47,6 +54,8 @@ private: std::unique_ptr wrapper_; }; +LogSink makeConsoleSink(); + /* ----------------------------------------------------------------------------- * Template Implementation * ----------------------------------------------------------------------------- diff --git a/yage/core/resourcemanager.cpp b/yage/core/resourcemanager.cpp index cf70eae8..aa234c9f 100644 --- a/yage/core/resourcemanager.cpp +++ b/yage/core/resourcemanager.cpp @@ -6,7 +6,7 @@ * ---------------------------------------------------------------------------- */ -#include +#include "resourcemanager.h" namespace yage { diff --git a/yage/core/spritebatch.h b/yage/core/spritebatch.h index 953055f6..2c525ba7 100644 --- a/yage/core/spritebatch.h +++ b/yage/core/spritebatch.h @@ -92,6 +92,7 @@ public: void init(); void begin(); void end(); + // adds a sprite to the sprite batch to be rendered later void draw(const yage::Vector4f &destination_rect, const yage::Vector4f &uv_rect, GLuint texture, const Color &color, -- cgit