diff options
author | thegeorg <[email protected]> | 2022-02-10 16:45:12 +0300 |
---|---|---|
committer | Daniil Cherednik <[email protected]> | 2022-02-10 16:45:12 +0300 |
commit | 49116032d905455a7b1c994e4a696afc885c1e71 (patch) | |
tree | be835aa92c6248212e705f25388ebafcf84bc7a1 /util/string/join.h | |
parent | 4e839db24a3bbc9f1c610c43d6faaaa99824dcca (diff) |
Restoring authorship annotation for <[email protected]>. Commit 2 of 2.
Diffstat (limited to 'util/string/join.h')
-rw-r--r-- | util/string/join.h | 180 |
1 files changed, 90 insertions, 90 deletions
diff --git a/util/string/join.h b/util/string/join.h index c96dc5132a9..b166fad1f3b 100644 --- a/util/string/join.h +++ b/util/string/join.h @@ -19,26 +19,26 @@ * For standard types (strings of all kinds and arithmetic types) we don't use a temporary TString in AppendToString(). */ -template <typename TCharType, typename T> +template <typename TCharType, typename T> inline std::enable_if_t<!std::is_arithmetic<std::remove_cv_t<T>>::value, void> -AppendToString(TBasicString<TCharType>& dst, const T& t) { +AppendToString(TBasicString<TCharType>& dst, const T& t) { dst.AppendNoAlias(ToString(t)); } -template <typename TCharType, typename T> +template <typename TCharType, typename T> inline std::enable_if_t<std::is_arithmetic<std::remove_cv_t<T>>::value, void> -AppendToString(TBasicString<TCharType>& dst, const T& t) { +AppendToString(TBasicString<TCharType>& dst, const T& t) { char buf[512]; dst.append(buf, ToString<std::remove_cv_t<T>>(t, buf, sizeof(buf))); } -template <typename TCharType> -inline void AppendToString(TBasicString<TCharType>& dst, const TCharType* t) { +template <typename TCharType> +inline void AppendToString(TBasicString<TCharType>& dst, const TCharType* t) { dst.append(t); } -template <typename TCharType> -inline void AppendToString(TBasicString<TCharType>& dst, TBasicStringBuf<TCharType> t) { +template <typename TCharType> +inline void AppendToString(TBasicString<TCharType>& dst, TBasicStringBuf<TCharType> t) { dst.append(t); } @@ -75,12 +75,12 @@ namespace NPrivate { } } -template <typename TCharType> -inline void AppendJoinNoReserve(TBasicString<TCharType>&, TBasicStringBuf<TCharType>) { +template <typename TCharType> +inline void AppendJoinNoReserve(TBasicString<TCharType>&, TBasicStringBuf<TCharType>) { } -template <typename TCharType, typename TFirst, typename... TRest> -inline void AppendJoinNoReserve(TBasicString<TCharType>& dst, TBasicStringBuf<TCharType> delim, const TFirst& f, const TRest&... r) { +template <typename TCharType, typename TFirst, typename... TRest> +inline void AppendJoinNoReserve(TBasicString<TCharType>& dst, TBasicStringBuf<TCharType> delim, const TFirst& f, const TRest&... r) { AppendToString(dst, delim); AppendToString(dst, f); AppendJoinNoReserve(dst, delim, r...); @@ -110,93 +110,93 @@ inline TString Join(char cdelim, const TValues&... v) { return Join(TStringBuf(&cdelim, 1), v...); } -namespace NPrivate { - template <typename TCharType, typename TIter> - inline TBasicString<TCharType> JoinRange(TBasicStringBuf<TCharType> delim, const TIter beg, const TIter end) { - TBasicString<TCharType> out; - if (beg != end) { - size_t total = ::NPrivate::GetLength(*beg); - for (TIter pos = beg; ++pos != end;) { - total += delim.length() + ::NPrivate::GetLength(*pos); - } - if (total > 0) { - out.reserve(total); - } - - AppendToString(out, *beg); - for (TIter pos = beg; ++pos != end;) { - AppendJoinNoReserve(out, delim, *pos); - } +namespace NPrivate { + template <typename TCharType, typename TIter> + inline TBasicString<TCharType> JoinRange(TBasicStringBuf<TCharType> delim, const TIter beg, const TIter end) { + TBasicString<TCharType> out; + if (beg != end) { + size_t total = ::NPrivate::GetLength(*beg); + for (TIter pos = beg; ++pos != end;) { + total += delim.length() + ::NPrivate::GetLength(*pos); + } + if (total > 0) { + out.reserve(total); + } + + AppendToString(out, *beg); + for (TIter pos = beg; ++pos != end;) { + AppendJoinNoReserve(out, delim, *pos); + } } - return out; + return out; } -} // namespace NPrivate - -template <typename TIter> -TString JoinRange(std::string_view delim, const TIter beg, const TIter end) { - return ::NPrivate::JoinRange<char>(delim, beg, end); -} - -template <typename TIter> -TString JoinRange(char delim, const TIter beg, const TIter end) { - TStringBuf delimBuf(&delim, 1); - return ::NPrivate::JoinRange<char>(delimBuf, beg, end); -} - -template <typename TIter> -TUtf16String JoinRange(std::u16string_view delim, const TIter beg, const TIter end) { - return ::NPrivate::JoinRange<wchar16>(delim, beg, end); -} - -template <typename TIter> -TUtf16String JoinRange(wchar16 delim, const TIter beg, const TIter end) { - TWtringBuf delimBuf(&delim, 1); - return ::NPrivate::JoinRange<wchar16>(delimBuf, beg, end); -} - -template <typename TIter> -TUtf32String JoinRange(std::u32string_view delim, const TIter beg, const TIter end) { - return ::NPrivate::JoinRange<wchar32>(delim, beg, end); -} - -template <typename TIter> -TUtf32String JoinRange(wchar32 delim, const TIter beg, const TIter end) { - TUtf32StringBuf delimBuf(&delim, 1); - return ::NPrivate::JoinRange<wchar32>(delimBuf, beg, end); -} - -template <typename TCharType, typename TContainer> -inline TBasicString<TCharType> JoinSeq(std::basic_string_view<TCharType> delim, const TContainer& data) { +} // namespace NPrivate + +template <typename TIter> +TString JoinRange(std::string_view delim, const TIter beg, const TIter end) { + return ::NPrivate::JoinRange<char>(delim, beg, end); +} + +template <typename TIter> +TString JoinRange(char delim, const TIter beg, const TIter end) { + TStringBuf delimBuf(&delim, 1); + return ::NPrivate::JoinRange<char>(delimBuf, beg, end); +} + +template <typename TIter> +TUtf16String JoinRange(std::u16string_view delim, const TIter beg, const TIter end) { + return ::NPrivate::JoinRange<wchar16>(delim, beg, end); +} + +template <typename TIter> +TUtf16String JoinRange(wchar16 delim, const TIter beg, const TIter end) { + TWtringBuf delimBuf(&delim, 1); + return ::NPrivate::JoinRange<wchar16>(delimBuf, beg, end); +} + +template <typename TIter> +TUtf32String JoinRange(std::u32string_view delim, const TIter beg, const TIter end) { + return ::NPrivate::JoinRange<wchar32>(delim, beg, end); +} + +template <typename TIter> +TUtf32String JoinRange(wchar32 delim, const TIter beg, const TIter end) { + TUtf32StringBuf delimBuf(&delim, 1); + return ::NPrivate::JoinRange<wchar32>(delimBuf, beg, end); +} + +template <typename TCharType, typename TContainer> +inline TBasicString<TCharType> JoinSeq(std::basic_string_view<TCharType> delim, const TContainer& data) { using std::begin; using std::end; return JoinRange(delim, begin(data), end(data)); } -template <typename TCharType, typename TContainer> -inline TBasicString<TCharType> JoinSeq(const TCharType* delim, const TContainer& data) { - TBasicStringBuf<TCharType> delimBuf = delim; - return JoinSeq(delimBuf, data); -} - -template <typename TCharType, typename TContainer> -inline TBasicString<TCharType> JoinSeq(const TBasicString<TCharType>& delim, const TContainer& data) { - TBasicStringBuf<TCharType> delimBuf = delim; - return JoinSeq(delimBuf, data); -} - -template <typename TCharType, typename TContainer> -inline std::enable_if_t< - std::is_same_v<TCharType, char> || - std::is_same_v<TCharType, char16_t> || - std::is_same_v<TCharType, char32_t>, - TBasicString<TCharType>> -JoinSeq(TCharType delim, const TContainer& data) { - TBasicStringBuf<TCharType> delimBuf(&delim, 1); - return JoinSeq(delimBuf, data); -} - +template <typename TCharType, typename TContainer> +inline TBasicString<TCharType> JoinSeq(const TCharType* delim, const TContainer& data) { + TBasicStringBuf<TCharType> delimBuf = delim; + return JoinSeq(delimBuf, data); +} + +template <typename TCharType, typename TContainer> +inline TBasicString<TCharType> JoinSeq(const TBasicString<TCharType>& delim, const TContainer& data) { + TBasicStringBuf<TCharType> delimBuf = delim; + return JoinSeq(delimBuf, data); +} + +template <typename TCharType, typename TContainer> +inline std::enable_if_t< + std::is_same_v<TCharType, char> || + std::is_same_v<TCharType, char16_t> || + std::is_same_v<TCharType, char32_t>, + TBasicString<TCharType>> +JoinSeq(TCharType delim, const TContainer& data) { + TBasicStringBuf<TCharType> delimBuf(&delim, 1); + return JoinSeq(delimBuf, data); +} + /** \brief Functor for streaming iterative objects from TIterB e to TIterE b, separated with delim. * Difference from JoinSeq, JoinRange, Join is the lack of TString object - all depends on operator<< for the type and * realization of IOutputStream |