From 0612e0797923eb978360f903a0f1317ed10db9f1 Mon Sep 17 00:00:00 2001 From: Mat Sutcliffe Date: Fri, 16 Apr 2021 21:26:39 +0100 Subject: [PATCH] Remove std::iterator (deprecated in C++17) --- src/blackmisc/iterator.h | 43 +++++++++++++++++++++++++++++++++++----- 1 file changed, 38 insertions(+), 5 deletions(-) diff --git a/src/blackmisc/iterator.h b/src/blackmisc/iterator.h index e48c3b4a6..a6d9b7126 100644 --- a/src/blackmisc/iterator.h +++ b/src/blackmisc/iterator.h @@ -26,9 +26,18 @@ namespace BlackMisc /*! * Configurable output iterator using a provided functor to do the insertion. */ - template class OutputIterator : public std::iterator + template class OutputIterator { public: + //! Types + //! @{ + using iterator_category = std::output_iterator_tag; + using value_type = void; + using difference_type = void; + using pointer = void; + using reference = void; + //! @} + //! Constructor //! @{ explicit OutputIterator(const F &func) : m_func(func) {} @@ -101,10 +110,16 @@ namespace BlackMisc * By creating a CRange from such iterators, it is possible to perform a transformation on a container without copying elements. */ template class TransformIterator - : public std::iterator()(std::declval::value_type>()))>> { public: + //! Types + //! @{ + using iterator_category = std::forward_iterator_tag; + using value_type = std::decay_t()(std::declval::value_type>()))>; + using difference_type = typename std::iterator_traits::difference_type; + using reference = typename std::iterator_traits::reference; + //! @} + //! The type returned by the transformation function, which may or may not be a reference. using undecayed_type = decltype(std::declval()(std::declval::value_type>())); @@ -166,9 +181,18 @@ namespace BlackMisc * * By creating a CRange from such iterators, it is possible to return the results of predicate methods without copying elements. */ - template class ConditionalIterator : public std::iterator::value_type> + template class ConditionalIterator { public: + //! Types + //! @{ + using iterator_category = std::forward_iterator_tag; + using value_type = typename std::iterator_traits::value_type; + using difference_type = typename std::iterator_traits::difference_type; + using pointer = typename std::iterator_traits::pointer; + using reference = typename std::iterator_traits::reference; + //! @} + //! Constructor. ConditionalIterator(I iterator, I end, F predicate) : m_iterator(iterator), m_end(end), m_predicate(predicate) { @@ -230,9 +254,18 @@ namespace BlackMisc /*! * Iterator wrapper which concatenates zero or more pairs of begin and end iterators. */ - template class ConcatIterator : public std::iterator::value_type> + template class ConcatIterator { public: + //! Types + //! @{ + using iterator_category = std::forward_iterator_tag; + using value_type = typename std::iterator_traits::value_type; + using difference_type = typename std::iterator_traits::difference_type; + using pointer = typename std::iterator_traits::pointer; + using reference = typename std::iterator_traits::reference; + //! @} + //! Constructor. ConcatIterator(QVector iterators) : m_iterators(std::move(iterators)) {