diff options
| author | sabdenovch <[email protected]> | 2026-03-05 17:08:08 +0300 |
|---|---|---|
| committer | sabdenovch <[email protected]> | 2026-03-05 17:28:13 +0300 |
| commit | 566dbd0131ac9adb1811733b29df03ef49b89dd9 (patch) | |
| tree | bc7ee85e0fb49ad12192730ce66e45c67bfeaa9a /library/cpp/yt | |
| parent | 63101d1408d63121261705bea002fa952bf70db0 (diff) | |
Even better tracking of memory in range inferrer
commit_hash:ef7700a25960a737e5b047b2c21e473ebf15fbb9
Diffstat (limited to 'library/cpp/yt')
| -rw-r--r-- | library/cpp/yt/memory/shared_range.h | 27 |
1 files changed, 18 insertions, 9 deletions
diff --git a/library/cpp/yt/memory/shared_range.h b/library/cpp/yt/memory/shared_range.h index d7e845bc1dc..15a34d79e1a 100644 --- a/library/cpp/yt/memory/shared_range.h +++ b/library/cpp/yt/memory/shared_range.h @@ -180,16 +180,25 @@ TSharedRangeHolderPtr MakeSharedRangeHolder(THolders&&... holders) template <class T, class TContainer, class... THolders> TSharedRange<T> DoMakeSharedRange(TContainer&& elements, THolders&&... holders) { + using THoldersTuple = std::tuple<typename std::decay_t<THolders>...>; + struct THolder : public TSharedRangeHolder { - typename std::decay<TContainer>::type Elements; - std::tuple<typename std::decay<THolders>::type...> Holders; + typename std::decay_t<TContainer> Elements; + THoldersTuple Holders; + + THolder( + std::decay_t<TContainer> elements, + THoldersTuple holders) + : Elements(std::move(elements)) + , Holders(std::move(holders)) + { } }; - auto holder = New<THolder>(); - holder->Holders = std::tuple<THolders...>(std::forward<THolders>(holders)...); - holder->Elements = std::forward<TContainer>(elements); + auto holder = New<THolder>( + std::forward<TContainer>(elements), + THoldersTuple(std::forward<THolders>(holders)...)); auto range = TRange<T>(holder->Elements); @@ -197,8 +206,8 @@ TSharedRange<T> DoMakeSharedRange(TContainer&& elements, THolders&&... holders) } //! Constructs a TSharedRange by taking ownership of an std::vector. -template <class T, class... THolders> -TSharedRange<T> MakeSharedRange(std::vector<T>&& elements, THolders&&... holders) +template <class T, class A = std::allocator<T>, class... THolders> +TSharedRange<T> MakeSharedRange(std::vector<T, A>&& elements, THolders&&... holders) { return DoMakeSharedRange<T>(std::move(elements), std::forward<THolders>(holders)...); } @@ -211,8 +220,8 @@ TSharedRange<T> MakeSharedRange(TCompactVector<T, N>&& elements, THolders&&... h } //! Constructs a TSharedRange by copying an std::vector. -template <class T, class... THolders> -TSharedRange<T> MakeSharedRange(const std::vector<T>& elements, THolders&&... holders) +template <class T, class A = std::allocator<T>, class... THolders> +TSharedRange<T> MakeSharedRange(const std::vector<T, A>& elements, THolders&&... holders) { return DoMakeSharedRange<T>(elements, std::forward<THolders>(holders)...); } |
