diff options
author | Arnur Nigmetov <nigmetov@tugraz.at> | 2019-12-03 21:14:03 +0100 |
---|---|---|
committer | Arnur Nigmetov <nigmetov@tugraz.at> | 2020-02-18 15:02:39 +0100 |
commit | 6942d80c4d49239bca9cace9833aa74aee11ddcb (patch) | |
tree | 59797321de3b11800de28db8a4dc212828d11844 /matching/include/spdlog/sinks/base_sink.h | |
parent | 919f04a0ad3406b9c02fbce3a9a92c03c9e85c94 (diff) |
Add matching distance code.
Diffstat (limited to 'matching/include/spdlog/sinks/base_sink.h')
-rw-r--r-- | matching/include/spdlog/sinks/base_sink.h | 69 |
1 files changed, 69 insertions, 0 deletions
diff --git a/matching/include/spdlog/sinks/base_sink.h b/matching/include/spdlog/sinks/base_sink.h new file mode 100644 index 0000000..2259518 --- /dev/null +++ b/matching/include/spdlog/sinks/base_sink.h @@ -0,0 +1,69 @@ +// +// Copyright(c) 2015 Gabi Melman. +// Distributed under the MIT License (http://opensource.org/licenses/MIT) +// + +#pragma once +// +// base sink templated over a mutex (either dummy or real) +// concrete implementation should override the sink_it_() and flush_() methods. +// locking is taken care of in this class - no locking needed by the +// implementers.. +// + +#include "spdlog/common.h" +#include "spdlog/details/log_msg.h" +#include "spdlog/formatter.h" +#include "spdlog/sinks/sink.h" + +namespace spdlog { +namespace sinks { +template<typename Mutex> +class base_sink : public sink +{ +public: + base_sink() = default; + base_sink(const base_sink &) = delete; + base_sink &operator=(const base_sink &) = delete; + + void log(const details::log_msg &msg) final + { + std::lock_guard<Mutex> lock(mutex_); + sink_it_(msg); + } + + void flush() final + { + std::lock_guard<Mutex> lock(mutex_); + flush_(); + } + + void set_pattern(const std::string &pattern) final + { + std::lock_guard<Mutex> lock(mutex_); + set_pattern_(pattern); + } + + void set_formatter(std::unique_ptr<spdlog::formatter> sink_formatter) final + { + std::lock_guard<Mutex> lock(mutex_); + set_formatter_(std::move(sink_formatter)); + } + +protected: + virtual void sink_it_(const details::log_msg &msg) = 0; + virtual void flush_() = 0; + + virtual void set_pattern_(const std::string &pattern) + { + set_formatter_(details::make_unique<spdlog::pattern_formatter>(pattern)); + } + + virtual void set_formatter_(std::unique_ptr<spdlog::formatter> sink_formatter) + { + formatter_ = std::move(sink_formatter); + } + Mutex mutex_; +}; +} // namespace sinks +} // namespace spdlog |