aboutsummaryrefslogtreecommitdiffstats
path: root/util
diff options
context:
space:
mode:
authorthegeorg <thegeorg@yandex-team.com>2022-08-21 01:48:26 +0300
committerthegeorg <thegeorg@yandex-team.com>2022-08-21 01:48:26 +0300
commit6cc0b91261bafbdec4fee7207bae49b5dc6411d5 (patch)
treef8a99f0241697a99d4e5c214b86dc562833231e7 /util
parentfd1dea8b14adddfe75164e3aef56bde0a12b9a43 (diff)
downloadydb-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.h55
-rw-r--r--util/generic/string.h2
-rw-r--r--util/generic/string_ut.h8
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());
}
};