aboutsummaryrefslogtreecommitdiffstats
path: root/library/cpp
diff options
context:
space:
mode:
authormelkov <melkov@yandex-team.com>2024-08-01 21:25:27 +0300
committermelkov <melkov@yandex-team.com>2024-08-01 21:37:34 +0300
commit5b40c9f2b99b0d27c33d6dba1a064821e0134b5d (patch)
treed893e54863861072bc784aaf350e90aee313f5b6 /library/cpp
parent6a72de53917646d5eb6bb156ab672ec2de853947 (diff)
downloadydb-5b40c9f2b99b0d27c33d6dba1a064821e0134b5d.tar.gz
YT-22414: Prepare to use TRange constructor directly instead of MakeRange
* Also the same for TMutableRange. * Add TRange, TMutableRange constructor from std::span. 46da1787e68a922bb65181c63a226a3797edae0b
Diffstat (limited to 'library/cpp')
-rw-r--r--library/cpp/yt/memory/range.h48
-rw-r--r--library/cpp/yt/memory/ref-inl.h2
-rw-r--r--library/cpp/yt/memory/shared_range.h2
3 files changed, 48 insertions, 4 deletions
diff --git a/library/cpp/yt/memory/range.h b/library/cpp/yt/memory/range.h
index 7a9c0bcd79..232de3baa1 100644
--- a/library/cpp/yt/memory/range.h
+++ b/library/cpp/yt/memory/range.h
@@ -4,10 +4,11 @@
#include <library/cpp/yt/misc/hash.h>
-#include <vector>
#include <array>
-#include <optional>
#include <initializer_list>
+#include <optional>
+#include <span>
+#include <vector>
// For size_t.
#include <stddef.h>
@@ -91,6 +92,12 @@ public:
, Length_(elements.size())
{ }
+ //! Constructs a TRange from an std::span.
+ TRange(const std::span<T>& elements)
+ : Data_(elements.data())
+ , Length_(elements.size())
+ { }
+
//! Constructs a TRange from a C array.
template <size_t N>
TRange(const T (&elements)[N])
@@ -118,6 +125,19 @@ public:
, Length_(element ? 1 : 0)
{ }
+ //! Constructs a TRange from RepeatedField.
+ TRange(const google::protobuf::RepeatedField<T>& elements)
+ : Data_(elements.data())
+ , Length_(elements.size())
+ { }
+
+ //! Constructs a TRange from RepeatedPtrField.
+ template<class TPointed>
+ TRange(const google::protobuf::RepeatedPtrField<TPointed>& elements)
+ : Data_(elements.data())
+ , Length_(elements.size())
+ { }
+
const_iterator Begin() const
{
return Data_;
@@ -228,6 +248,10 @@ typename TRange<T>::const_iterator end(TRange<T> ref)
return ref.End();
}
+// Deduction guide for the constructor from RepeatedPtrField.
+template<class TPointed>
+TRange(const google::protobuf::RepeatedPtrField<TPointed>& elements) -> TRange<const TPointed*>;
+
////////////////////////////////////////////////////////////////////////////////
//! Constructs a TRange from a pointer and length.
@@ -348,6 +372,11 @@ public:
: TRange<T>(elements)
{ }
+ //! Constructs a TMutableRange from an std::span.
+ TMutableRange(std::span<T>& elements)
+ : TRange<T>(elements)
+ { }
+
//! Constructs a TMutableRange from std::array.
template <size_t N>
TMutableRange(std::array<T, N>& elements)
@@ -366,6 +395,17 @@ public:
: TRange<T>(elements)
{ }
+ //! Constructs a TMutableRange from RepeatedField.
+ TMutableRange(google::protobuf::RepeatedField<T>& elements)
+ : TRange<T>(elements)
+ { }
+
+ //! Constructs a TMutableRange from RepeatedPtrField.
+ template<class TPointed>
+ TMutableRange(google::protobuf::RepeatedPtrField<TPointed>& elements)
+ : TRange<T>(elements)
+ { }
+
using TRange<T>::Begin;
using TRange<T>::End;
using TRange<T>::Front;
@@ -439,6 +479,10 @@ typename TMutableRange<T>::iterator end(TMutableRange<T> ref)
return ref.End();
}
+// Deduction guide for the constructor from RepeatedPtrField.
+template<class TPointed>
+TMutableRange(google::protobuf::RepeatedPtrField<TPointed>& elements) -> TMutableRange<TPointed*>;
+
////////////////////////////////////////////////////////////////////////////////
//! Constructs a TMutableRange from a pointer and length.
diff --git a/library/cpp/yt/memory/ref-inl.h b/library/cpp/yt/memory/ref-inl.h
index 14b21903c0..c575696382 100644
--- a/library/cpp/yt/memory/ref-inl.h
+++ b/library/cpp/yt/memory/ref-inl.h
@@ -256,7 +256,7 @@ size_t GetByteSize(TRange<T> parts)
template <class T>
size_t GetByteSize(const std::vector<T>& parts)
{
- return GetByteSize(MakeRange(parts));
+ return GetByteSize(TRange(parts));
}
////////////////////////////////////////////////////////////////////////////////
diff --git a/library/cpp/yt/memory/shared_range.h b/library/cpp/yt/memory/shared_range.h
index de5fc354ea..113378670a 100644
--- a/library/cpp/yt/memory/shared_range.h
+++ b/library/cpp/yt/memory/shared_range.h
@@ -191,7 +191,7 @@ TSharedRange<T> DoMakeSharedRange(TContainer&& elements, THolders&&... holders)
holder->Holders = std::tuple<THolders...>(std::forward<THolders>(holders)...);
holder->Elements = std::forward<TContainer>(elements);
- auto range = MakeRange<T>(holder->Elements);
+ auto range = TRange<T>(holder->Elements);
return TSharedRange<T>(range, std::move(holder));
}