diff options
Diffstat (limited to 'src/utils/cpp/transformed_range.hpp')
-rw-r--r-- | src/utils/cpp/transformed_range.hpp | 46 |
1 files changed, 23 insertions, 23 deletions
diff --git a/src/utils/cpp/transformed_range.hpp b/src/utils/cpp/transformed_range.hpp index f28029f3..cc3fe5d6 100644 --- a/src/utils/cpp/transformed_range.hpp +++ b/src/utils/cpp/transformed_range.hpp @@ -30,16 +30,16 @@ /// \brief Transform iterable sequence "on the fly" invoking the given /// transformation callback. If the callback throws an exception, /// std::terminate is called. -/// \tparam Iterator Type of the iterator of the sequence to be +/// \tparam TIterator Type of the iterator of the sequence to be /// transformed. /// \tparam Result Type of the transformation result. -template <typename Iterator, typename Result> +template <typename TIterator, typename Result> class TransformedRange final { public: using converter_t = - std::function<Result(typename Iterator::value_type const&)>; + std::function<Result(typename TIterator::value_type const&)>; - class iterator final { + class Iterator final { public: using value_type = std::remove_reference_t<Result>; using pointer = value_type*; @@ -47,9 +47,9 @@ class TransformedRange final { using difference_type = std::ptrdiff_t; using iterator_category = std::forward_iterator_tag; - iterator() noexcept = default; - iterator(Iterator iterator, converter_t c) noexcept - : iterator_(std::move(iterator)), c_(std::move(c)) {} + Iterator() noexcept = default; + Iterator(TIterator Iterator, converter_t c) noexcept + : iterator_(std::move(Iterator)), c_(std::move(c)) {} auto operator*() const noexcept -> decltype(auto) { try { @@ -59,35 +59,35 @@ class TransformedRange final { } } - auto operator++() noexcept -> iterator& { + auto operator++() noexcept -> Iterator& { ++iterator_; return *this; } - [[nodiscard]] friend auto operator==(iterator const& lhs, - iterator const& rhs) noexcept + [[nodiscard]] friend auto operator==(Iterator const& lhs, + Iterator const& rhs) noexcept -> bool { return lhs.iterator_ == rhs.iterator_; } - [[nodiscard]] friend auto operator!=(iterator const& lhs, - iterator const& rhs) noexcept + [[nodiscard]] friend auto operator!=(Iterator const& lhs, + Iterator const& rhs) noexcept -> bool { return not(lhs == rhs); } private: - Iterator iterator_{}; + TIterator iterator_{}; converter_t c_{}; }; - TransformedRange(Iterator begin, Iterator end, converter_t c) noexcept + TransformedRange(TIterator begin, TIterator end, converter_t c) noexcept : begin_{std::move(begin), std::move(c)}, end_{std::move(end), nullptr} {} - [[nodiscard]] auto begin() const noexcept -> iterator { return begin_; } - [[nodiscard]] auto end() const noexcept -> iterator { return end_; } - [[nodiscard]] auto size() const -> typename iterator::difference_type { + [[nodiscard]] auto begin() const noexcept -> Iterator { return begin_; } + [[nodiscard]] auto end() const noexcept -> Iterator { return end_; } + [[nodiscard]] auto size() const -> typename Iterator::difference_type { return std::distance(begin_, end_); } @@ -101,17 +101,17 @@ class TransformedRange final { } private: - iterator const begin_; - iterator const end_; + Iterator const begin_; + Iterator const end_; }; // User-defined deduction guide to help compiler dealing with generic lambdas // and invokable objects. -template <typename Iterator, +template <typename TIterator, typename Function, - typename IteratorValue = typename Iterator::value_type> -TransformedRange(Iterator, Iterator, Function) - -> TransformedRange<Iterator, + typename IteratorValue = typename TIterator::value_type> +TransformedRange(TIterator, TIterator, Function) + -> TransformedRange<TIterator, std::invoke_result_t<Function, IteratorValue>>; #endif // INCLUDED_SRC_OTHER_TOOLS_TRANSFORMED_RANGE_HPP |