diff --git a/include/spdlog/sinks/dist_sink.h b/include/spdlog/sinks/dist_sink.h index 0e7cfc1e..4c0e00f2 100644 --- a/include/spdlog/sinks/dist_sink.h +++ b/include/spdlog/sinks/dist_sink.h @@ -12,9 +12,10 @@ #include #include -#include #include +// Distribution sink (mux). Stores a vector of sinks which get called when log is called + namespace spdlog { namespace sinks @@ -29,40 +30,33 @@ public: virtual ~dist_sink() = default; protected: + std::vector> _sinks; + void _sink_it(const details::log_msg& msg) override { - for (auto iter = _sinks.begin(); iter != _sinks.end(); iter++) - (*iter)->log(msg); + for (auto &sink : _sinks) + sink->log(msg); } - - std::vector> _sinks; + public: void flush() override { - std::lock_guard lock(base_sink::_mutex); - for (auto iter = _sinks.begin(); iter != _sinks.end(); iter++) - (*iter)->flush(); + std::lock_guard lock(_mutex); + for (auto &sink : _sinks) + sink->flush(); } void add_sink(std::shared_ptr sink) - { - std::lock_guard lock(base_sink::_mutex); - if (sink && - _sinks.end() == std::find(_sinks.begin(), _sinks.end(), sink)) - { - _sinks.push_back(sink); - } + { + std::lock_guard lock(_mutex); + _sinks.push_back(sink); } void remove_sink(std::shared_ptr sink) { - std::lock_guard lock(base_sink::_mutex); - auto pos = std::find(_sinks.begin(), _sinks.end(), sink); - if (pos != _sinks.end()) - { - _sinks.erase(pos); - } + std::lock_guard lock(_mutex); + _sinks.erase(std::remove(_sinks.begin(), _sinks.end(), sink), _sinks.end()); } };