diff options
Diffstat (limited to 'impl/Log.hpp')
-rw-r--r-- | impl/Log.hpp | 49 |
1 files changed, 49 insertions, 0 deletions
diff --git a/impl/Log.hpp b/impl/Log.hpp new file mode 100644 index 0000000..a920906 --- /dev/null +++ b/impl/Log.hpp @@ -0,0 +1,49 @@ +#ifndef LOG_HPP +#define LOG_HPP + +#include <string> +#include <ostream> +#include <map> + +namespace log { + + struct Logger { + Logger(std::ostream& stream, const std::string& name) + : _stream(stream), + _name(name), + _enabled(false) {} + + bool enabled() const { + return _enabled; + } + + bool enabled(bool v) { + bool ret = _enabled; + _enabled = v; + return ret; + } + + template<typename T> + friend Logger& operator<<(Logger&, const T&); + + private: + std::ostream& _stream; + std::string _name; + bool _enabled; + }; + + template<typename T> + Logger& operator<<(Logger& logger, const T& obj) { + if (logger._enabled) { + logger._stream << logger._name << " :- " << obj << std::endl; + } + return logger; + } + + Logger trace(std::cerr, "trace"); + Logger strategy(std::cerr, "strategy"); + Logger debug(std::cerr, "debug"); + +} + +#endif |