diff options
author | Yann Herklotz <ymherklotz@gmail.com> | 2017-11-12 22:30:20 +0000 |
---|---|---|
committer | Yann Herklotz <ymherklotz@gmail.com> | 2017-11-12 22:30:20 +0000 |
commit | e68759a4101567a27e306eae0a907baa759ae80c (patch) | |
tree | c90733351cb7a8a02f91725118593c1c4f19c563 /yage/core | |
parent | 5fb7c972d44a3ce0a067101885d2e0c1966e7c89 (diff) | |
download | YAGE-e68759a4101567a27e306eae0a907baa759ae80c.tar.gz YAGE-e68759a4101567a27e306eae0a907baa759ae80c.zip |
Designing simple preview game
Diffstat (limited to 'yage/core')
-rw-r--r-- | yage/core/logger.cpp | 39 | ||||
-rw-r--r-- | yage/core/logger.h | 18 | ||||
-rw-r--r-- | yage/core/loglevel.h | 10 | ||||
-rw-r--r-- | yage/core/logmessage.cpp | 7 | ||||
-rw-r--r-- | yage/core/logmessage.h | 3 | ||||
-rw-r--r-- | yage/core/logsink.cpp | 31 | ||||
-rw-r--r-- | yage/core/logsink.h | 9 | ||||
-rw-r--r-- | yage/core/resourcemanager.cpp | 2 | ||||
-rw-r--r-- | yage/core/spritebatch.h | 1 |
9 files changed, 107 insertions, 13 deletions
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 <algorithm> #include <iostream> #include <string> 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 <string> +#include <vector> 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<LogSink> 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 <iostream> 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 <iostream> + 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 <typename T> 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<Concept> 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 <yage/core/resourcemanager.h> +#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, |