@brief an iterator for primitive JSON types This class models an iterator for primitive JSON types (boolean, number, string). It's only purpose is to allow the iterator/const_iterator classes to "iterate" over primitive values. Internally, the iterator is modeled by a `difference_type` variable. Value begin_value (`0`) models the begin, end_value (`1`) models past the end. */
| 10634 | end_value (`1`) models past the end. |
| 10635 | */ |
| 10636 | class primitive_iterator_t |
| 10637 | { |
| 10638 | private: |
| 10639 | using difference_type = std::ptrdiff_t; |
| 10640 | static constexpr difference_type begin_value = 0; |
| 10641 | static constexpr difference_type end_value = begin_value + 1; |
| 10642 | |
| 10643 | /// iterator as signed integer type |
| 10644 | difference_type m_it = (std::numeric_limits<std::ptrdiff_t>::min)(); |
| 10645 | |
| 10646 | public: |
| 10647 | constexpr difference_type get_value() const noexcept |
| 10648 | { |
| 10649 | return m_it; |
| 10650 | } |
| 10651 | |
| 10652 | /// set iterator to a defined beginning |
| 10653 | void set_begin() noexcept |
| 10654 | { |
| 10655 | m_it = begin_value; |
| 10656 | } |
| 10657 | |
| 10658 | /// set iterator to a defined past the end |
| 10659 | void set_end() noexcept |
| 10660 | { |
| 10661 | m_it = end_value; |
| 10662 | } |
| 10663 | |
| 10664 | /// return whether the iterator can be dereferenced |
| 10665 | constexpr bool is_begin() const noexcept |
| 10666 | { |
| 10667 | return m_it == begin_value; |
| 10668 | } |
| 10669 | |
| 10670 | /// return whether the iterator is at end |
| 10671 | constexpr bool is_end() const noexcept |
| 10672 | { |
| 10673 | return m_it == end_value; |
| 10674 | } |
| 10675 | |
| 10676 | friend constexpr bool operator==(primitive_iterator_t lhs, primitive_iterator_t rhs) noexcept |
| 10677 | { |
| 10678 | return lhs.m_it == rhs.m_it; |
| 10679 | } |
| 10680 | |
| 10681 | friend constexpr bool operator<(primitive_iterator_t lhs, primitive_iterator_t rhs) noexcept |
| 10682 | { |
| 10683 | return lhs.m_it < rhs.m_it; |
| 10684 | } |
| 10685 | |
| 10686 | primitive_iterator_t operator+(difference_type n) noexcept |
| 10687 | { |
| 10688 | auto result = *this; |
| 10689 | result += n; |
| 10690 | return result; |
| 10691 | } |
| 10692 | |
| 10693 | friend constexpr difference_type operator-(primitive_iterator_t lhs, primitive_iterator_t rhs) noexcept |