Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2025-12-17 10:29:02

0001 // Copyright(c) 2015-present, Gabi Melman & spdlog contributors.
0002 // Distributed under the MIT License (http://opensource.org/licenses/MIT)
0003 
0004 #pragma once
0005 
0006 #include <cstdio>
0007 #include <spdlog/details/console_globals.h>
0008 #include <spdlog/details/synchronous_factory.h>
0009 #include <spdlog/sinks/sink.h>
0010 
0011 #ifdef _WIN32
0012     #include <spdlog/details/windows_include.h>
0013 #endif
0014 
0015 namespace spdlog {
0016 
0017 namespace sinks {
0018 
0019 template <typename ConsoleMutex>
0020 class stdout_sink_base : public sink {
0021 public:
0022     using mutex_t = typename ConsoleMutex::mutex_t;
0023     explicit stdout_sink_base(FILE *file);
0024     ~stdout_sink_base() override = default;
0025 
0026     stdout_sink_base(const stdout_sink_base &other) = delete;
0027     stdout_sink_base(stdout_sink_base &&other) = delete;
0028 
0029     stdout_sink_base &operator=(const stdout_sink_base &other) = delete;
0030     stdout_sink_base &operator=(stdout_sink_base &&other) = delete;
0031 
0032     void log(const details::log_msg &msg) override;
0033     void flush() override;
0034     void set_pattern(const std::string &pattern) override;
0035 
0036     void set_formatter(std::unique_ptr<spdlog::formatter> sink_formatter) override;
0037 
0038 protected:
0039     mutex_t &mutex_;
0040     FILE *file_;
0041     std::unique_ptr<spdlog::formatter> formatter_;
0042 #ifdef _WIN32
0043     HANDLE handle_;
0044 #endif  // WIN32
0045 };
0046 
0047 template <typename ConsoleMutex>
0048 class stdout_sink : public stdout_sink_base<ConsoleMutex> {
0049 public:
0050     stdout_sink();
0051 };
0052 
0053 template <typename ConsoleMutex>
0054 class stderr_sink : public stdout_sink_base<ConsoleMutex> {
0055 public:
0056     stderr_sink();
0057 };
0058 
0059 using stdout_sink_mt = stdout_sink<details::console_mutex>;
0060 using stdout_sink_st = stdout_sink<details::console_nullmutex>;
0061 
0062 using stderr_sink_mt = stderr_sink<details::console_mutex>;
0063 using stderr_sink_st = stderr_sink<details::console_nullmutex>;
0064 
0065 }  // namespace sinks
0066 
0067 // factory methods
0068 template <typename Factory = spdlog::synchronous_factory>
0069 std::shared_ptr<logger> stdout_logger_mt(const std::string &logger_name);
0070 
0071 template <typename Factory = spdlog::synchronous_factory>
0072 std::shared_ptr<logger> stdout_logger_st(const std::string &logger_name);
0073 
0074 template <typename Factory = spdlog::synchronous_factory>
0075 std::shared_ptr<logger> stderr_logger_mt(const std::string &logger_name);
0076 
0077 template <typename Factory = spdlog::synchronous_factory>
0078 std::shared_ptr<logger> stderr_logger_st(const std::string &logger_name);
0079 
0080 }  // namespace spdlog
0081 
0082 #ifdef SPDLOG_HEADER_ONLY
0083     #include "stdout_sinks-inl.h"
0084 #endif