summaryrefslogtreecommitdiffstats
path: root/library/cpp/yt
diff options
context:
space:
mode:
authorsabdenovch <[email protected]>2026-03-05 17:08:08 +0300
committersabdenovch <[email protected]>2026-03-05 17:28:13 +0300
commit566dbd0131ac9adb1811733b29df03ef49b89dd9 (patch)
treebc7ee85e0fb49ad12192730ce66e45c67bfeaa9a /library/cpp/yt
parent63101d1408d63121261705bea002fa952bf70db0 (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.h27
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)...);
}