dist sink cleanup

This commit is contained in:
gabime 2016-08-20 14:52:26 +03:00
parent efc8de6d64
commit c4298a989e
1 changed files with 15 additions and 21 deletions

View File

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