From f24e4f680ebeff7fdc7a824fa83fff2c504d6638 Mon Sep 17 00:00:00 2001 From: Niels Lohmann Date: Wed, 14 Dec 2016 22:30:09 +0100 Subject: [PATCH] :art: cleanup after PR #395 --- README.md | 1 + src/json.hpp | 35 +++++++++++++++++------------------ src/json.hpp.re2c | 37 +++++++++++++++++++------------------ 3 files changed, 37 insertions(+), 36 deletions(-) diff --git a/README.md b/README.md index fa045f7f..644b37f2 100644 --- a/README.md +++ b/README.md @@ -584,6 +584,7 @@ I deeply appreciate the help of the following people. - [cgzones](https://github.com/cgzones) had an idea how to fix the Coverity scan. - [Jared Grubb](https://github.com/jaredgrubb) silenced a nasty documentation warning. - [Yixin Zhang](https://github.com/qwename) fixed an integer overflow check. +- [Bosswestfalen](https://github.com/Bosswestfalen) merged two iterator classes into a smaller one. Thanks a lot for helping out! diff --git a/src/json.hpp b/src/json.hpp index aed03fa3..d066bd2c 100644 --- a/src/json.hpp +++ b/src/json.hpp @@ -228,6 +228,7 @@ class basic_json public: // forward declarations + template class iter_impl; template class json_reverse_iterator; class json_pointer; @@ -261,8 +262,6 @@ class basic_json /// the type of an element const pointer using const_pointer = typename std::allocator_traits::const_pointer; - // forward declaration for iterators - template class iter_impl; /// an iterator for a basic_json container using iterator = iter_impl; /// a const iterator for a basic_json container @@ -8208,8 +8207,8 @@ class basic_json /*! @brief a template for a random access iterator for the @ref basic_json class - This class implements a both iterators (iterator and const_iterator) - for the @ref basic_json class. + This class implements a both iterators (iterator and const_iterator) for the + @ref basic_json class. @note An iterator is called *initialized* when a pointer to a JSON value has been set (e.g., by a constructor or a copy assignment). If the @@ -8222,9 +8221,9 @@ class basic_json The iterator that can be moved to point (forward and backward) to any element in constant time. - @since version 1.0.0 + @since version 1.0.0, simplified in version 2.0.9 */ - template + template class iter_impl : public std::iterator { /// allow basic_json to access private members @@ -8242,12 +8241,12 @@ class basic_json using difference_type = typename basic_json::difference_type; /// defines a pointer to the type iterated over (value_type) using pointer = typename std::conditional::value, - typename basic_json::const_pointer, - typename basic_json::pointer>::type; + typename basic_json::const_pointer, + typename basic_json::pointer>::type; /// defines a reference to the type iterated over (value_type) using reference = typename std::conditional::value, - typename basic_json::const_reference, - typename basic_json::reference>::type; + typename basic_json::const_reference, + typename basic_json::reference>::type; /// the category of the iterator using iterator_category = std::bidirectional_iterator_tag; @@ -8288,19 +8287,19 @@ class basic_json } /* - Use operator const_iterator instead of - const_iterator(const iterator& other) noexcept - to avoid two class definitions for iterator and const_iterator. + Use operator `const_iterator` instead of `const_iterator(const iterator& + other) noexcept` to avoid two class definitions for @ref iterator and + @ref const_iterator. - This function is only called if this class is an iterator. - If this class is a const_iterator this function is not called. + This function is only called if this class is an @ref iterator. If this + class is a @ref const_iterator this function is not called. */ operator const_iterator() const - { - const_iterator ret; + { + const_iterator ret; if (m_object) - { + { ret.m_object = m_object; ret.m_it = m_it; } diff --git a/src/json.hpp.re2c b/src/json.hpp.re2c index 17813c79..ded56b9f 100644 --- a/src/json.hpp.re2c +++ b/src/json.hpp.re2c @@ -228,6 +228,7 @@ class basic_json public: // forward declarations + template class iter_impl; template class json_reverse_iterator; class json_pointer; @@ -262,9 +263,9 @@ class basic_json using const_pointer = typename std::allocator_traits::const_pointer; /// an iterator for a basic_json container - class iterator; + using iterator = iter_impl; /// a const iterator for a basic_json container - class const_iterator; + using const_iterator = iter_impl; /// a reverse iterator for a basic_json container using reverse_iterator = json_reverse_iterator; /// a const reverse iterator for a basic_json container @@ -8206,8 +8207,8 @@ class basic_json /*! @brief a template for a random access iterator for the @ref basic_json class - This class implements a both iterators (iterator and const_iterator) - for the @ref basic_json class. + This class implements a both iterators (iterator and const_iterator) for the + @ref basic_json class. @note An iterator is called *initialized* when a pointer to a JSON value has been set (e.g., by a constructor or a copy assignment). If the @@ -8220,9 +8221,9 @@ class basic_json The iterator that can be moved to point (forward and backward) to any element in constant time. - @since version 1.0.0 + @since version 1.0.0, simplified in version 2.0.9 */ - template + template class iter_impl : public std::iterator { /// allow basic_json to access private members @@ -8240,12 +8241,12 @@ class basic_json using difference_type = typename basic_json::difference_type; /// defines a pointer to the type iterated over (value_type) using pointer = typename std::conditional::value, - typename basic_json::const_pointer, - typename basic_json::pointer>::type; + typename basic_json::const_pointer, + typename basic_json::pointer>::type; /// defines a reference to the type iterated over (value_type) using reference = typename std::conditional::value, - typename basic_json::const_reference, - typename basic_json::reference>::type; + typename basic_json::const_reference, + typename basic_json::reference>::type; /// the category of the iterator using iterator_category = std::bidirectional_iterator_tag; @@ -8286,19 +8287,19 @@ class basic_json } /* - Use operator const_iterator instead of - const_iterator(const iterator& other) noexcept - to avoid two class definitions for iterator and const_iterator. + Use operator `const_iterator` instead of `const_iterator(const iterator& + other) noexcept` to avoid two class definitions for @ref iterator and + @ref const_iterator. - This function is only called if this class is an iterator. - If this class is a const_iterator this function is not called. + This function is only called if this class is an @ref iterator. If this + class is a @ref const_iterator this function is not called. */ operator const_iterator() const - { - const_iterator ret; + { + const_iterator ret; if (m_object) - { + { ret.m_object = m_object; ret.m_it = m_it; }