From 894438d5fbeaf471b71554e41fd4137ecd162651 Mon Sep 17 00:00:00 2001 From: gabime Date: Sun, 21 Oct 2018 12:46:58 +0300 Subject: [PATCH] Better support for string_view --- include/spdlog/common.h | 7 +++++++ include/spdlog/details/fmt_helper.h | 6 +++--- include/spdlog/details/log_msg.h | 4 ++-- include/spdlog/details/pattern_formatter.h | 3 ++- include/spdlog/details/thread_pool.h | 2 +- 5 files changed, 15 insertions(+), 7 deletions(-) diff --git a/include/spdlog/common.h b/include/spdlog/common.h index b6147346..0346471a 100644 --- a/include/spdlog/common.h +++ b/include/spdlog/common.h @@ -56,6 +56,13 @@ using sink_ptr = std::shared_ptr; using sinks_init_list = std::initializer_list; using log_err_handler = std::function; +// string_view type - either std::string_view or fmt::string_view (pre c++17) +#if defined(FMT_USE_STD_STRING_VIEW) +using string_view_type = std::string_view; +#else +using string_view_type = fmt::string_view; +#endif + #if defined(SPDLOG_NO_ATOMIC_LEVELS) using level_t = details::null_atomic_int; #else diff --git a/include/spdlog/details/fmt_helper.h b/include/spdlog/details/fmt_helper.h index 5ad979df..45dceb29 100644 --- a/include/spdlog/details/fmt_helper.h +++ b/include/spdlog/details/fmt_helper.h @@ -14,9 +14,9 @@ namespace details { namespace fmt_helper { template -inline fmt::string_view to_string_view(const fmt::basic_memory_buffer &buf) SPDLOG_NOEXCEPT +inline spdlog::string_view_type to_string_view(const fmt::basic_memory_buffer &buf) SPDLOG_NOEXCEPT { - return fmt::string_view(buf.data(), buf.size()); + return spdlog::string_view_type(buf.data(), buf.size()); } template inline void append_buf(const fmt::basic_memory_buffer &buf, fmt::basic_memory_buffer &dest) @@ -26,7 +26,7 @@ inline void append_buf(const fmt::basic_memory_buffer &buf, } template -inline void append_string_view(fmt::string_view view, fmt::basic_memory_buffer &dest) +inline void append_string_view(spdlog::string_view_type view, fmt::basic_memory_buffer &dest) { auto *buf_ptr = view.data(); if (buf_ptr != nullptr) diff --git a/include/spdlog/details/log_msg.h b/include/spdlog/details/log_msg.h index 8cd51f08..122eabf0 100644 --- a/include/spdlog/details/log_msg.h +++ b/include/spdlog/details/log_msg.h @@ -17,7 +17,7 @@ struct log_msg { log_msg() = default; - log_msg(const std::string *loggers_name, level::level_enum lvl, fmt::string_view view) + log_msg(const std::string *loggers_name, level::level_enum lvl, string_view_type view) : logger_name(loggers_name) , level(lvl) #ifndef SPDLOG_NO_DATETIME @@ -44,7 +44,7 @@ struct log_msg mutable size_t color_range_start{0}; mutable size_t color_range_end{0}; - const fmt::string_view payload; + const string_view_type payload; }; } // namespace details } // namespace spdlog diff --git a/include/spdlog/details/pattern_formatter.h b/include/spdlog/details/pattern_formatter.h index 86833c7e..f80a18c5 100644 --- a/include/spdlog/details/pattern_formatter.h +++ b/include/spdlog/details/pattern_formatter.h @@ -39,7 +39,7 @@ class name_formatter : public flag_formatter void format(const details::log_msg &msg, const std::tm &, fmt::memory_buffer &dest) override { // fmt_helper::append_str(*msg.logger_name, dest); - fmt_helper::append_string_view(*msg.logger_name, dest); + fmt_helper::append_string_view(string_view_type(*msg.logger_name), dest); } }; @@ -49,6 +49,7 @@ class level_formatter : public flag_formatter void format(const details::log_msg &msg, const std::tm &, fmt::memory_buffer &dest) override { // fmt_helper::append_string_view(level::to_c_str(msg.level), dest); + spdlog::string_view_type t("SSSSSSS"); fmt_helper::append_string_view(level::to_c_str(msg.level), dest); } }; diff --git a/include/spdlog/details/thread_pool.h b/include/spdlog/details/thread_pool.h index 2743fd1e..4b774652 100644 --- a/include/spdlog/details/thread_pool.h +++ b/include/spdlog/details/thread_pool.h @@ -94,7 +94,7 @@ struct async_msg // copy into log_msg log_msg to_log_msg() { - log_msg msg(&worker_ptr->name(), level, fmt::string_view(raw.data(), raw.size())); + log_msg msg(&worker_ptr->name(), level, string_view_type(raw.data(), raw.size())); msg.time = time; msg.thread_id = thread_id; msg.msg_id = msg_id;