summaryrefslogtreecommitdiff
path: root/asl/log/log.hpp
diff options
context:
space:
mode:
authorSteven Le Rouzic <steven.lerouzic@gmail.com>2025-02-04 00:37:08 +0100
committerSteven Le Rouzic <steven.lerouzic@gmail.com>2025-02-04 00:37:08 +0100
commit3d5a45b283d2a59211f9e24f100b95169375213d (patch)
tree2180c31100324076f7ff862009190564c0296b58 /asl/log/log.hpp
parentf2b1af8d3f23ff47b343cef8feef6e25ff5377e4 (diff)
Add deref utilities & use them for log writer
Diffstat (limited to 'asl/log/log.hpp')
-rw-r--r--asl/log/log.hpp20
1 files changed, 14 insertions, 6 deletions
diff --git a/asl/log/log.hpp b/asl/log/log.hpp
index f2e3a47..7445cf6 100644
--- a/asl/log/log.hpp
+++ b/asl/log/log.hpp
@@ -39,16 +39,24 @@ public:
constexpr Logger* next_logger() const { return m_next; }
};
-// @Todo Make a deref_as trait & deref utility
-// @Todo Accept writer as box, pointer, reference, or value
-class DefaultLogger : public Logger
+class DefaultLoggerBase : public Logger
{
- Writer* m_writer;
+protected:
+ static void log_inner(Writer&, const message&);
+};
+
+template<derefs_as<Writer> W>
+class DefaultLogger : public DefaultLoggerBase
+{
+ W m_writer;
public:
- explicit constexpr DefaultLogger(Writer* writer) : m_writer{writer} {}
+ explicit constexpr DefaultLogger(W&& writer) : m_writer{ASL_FWD(writer)} {}
- void log(const message&) override;
+ constexpr void log(const message& m) override
+ {
+ log_inner(deref<Writer>(m_writer), m);
+ }
};
void register_logger(box<Logger>);