From 06ad4bcf8a7b739bedbd565fc385c6273baaa346 Mon Sep 17 00:00:00 2001 From: deep Date: Fri, 22 Nov 2024 12:07:07 +0300 Subject: Signed Enumerate commit_hash:af73a3ea146e2eb6141cb19913e534d75ba573fd --- library/cpp/iterator/enumerate.h | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) (limited to 'library/cpp/iterator') diff --git a/library/cpp/iterator/enumerate.h b/library/cpp/iterator/enumerate.h index 6ebc12a0e7d..4b6a43dad78 100644 --- a/library/cpp/iterator/enumerate.h +++ b/library/cpp/iterator/enumerate.h @@ -8,11 +8,11 @@ namespace NPrivate { - template + template struct TEnumerator { private: using TStorage = TAutoEmbedOrPtrPolicy; - using TValue = std::tuple()))>; + using TValue = std::tuple()))>; using TIteratorState = decltype(std::begin(std::declval())); using TSentinelState = decltype(std::end(std::declval())); @@ -55,7 +55,7 @@ namespace NPrivate { return Iterator_ == other.Iterator_; } - std::size_t Index_; + TSize Index_; TIteratorState Iterator_; }; @@ -72,7 +72,7 @@ namespace NPrivate { TSentinel end() const { if constexpr (TrivialSentinel) { - return TIterator{std::numeric_limits::max(), std::end(*Storage_.Ptr())}; + return TIterator{std::numeric_limits::max(), std::end(*Storage_.Ptr())}; } else { return TSentinel{std::end(*Storage_.Ptr())}; } @@ -86,5 +86,12 @@ namespace NPrivate { //! Usage: for (auto [i, x] : Enumerate(container)) {...} template auto Enumerate(TContainerOrRef&& container) { - return NPrivate::TEnumerator{std::forward(container)}; + return NPrivate::TEnumerator{std::forward(container)}; +} + +//! Usage: for (auto [i, x] : SEnumerate(container)) {...} +// The index is signed for codebases that prefer signed numerics (such as YTsaurus). +template +auto SEnumerate(TContainerOrRef&& container) { + return NPrivate::TEnumerator{std::forward(container)}; } -- cgit v1.3