diff options
author | thegeorg <thegeorg@yandex-team.com> | 2022-08-21 01:48:26 +0300 |
---|---|---|
committer | thegeorg <thegeorg@yandex-team.com> | 2022-08-21 01:48:26 +0300 |
commit | 6cc0b91261bafbdec4fee7207bae49b5dc6411d5 (patch) | |
tree | f8a99f0241697a99d4e5c214b86dc562833231e7 /util | |
parent | fd1dea8b14adddfe75164e3aef56bde0a12b9a43 (diff) | |
download | ydb-6cc0b91261bafbdec4fee7207bae49b5dc6411d5.tar.gz |
Switch TString and TStringBase to std::reverse_iterator
At the time an attempt to use e. g. `std::find_if` with `TString::rbegin()` / `TString::rend()` does not compile against `-DUSE_STL_SYSTEM` / modern libstdc++.
Diffstat (limited to 'util')
-rw-r--r-- | util/generic/strbase.h | 55 | ||||
-rw-r--r-- | util/generic/string.h | 2 | ||||
-rw-r--r-- | util/generic/string_ut.h | 8 |
3 files changed, 9 insertions, 56 deletions
diff --git a/util/generic/strbase.h b/util/generic/strbase.h index 08824943b1..86e5c0f2f2 100644 --- a/util/generic/strbase.h +++ b/util/generic/strbase.h @@ -51,60 +51,7 @@ public: using const_iterator = const TCharType*; using const_reference = const TCharType&; - template <typename TBase> - struct TReverseIteratorBase { - constexpr TReverseIteratorBase() noexcept = default; - explicit constexpr TReverseIteratorBase(TBase p) - : P_(p) - { - } - - TReverseIteratorBase operator++() noexcept { - --P_; - return *this; - } - - TReverseIteratorBase operator++(int) noexcept { - TReverseIteratorBase old(*this); - --P_; - return old; - } - - TReverseIteratorBase& operator--() noexcept { - ++P_; - return *this; - } - - TReverseIteratorBase operator--(int) noexcept { - TReverseIteratorBase old(*this); - ++P_; - return old; - } - - constexpr auto operator*() const noexcept -> std::remove_pointer_t<TBase>& { - return *TBase(*this); - } - - explicit constexpr operator TBase() const noexcept { - return TBase(P_ - 1); - } - - constexpr auto operator-(const TReverseIteratorBase o) const noexcept { - return o.P_ - P_; - } - - constexpr bool operator==(const TReverseIteratorBase o) const noexcept { - return P_ == o.P_; - } - - constexpr bool operator!=(const TReverseIteratorBase o) const noexcept { - return !(*this == o); - } - - private: - TBase P_ = nullptr; - }; - using const_reverse_iterator = TReverseIteratorBase<const_iterator>; + using const_reverse_iterator = std::reverse_iterator<const_iterator>; static constexpr size_t StrLen(const TCharType* s) noexcept { if (Y_LIKELY(s)) { diff --git a/util/generic/string.h b/util/generic/string.h index 5f56954481..fd3c771749 100644 --- a/util/generic/string.h +++ b/util/generic/string.h @@ -175,7 +175,7 @@ public: using traits_type = TTraits; using iterator = TCharType*; - using reverse_iterator = typename TBase::template TReverseIteratorBase<iterator>; + using reverse_iterator = std::reverse_iterator<iterator>; using typename TBase::const_iterator; using typename TBase::const_reference; using typename TBase::const_reverse_iterator; diff --git a/util/generic/string_ut.h b/util/generic/string_ut.h index 44bb10bdeb..3a91f61dd1 100644 --- a/util/generic/string_ut.h +++ b/util/generic/string_ut.h @@ -906,7 +906,7 @@ public: s2.assign(Data._0123456(), 2, 2); UNIT_ASSERT(s2 == Data._23()); - //s2.reserve(); + // s2.reserve(); TStringType s5(Data.abcde()); s5.clear(); @@ -1152,5 +1152,11 @@ public: *ritBegin = (ui8)'e'; UNIT_ASSERT_VALUES_EQUAL(*ritBegin, (ui8)'e'); + + str = chars; + auto it = std::find_if( + str.rbegin(), str.rend(), + [](char_type c) { return c == 'o'; }); + UNIT_ASSERT_EQUAL(it, str.rbegin()); } }; |