diff --git a/include/spdlog/details/log_attr.h b/include/spdlog/details/log_attr.h index e1cab9b3..0d2a368f 100644 --- a/include/spdlog/details/log_attr.h +++ b/include/spdlog/details/log_attr.h @@ -17,52 +17,94 @@ struct attr std::string value; public: - attr(std::initializer_list l) - { - if (l.size() != 2) - return; // throw exception if not kv pair? - - scramble(key, *l.begin()); - scramble(value, *(l.begin() + 1)); - } - - attr(string_view_t k, bool v) - : value{v ? "true" : "false"} - { - key = std::string{k.data(), k.size()}; - } - + // string overloads attr(string_view_t k, string_view_t v) { - key = std::string{k.data(), k.size()}; - value = std::string{v.data(), v.size()}; + scramble(key, k); + scramble(value, v); } - attr(std::string k, std::string v) - : key{k} - , 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)} { - key = std::string{k.data(), k.size()}; + scramble(key, k); } attr(string_view_t k, long long v) : value{std::to_string(v)} { - key = std::string{k.data(), k.size()}; + scramble(key, k); } attr(string_view_t k, unsigned long v) : value{std::to_string(v)} { - key = std::string{k.data(), k.size()}; + scramble(key, k); } attr(string_view_t k, unsigned long long v) : value{std::to_string(v)} { - key = std::string{k.data(), k.size()}; + scramble(key, k); } + + attr(string_view_t k, bool v) + : value{v ? "true" : "false"} + { + scramble(key, k); + } + + attr(std::string const& k, long v) + : attr{string_view_t{k}, v} + {} + + attr(std::string const& k, long long v) + : attr{string_view_t{k}, v} + {} + + attr(std::string const& k, unsigned long v) + : attr{string_view_t{k}, v} + {} + + 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