diff options
| author | vadim-xd <[email protected]> | 2026-05-19 10:43:11 +0300 |
|---|---|---|
| committer | vadim-xd <[email protected]> | 2026-05-19 11:24:01 +0300 |
| commit | 01de5d42afdaae5348a2ca2e9f47bdf038d29b11 (patch) | |
| tree | a190869e9a836d4be518b1869a29bea970461c17 /library/cpp | |
| parent | fc5b2b4628c15b8189e99c3b45e27c6aaa02c6cf (diff) | |
Add Concat for arbitrary string types
commit_hash:b9f1c87173a18fb59f8cf684191efd4436dd6012
Diffstat (limited to 'library/cpp')
| -rw-r--r-- | library/cpp/containers/cow_string/cow_string.h | 40 |
1 files changed, 4 insertions, 36 deletions
diff --git a/library/cpp/containers/cow_string/cow_string.h b/library/cpp/containers/cow_string/cow_string.h index 0ffea0ac2bf..34dcff81e8a 100644 --- a/library/cpp/containers/cow_string/cow_string.h +++ b/library/cpp/containers/cow_string/cow_string.h @@ -321,44 +321,12 @@ public: } private: - template <typename T> - using TJoinParam = std::conditional_t<std::is_same_v<T, TCharType>, TCharType, TBasicStringBuf<TCharType, TTraits>>; - - template <typename... R> - static size_t SumLength(const TBasicStringBuf<TCharType, TTraits> s1, const R&... r) noexcept { - return s1.size() + SumLength(r...); - } - - template <typename... R> - static size_t SumLength(const TCharType /*s1*/, const R&... r) noexcept { - return 1 + SumLength(r...); - } - - static constexpr size_t SumLength() noexcept { - return 0; - } - - template <typename... R> - static void CopyAll(TCharType* p, const TBasicStringBuf<TCharType, TTraits> s, const R&... r) { - TTraits::copy(p, s.data(), s.size()); - CopyAll(p + s.size(), r...); - } - - template <typename... R, class TNextCharType, typename = std::enable_if_t<std::is_same<TCharType, TNextCharType>::value>> - static void CopyAll(TCharType* p, const TNextCharType s, const R&... r) { - p[0] = s; - CopyAll(p + 1, r...); - } - - static void CopyAll(TCharType*) noexcept { - } + using TJoinHelper = TStringJoinHelper<TCharType, TTraits>; template <typename... R> static inline TBasicCowString JoinImpl(const R&... r) { - TBasicCowString s{TUninitialized{SumLength(r...)}}; - - TBasicCowString::CopyAll((TCharType*)s.data(), r...); - + TBasicCowString s{TUninitialized{TJoinHelper::SumLength(r...)}}; + TJoinHelper::CopyAll((TCharType*)s.data(), r...); return s; } @@ -375,7 +343,7 @@ public: template <typename... R> static inline TBasicCowString Join(const R&... r) { - return JoinImpl(TJoinParam<R>(r)...); + return JoinImpl(typename TJoinHelper::template TJoinParam<R>(r)...); } // ~~~ Assignment ~~~ : FAMILY0(TBasicCowString&, assign); |
