19namespace strings_internal
22inline void AppendPieces(std::string* dest,
23 std::initializer_list<std::string_view> pieces)
26 for(
const auto& piece : pieces)
30 dest->reserve(dest->size() + size);
31 for(
const auto& piece : pieces)
33 dest->append(piece.data(), piece.size());
37inline std::string CatPieces(std::initializer_list<std::string_view> pieces)
40 AppendPieces(&out, std::move(pieces));
46inline std::string StrCat()
51inline std::string StrCat(
const std::string_view& a)
53 return std::string(a.data(), a.size());
56inline std::string StrCat(
const std::string_view& a,
const std::string_view& b)
58 return strings_internal::CatPieces({ a, b });
61inline std::string StrCat(
const std::string_view& a,
const std::string_view& b,
62 const std::string_view& c)
64 return strings_internal::CatPieces({ a, b, c });
68template <
typename... AV>
69inline std::string StrCat(
const std::string_view& a,
const std::string_view& b,
70 const std::string_view& c,
const std::string_view& d,
73 return strings_internal::CatPieces(
74 { a, b, c, d,
static_cast<
const std::string_view&>(args)... });
79inline void StrAppend(std::string* destination,
const std::string_view& a)
81 destination->append(a.data(), a.size());
84inline void StrAppend(std::string* destination,
const std::string_view& a,
85 const std::string_view& b)
87 strings_internal::AppendPieces(destination, { a, b });
90inline void StrAppend(std::string* destination,
const std::string_view& a,
91 const std::string_view& b,
const std::string_view& c)
93 strings_internal::AppendPieces(destination, { a, b, c });
97template <
typename... AV>
98inline void StrAppend(std::string* destination,
const std::string_view& a,
99 const std::string_view& b,
const std::string_view& c,
100 const std::string_view& d,
const AV&... args)
102 strings_internal::AppendPieces(
103 destination, { a, b, c, d,
static_cast<
const std::string_view&>(args)... });
Definition: action_node.h:24