From becd39a20e75f650ba42cca9a6370c591d594a28 Mon Sep 17 00:00:00 2001 From: Remotion Date: Wed, 6 Jun 2018 17:01:16 +0200 Subject: [PATCH] Added format_str_quoted. Moved is_tuple_like and is_range to fmt namespace. --- include/fmt/ranges.h | 60 +++++++++++++++++++++++++++----------------- 1 file changed, 37 insertions(+), 23 deletions(-) diff --git a/include/fmt/ranges.h b/include/fmt/ranges.h index a235ecac..2c04d22a 100644 --- a/include/fmt/ranges.h +++ b/include/fmt/ranges.h @@ -100,11 +100,7 @@ struct is_range_().end())>, void>::type> : std::true_type {}; -template -struct is_range { - static FMT_CONSTEXPR_DECL const bool value = - is_range_::value && !is_like_std_string::value; -}; + /// tuple_size and tuple_element check. template @@ -121,12 +117,6 @@ class is_tuple_like_ { !std::is_void(FMT_NULL))>::value; }; -template -struct is_tuple_like { - static FMT_CONSTEXPR_DECL const bool value = - is_tuple_like_::value && !is_range_::value; -}; - // Check for integer_sequence #if defined(__cpp_lib_integer_sequence) || FMT_MSC_VER >= 1900 template @@ -174,11 +164,36 @@ void for_each(Tuple &&tup, F &&f) { const auto indexes = get_indexes(tup); for_each(indexes, std::forward(tup), std::forward(f)); } + +template +const char* format_str_quoted(bool add_space, const Arg&, typename std::enable_if::value>::type* = 0) { + return add_space ? " {}" : "{}"; +} + +template +const char* format_str_quoted(bool add_space, const Arg&, typename std::enable_if::value>::type* = 0) { + return add_space ? " '{}'" : "'{}'"; +} + +const char* format_str_quoted(bool add_space, const char*) { + return add_space ? " '{}'" : "'{}'"; +} + +const char* format_str_quoted(bool add_space, const char) { + return add_space ? " '{}'" : "'{}'"; +} + } // namespace internal +template +struct is_tuple_like { + static FMT_CONSTEXPR_DECL const bool value = + internal::is_tuple_like_::value && !internal::is_range_::value; +}; + template struct formatter::value>::type> { + typename std::enable_if::value>::type> { private: // C++11 generic lambda for format() template @@ -191,11 +206,7 @@ private: } internal::copy(formatting.delimiter, out); } - if (formatting.add_delimiter_spaces && i > 0) { - format_to(out, " {}", v); - } else { - format_to(out, "{}", v); - } + format_to(out, internal::format_str_quoted((formatting.add_delimiter_spaces && i > 0), v), v); ++i; } @@ -228,9 +239,16 @@ public: } }; + +template +struct is_range { + static FMT_CONSTEXPR_DECL const bool value = + internal::is_range_::value && !internal::is_like_std_string::value; +}; + template struct formatter::value>::type> { + typename std::enable_if::value>::type> { formatting_range formatting; @@ -252,11 +270,7 @@ struct formatter 0) { - format_to(out, " {}", *it); - } else { - format_to(out, "{}", *it); - } + format_to(out, internal::format_str_quoted((formatting.add_delimiter_spaces && i > 0), *it), *it); if (++i > formatting.range_length_limit) { format_to(out, " ... "); break;