12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273 |
- From d75bb90a5dd8c5946ce7496748d1cea842aabc0f Mon Sep 17 00:00:00 2001
- From: "Philipp A. Hartmann" <pah@qo.cx>
- Date: Tue, 12 Dec 2017 21:16:07 +0100
- Subject: [PATCH] Avoid inheritance from std::iterator
- Instead of inheriting from the deprecated std::iterator
- template, define the member typedefs needed for
- std::iterator_traits directly.
- Closes #1131.
- ---
- include/rapidjson/document.h | 22 ++++++++++++++--------
- 1 file changed, 14 insertions(+), 8 deletions(-)
- diff --git a/include/rapidjson/document.h b/include/rapidjson/document.h
- index 094a07e8..eb6d7dcb 100644
- --- a/include/rapidjson/document.h
- +++ b/include/rapidjson/document.h
- @@ -45,7 +45,7 @@ RAPIDJSON_DIAG_OFF(terminate) // ignore throwing RAPIDJSON_ASSERT in RAPIDJSON_N
- #endif // __GNUC__
-
- #ifndef RAPIDJSON_NOMEMBERITERATORCLASS
- -#include <iterator> // std::iterator, std::random_access_iterator_tag
- +#include <iterator> // std::random_access_iterator_tag
- #endif
-
- #if RAPIDJSON_HAS_CXX11_RVALUE_REFS
- @@ -98,16 +98,13 @@ struct GenericMember {
- \see GenericMember, GenericValue::MemberIterator, GenericValue::ConstMemberIterator
- */
- template <bool Const, typename Encoding, typename Allocator>
- -class GenericMemberIterator
- - : public std::iterator<std::random_access_iterator_tag
- - , typename internal::MaybeAddConst<Const,GenericMember<Encoding,Allocator> >::Type> {
- +class GenericMemberIterator {
-
- friend class GenericValue<Encoding,Allocator>;
- template <bool, typename, typename> friend class GenericMemberIterator;
-
- typedef GenericMember<Encoding,Allocator> PlainType;
- typedef typename internal::MaybeAddConst<Const,PlainType>::Type ValueType;
- - typedef std::iterator<std::random_access_iterator_tag,ValueType> BaseType;
-
- public:
- //! Iterator type itself
- @@ -117,12 +114,21 @@ public:
- //! Non-constant iterator type
- typedef GenericMemberIterator<false,Encoding,Allocator> NonConstIterator;
-
- + /** \name std::iterator_traits support */
- + //@{
- + typedef ValueType value_type;
- + typedef ValueType * pointer;
- + typedef ValueType & reference;
- + typedef std::ptrdiff_t difference_type;
- + typedef std::random_access_iterator_tag iterator_category;
- + //@}
- +
- //! Pointer to (const) GenericMember
- - typedef typename BaseType::pointer Pointer;
- + typedef pointer Pointer;
- //! Reference to (const) GenericMember
- - typedef typename BaseType::reference Reference;
- + typedef reference Reference;
- //! Signed integer type (e.g. \c ptrdiff_t)
- - typedef typename BaseType::difference_type DifferenceType;
- + typedef difference_type DifferenceType;
-
- //! Default constructor (singular value)
- /*! Creates an iterator pointing to no element.
- --
- 2.42.0
|