From 15ef6042d4ac1385dcdee316795bc76d02afb260 Mon Sep 17 00:00:00 2001 From: Bailey Chittle Date: Fri, 10 Mar 2023 11:19:45 -0500 Subject: [PATCH] overloads that work --- include/spdlog/details/log_attr.h | 98 ++++++++++++++++++++++++------- 1 file changed, 77 insertions(+), 21 deletions(-) diff --git a/include/spdlog/details/log_attr.h b/include/spdlog/details/log_attr.h index 6eef1933..0d2a368f 100644 --- a/include/spdlog/details/log_attr.h +++ b/include/spdlog/details/log_attr.h @@ -17,38 +17,94 @@ struct attr std::string value; public: - attr(std::initializer_list l) + // string overloads + attr(string_view_t k, string_view_t v) { - if (l.size() != 2) - return; // throw exception if not kv pair? - - scramble(key, *l.begin()); - scramble(value, *(l.begin() + 1)); + scramble(key, k); + scramble(value, v); } + // does not convert to string_view when using initializer list constructors... + // so we have an overload for raw c-strings + attr(const char* k, const char* v) + : attr{string_view_t{k}, string_view_t{v}} + {} + + attr(std::string const& k, std::string const& v) + : attr{string_view_t{k}, string_view_t{v}} + {} + + attr(std::string&& k, std::string&& v) + : attr{string_view_t{k}, string_view_t{v}} + {} + + // integer overloads + attr(string_view_t k, long v) + : value{std::to_string(v)} + { + scramble(key, k); + } + attr(string_view_t k, long long v) + : value{std::to_string(v)} + { + scramble(key, k); + } + attr(string_view_t k, unsigned long v) + : value{std::to_string(v)} + { + scramble(key, k); + } + attr(string_view_t k, unsigned long long v) + : value{std::to_string(v)} + { + scramble(key, k); + } + attr(string_view_t k, bool v) : value{v ? "true" : "false"} { - key = std::string{k.data(), k.size()}; + scramble(key, k); } + + attr(std::string const& k, long v) + : attr{string_view_t{k}, v} + {} - attr(string_view_t k, string_view_t v) - { - key = std::string{k.data(), k.size()}; - value = std::string{v.data(), v.size()}; - } + attr(std::string const& k, long long v) + : attr{string_view_t{k}, v} + {} - attr(std::string k, std::string v) - : key{k} - , value{v} + attr(std::string const& k, unsigned long v) + : attr{string_view_t{k}, v} {} - template || std::is_floating_point_v, bool> = true> - attr(string_view_t k, T v) - : value{std::to_string(v)} - { - key = std::string{k.data(), k.size()}; - } + attr(std::string const& k, unsigned long long v) + : attr{string_view_t{k}, v} + {} + + attr(std::string const& k, bool v) + : attr{string_view_t{k}, v} + {} + + attr(std::string&& k, long v) + : attr{string_view_t{k}, v} + {} + + attr(std::string&& k, long long v) + : attr{string_view_t{k}, v} + {} + + attr(std::string&& k, unsigned long v) + : attr{string_view_t{k}, v} + {} + + attr(std::string&& k, unsigned long long v) + : attr{string_view_t{k}, v} + {} + + attr(std::string&& k, bool v) + : attr{string_view_t{k}, v} + {} }; } // namespace details