#pragma once #include #include #include #include "isink.h" #include "../formatter.h" #include "../common_types.h" #include "../details/log_msg.h" namespace c11log { namespace sinks { template class base_sink:public isink { public: base_sink():_mutex(), _enabled(true) {} virtual ~base_sink() = default; base_sink(const base_sink&) = delete; base_sink& operator=(const base_sink&) = delete; void log(const details::log_msg& msg) { if (_enabled) { std::lock_guard lock(_mutex); _sink_it(msg); } }; void enable(bool enabled) { _enabled = enabled; } bool is_enabled() { return _enabled.load(); } protected: virtual void _sink_it(const details::log_msg& msg) = 0; Mutex _mutex; std::atomic _enabled; }; } }