diff --git a/conversion/stringbuilder.h b/conversion/stringbuilder.h index e8ab834..93b3978 100644 --- a/conversion/stringbuilder.h +++ b/conversion/stringbuilder.h @@ -12,18 +12,18 @@ namespace ConversionUtilities { /// \cond namespace Helper { -template > * = nullptr> std::size_t computeTupleElementSize(const StringType *str) +template > * = nullptr> inline std::size_t computeTupleElementSize(const StringType *str) { return str->size(); } -template > * = nullptr> std::size_t computeTupleElementSize(const StringType &str) +template > * = nullptr> inline std::size_t computeTupleElementSize(const StringType &str) { return str.size(); } template > * = nullptr> -std::size_t computeTupleElementSize(const CharType *str) +constexpr std::size_t computeTupleElementSize(const CharType *str) { return std::char_traits::length(str); } @@ -37,7 +37,7 @@ constexpr std::size_t computeTupleElementSize(CharType) template >, std::is_integral, std::is_unsigned> * = nullptr> -std::size_t computeTupleElementSize(IntegralType number, typename StringType::value_type base = 10) +constexpr std::size_t computeTupleElementSize(IntegralType number, typename StringType::value_type base = 10) { std::size_t size = 0; for (auto n = number; n; n /= base, ++size) @@ -48,7 +48,7 @@ std::size_t computeTupleElementSize(IntegralType number, typename StringType::va template >, std::is_integral, std::is_signed> * = nullptr> -std::size_t computeTupleElementSize(IntegralType number, typename StringType::value_type base = 10) +constexpr std::size_t computeTupleElementSize(IntegralType number, typename StringType::value_type base = 10) { std::size_t size = number < 0 ? 1 : 0; for (auto n = number; n; n /= base, ++size) @@ -56,24 +56,24 @@ std::size_t computeTupleElementSize(IntegralType number, typename StringType::va return size; } -template > * = nullptr> void append(StringType &target, const StringType *str) +template > * = nullptr> inline void append(StringType &target, const StringType *str) { target.append(*str); } -template > * = nullptr> void append(StringType &target, const StringType &str) +template > * = nullptr> inline void append(StringType &target, const StringType &str) { target.append(str); } template > * = nullptr> -void append(StringType &target, const CharType *str) +inline void append(StringType &target, const CharType *str) { target.append(str); } template > * = nullptr> -void append(StringType &target, CharType c) +inline void append(StringType &target, CharType c) { target += c; } @@ -81,7 +81,7 @@ void append(StringType &target, CharType c) template >, std::is_integral, std::is_unsigned> * = nullptr> -void append(StringType &target, IntegralType number, typename StringType::value_type base = 10) +inline void append(StringType &target, IntegralType number, typename StringType::value_type base = 10) { const auto start = target.begin() + target.size(); do { @@ -93,7 +93,7 @@ void append(StringType &target, IntegralType number, typename StringType::value_ template >, std::is_integral, std::is_signed> * = nullptr> -void append(StringType &target, IntegralType number, typename StringType::value_type base = 10) +inline void append(StringType &target, IntegralType number, typename StringType::value_type base = 10) { if (number < 0) { target += '-'; @@ -107,12 +107,12 @@ void append(StringType &target, IntegralType number, typename StringType::value_ } template struct TupleToString { - static std::size_t precomputeSize(const Tuple &tuple) + static inline std::size_t precomputeSize(const Tuple &tuple) { return TupleToString::precomputeSize(tuple) + computeTupleElementSize(std::get(tuple)); } - static void append(const Tuple &tuple, StringType &str) + static inline void append(const Tuple &tuple, StringType &str) { TupleToString::append(tuple, str); Helper::append(str, std::get(tuple)); @@ -120,12 +120,12 @@ template struct TupleToString { }; template struct TupleToString { - static std::size_t precomputeSize(const Tuple &tuple) + static inline std::size_t precomputeSize(const Tuple &tuple) { return computeTupleElementSize(std::get<0>(tuple)); } - static void append(const Tuple &tuple, StringType &str) + static inline void append(const Tuple &tuple, StringType &str) { Helper::append(str, std::get<0>(tuple)); } @@ -136,7 +136,7 @@ template struct TupleToString StringType tupleToString(const std::tuple &tuple) +template inline StringType tupleToString(const std::tuple &tuple) { StringType res; res.reserve(Helper::TupleToString::precomputeSize(tuple)); @@ -144,7 +144,7 @@ template StringType tupleToStrin return res; } -template constexpr StringType argsToString(Args &&... args) +template inline StringType argsToString(Args &&... args) { return tupleToString(std::make_tuple(args...)); }