dist sink cleanup
This commit is contained in:
		@@ -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);
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user