diff options
author | mikari <mikari@yandex-team.ru> | 2022-02-10 16:48:47 +0300 |
---|---|---|
committer | Daniil Cherednik <dcherednik@yandex-team.ru> | 2022-02-10 16:48:47 +0300 |
commit | f821ddfc9200113ec259d8d35b7cf3833372abc9 (patch) | |
tree | 5d5cb817648f650d76cf1076100726fd9b8448e8 /library/cpp/iterator/mapped.h | |
parent | 2e0ed5ad2d70bf924ccd3cbbfab508784ab36325 (diff) | |
download | ydb-f821ddfc9200113ec259d8d35b7cf3833372abc9.tar.gz |
Restoring authorship annotation for <mikari@yandex-team.ru>. Commit 2 of 2.
Diffstat (limited to 'library/cpp/iterator/mapped.h')
-rw-r--r-- | library/cpp/iterator/mapped.h | 60 |
1 files changed, 30 insertions, 30 deletions
diff --git a/library/cpp/iterator/mapped.h b/library/cpp/iterator/mapped.h index 1bc2663bb7..6c5e763184 100644 --- a/library/cpp/iterator/mapped.h +++ b/library/cpp/iterator/mapped.h @@ -29,7 +29,7 @@ public: using iterator_category = std::conditional_t<NIteratorPrivate::HasRandomAccess<TIterator>(), std::random_access_iterator_tag, std::input_iterator_tag>; - TMappedIterator(TIterator it, TMapper mapper) + TMappedIterator(TIterator it, TMapper mapper) : Iter(it) , Mapper(std::move(mapper)) { @@ -89,11 +89,11 @@ public: private: TIterator Iter; - TMapper Mapper; + TMapper Mapper; }; -template <class TContainer, class TMapper> +template <class TContainer, class TMapper> class TInputMappedRange { protected: using TContainerStorage = TAutoEmbedOrPtrPolicy<TContainer>; @@ -101,27 +101,27 @@ protected: using TMapperWrapper = std::reference_wrapper<std::remove_reference_t<TMapper>>; using TInternalIterator = decltype(std::begin(std::declval<TContainer&>())); using TIterator = TMappedIterator<TInternalIterator, TMapperWrapper>; -public: +public: using iterator = TIterator; using const_iterator = TIterator; using value_type = typename TIterator::value_type; using reference = typename TIterator::reference; using const_reference = typename TIterator::reference; - + TInputMappedRange(TContainer&& container, TMapper&& mapper) : Container(std::forward<TContainer>(container)) , Mapper(std::forward<TMapper>(mapper)) - { - } - + { + } + TIterator begin() const { return {std::begin(*Container.Ptr()), {*Mapper.Ptr()}}; - } - + } + TIterator end() const { return {std::end(*Container.Ptr()), {*Mapper.Ptr()}}; - } - + } + bool empty() const { return std::begin(*Container.Ptr()) == std::end(*Container.Ptr()); } @@ -130,7 +130,7 @@ protected: mutable TContainerStorage Container; mutable TMapperStorage Mapper; }; - + template <class TContainer, class TMapper> class TRandomAccessMappedRange : public TInputMappedRange<TContainer, TMapper> { @@ -150,36 +150,36 @@ public: TRandomAccessMappedRange(TContainer&& container, TMapper&& mapper) : TBase(std::forward<TContainer>(container), std::forward<TMapper>(mapper)) { - } - + } + using TBase::begin; using TBase::end; using TBase::empty; - size_type size() const { + size_type size() const { return std::end(*this->Container.Ptr()) - std::begin(*this->Container.Ptr()); - } - - const_reference operator[](size_t at) const { + } + + const_reference operator[](size_t at) const { Y_ASSERT(at < this->size()); - + return *(this->begin() + at); - } - - reference operator[](size_t at) { + } + + reference operator[](size_t at) { Y_ASSERT(at < this->size()); - + return *(this->begin() + at); - } -}; - + } +}; + template <class TIterator, class TMapper> -TMappedIterator<TIterator, TMapper> MakeMappedIterator(TIterator iter, TMapper mapper) { - return {iter, mapper}; +TMappedIterator<TIterator, TMapper> MakeMappedIterator(TIterator iter, TMapper mapper) { + return {iter, mapper}; } template <class TIterator, class TMapper> -auto MakeMappedRange(TIterator begin, TIterator end, TMapper mapper) { +auto MakeMappedRange(TIterator begin, TIterator end, TMapper mapper) { return MakeIteratorRange(MakeMappedIterator(begin, mapper), MakeMappedIterator(end, mapper)); } |