diff options
author | melkov <melkov@yandex-team.com> | 2024-08-01 21:25:27 +0300 |
---|---|---|
committer | melkov <melkov@yandex-team.com> | 2024-08-01 21:37:34 +0300 |
commit | 5b40c9f2b99b0d27c33d6dba1a064821e0134b5d (patch) | |
tree | d893e54863861072bc784aaf350e90aee313f5b6 /library | |
parent | 6a72de53917646d5eb6bb156ab672ec2de853947 (diff) | |
download | ydb-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')
-rw-r--r-- | library/cpp/yt/memory/range.h | 48 | ||||
-rw-r--r-- | library/cpp/yt/memory/ref-inl.h | 2 | ||||
-rw-r--r-- | library/cpp/yt/memory/shared_range.h | 2 |
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)); } |