From af3f74de8cada6cc9fe0962164f4aca8393b7774 Mon Sep 17 00:00:00 2001 From: Jay Berkenbilt Date: Sat, 5 Feb 2022 09:58:30 -0500 Subject: [PATCH] Stop using std::iterator (fixes #618) Create the typedefs directly in iterators rather than deriving from the deprecated std::iterator class. --- include/qpdf/QPDFNameTreeObjectHelper.hh | 11 ++++++++--- include/qpdf/QPDFNumberTreeObjectHelper.hh | 11 ++++++++--- include/qpdf/QPDFObjectHandle.hh | 22 ++++++++++++++++------ libqpdf/qpdf/NNTree.hh | 11 ++++++++--- 4 files changed, 40 insertions(+), 15 deletions(-) diff --git a/include/qpdf/QPDFNameTreeObjectHelper.hh b/include/qpdf/QPDFNameTreeObjectHelper.hh index ea395c6a..baa6e5e9 100644 --- a/include/qpdf/QPDFNameTreeObjectHelper.hh +++ b/include/qpdf/QPDFNameTreeObjectHelper.hh @@ -77,12 +77,17 @@ class QPDFNameTreeObjectHelper: public QPDFObjectHelper QPDF_DLL bool findObject(std::string const& utf8, QPDFObjectHandle& oh); - class iterator: public std::iterator< - std::bidirectional_iterator_tag, - std::pair> + class iterator { friend class QPDFNameTreeObjectHelper; public: + typedef std::pair T; + using iterator_category = std::bidirectional_iterator_tag; + using value_type = T; + using difference_type = long; + using pointer = T*; + using reference = T&; + virtual ~iterator() = default; QPDF_DLL bool valid() const; diff --git a/include/qpdf/QPDFNumberTreeObjectHelper.hh b/include/qpdf/QPDFNumberTreeObjectHelper.hh index 4a7bfec0..cfe20b72 100644 --- a/include/qpdf/QPDFNumberTreeObjectHelper.hh +++ b/include/qpdf/QPDFNumberTreeObjectHelper.hh @@ -96,12 +96,17 @@ class QPDFNumberTreeObjectHelper: public QPDFObjectHelper bool findObjectAtOrBelow(numtree_number idx, QPDFObjectHandle& oh, numtree_number& offset); - class iterator: public std::iterator< - std::bidirectional_iterator_tag, - std::pair> + class iterator { friend class QPDFNumberTreeObjectHelper; public: + typedef std::pair T; + using iterator_category = std::bidirectional_iterator_tag; + using value_type = T; + using difference_type = long; + using pointer = T*; + using reference = T&; + virtual ~iterator() = default; QPDF_DLL bool valid() const; diff --git a/include/qpdf/QPDFObjectHandle.hh b/include/qpdf/QPDFObjectHandle.hh index 03d7cb0d..262a84b8 100644 --- a/include/qpdf/QPDFObjectHandle.hh +++ b/include/qpdf/QPDFObjectHandle.hh @@ -1479,12 +1479,17 @@ class QPDFObjectHandle::QPDFDictItems QPDF_DLL QPDFDictItems(QPDFObjectHandle const& oh); - class iterator: public std::iterator< - std::bidirectional_iterator_tag, - std::pair> + class iterator { friend class QPDFDictItems; public: + typedef std::pair T; + using iterator_category = std::bidirectional_iterator_tag; + using value_type = T; + using difference_type = long; + using pointer = T*; + using reference = T&; + QPDF_DLL virtual ~iterator() = default; QPDF_DLL @@ -1569,12 +1574,17 @@ class QPDFObjectHandle::QPDFArrayItems QPDF_DLL QPDFArrayItems(QPDFObjectHandle const& oh); - class iterator: public std::iterator< - std::bidirectional_iterator_tag, - QPDFObjectHandle> + class iterator { friend class QPDFArrayItems; public: + typedef QPDFObjectHandle T; + using iterator_category = std::bidirectional_iterator_tag; + using value_type = T; + using difference_type = long; + using pointer = T*; + using reference = T&; + QPDF_DLL virtual ~iterator() = default; QPDF_DLL diff --git a/libqpdf/qpdf/NNTree.hh b/libqpdf/qpdf/NNTree.hh index f4472662..f9acc0d1 100644 --- a/libqpdf/qpdf/NNTree.hh +++ b/libqpdf/qpdf/NNTree.hh @@ -17,12 +17,17 @@ class NNTreeDetails }; class NNTreeImpl; -class NNTreeIterator: public std::iterator< - std::bidirectional_iterator_tag, - std::pair> +class NNTreeIterator { friend class NNTreeImpl; public: + typedef std::pair T; + using iterator_category = std::bidirectional_iterator_tag; + using value_type = T; + using difference_type = long; + using pointer = T*; + using reference = T&; + virtual ~NNTreeIterator() = default; bool valid() const; NNTreeIterator& operator++();