aboutsummaryrefslogtreecommitdiffstats
path: root/yage
diff options
context:
space:
mode:
authorYann Herklotz <ymherklotz@gmail.com>2017-11-12 22:30:20 +0000
committerYann Herklotz <ymherklotz@gmail.com>2017-11-12 22:30:20 +0000
commite68759a4101567a27e306eae0a907baa759ae80c (patch)
treec90733351cb7a8a02f91725118593c1c4f19c563 /yage
parent5fb7c972d44a3ce0a067101885d2e0c1966e7c89 (diff)
downloadYAGE-e68759a4101567a27e306eae0a907baa759ae80c.tar.gz
YAGE-e68759a4101567a27e306eae0a907baa759ae80c.zip
Designing simple preview game
Diffstat (limited to 'yage')
-rw-r--r--yage/core/logger.cpp39
-rw-r--r--yage/core/logger.h18
-rw-r--r--yage/core/loglevel.h10
-rw-r--r--yage/core/logmessage.cpp7
-rw-r--r--yage/core/logmessage.h3
-rw-r--r--yage/core/logsink.cpp31
-rw-r--r--yage/core/logsink.h9
-rw-r--r--yage/core/resourcemanager.cpp2
-rw-r--r--yage/core/spritebatch.h1
-rw-r--r--yage/util/active.h11
10 files changed, 118 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,
diff --git a/yage/util/active.h b/yage/util/active.h
new file mode 100644
index 00000000..877ab75e
--- /dev/null
+++ b/yage/util/active.h
@@ -0,0 +1,11 @@
+#ifndef YAGE_UTIL_ACTIVE_H
+#define YAGE_UTIL_ACTIVE_H
+
+class Active
+{
+public:
+ Active();
+ virtual ~Active();
+};
+
+#endif