@@ -18,51 +18,4 @@ class NoLogger : public Logger {
1818 std::unique_ptr<Logger> clone () const override { return std::make_unique<NoLogger>(); }
1919};
2020
21- class LogDispatcher final : public LogDispatch {
22- public:
23- void log (LogEvent tag) override { log_impl (tag); }
24- void log (LogEvent tag, std::string_view message) override { log_impl (tag, message); }
25- void log (LogEvent tag, double value) override { log_impl (tag, value); }
26- void log (LogEvent tag, Idx value) override { log_impl (tag, value); }
27- void registrar (Logger* logger) override {
28- if (logger != nullptr && std::ranges::find (loggers_, logger) == loggers_.end ()) {
29- loggers_.push_back (logger);
30- }
31- }
32- void deregistrar (Logger* logger) override {
33- if (logger != nullptr ) {
34- std::erase (loggers_, logger);
35- }
36- }
37- std::unique_ptr<Logger> clone () const override { return std::make_unique<LogDispatcher>(); }
38-
39- LogDispatcher () = default ;
40- LogDispatcher (const LogDispatcher&) = delete ;
41- LogDispatcher& operator =(const LogDispatcher&) = delete ;
42- LogDispatcher (LogDispatcher&&) = default ;
43- LogDispatcher& operator =(LogDispatcher&&) = default ;
44- ~LogDispatcher () override = default ;
45-
46- private:
47- std::vector<Logger*> loggers_;
48-
49- template <typename ... T>
50- constexpr void log_impl (LogEvent tag, T&&... values)
51- requires requires(Logger log_) {
52- { log_.log (tag, values...) };
53- }
54- {
55- if (loggers_.size () == 1 && loggers_.front () != nullptr ) { // allows perfect forwarding to log messages
56- loggers_.front ()->log (tag, std::forward<T>(values)...);
57- } else {
58- for (auto & logger : loggers_) {
59- if (logger != nullptr ) {
60- logger->log (tag, values...);
61- }
62- }
63- capturing::into_the_void (std::forward<T>(values)...);
64- }
65- }
66- };
67-
6821} // namespace power_grid_model::common::logging
0 commit comments