@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. */
| 12648 | end_value (`1`) models past the end. |
| 12649 | */ |
| 12650 | class primitive_iterator_t |
| 12651 | { |
| 12652 | private: |
| 12653 | using difference_type = std::ptrdiff_t; |
| 12654 | static constexpr difference_type begin_value = 0; |
| 12655 | static constexpr difference_type end_value = begin_value + 1; |
| 12656 | |
| 12657 | JSON_PRIVATE_UNLESS_TESTED: |
| 12658 | /// iterator as signed integer type |
| 12659 | difference_type m_it = (std::numeric_limits<std::ptrdiff_t>::min)(); |
| 12660 | |
| 12661 | public: |
| 12662 | constexpr difference_type get_value() const noexcept |
| 12663 | { |
| 12664 | return m_it; |
| 12665 | } |
| 12666 | |
| 12667 | /// set iterator to a defined beginning |
| 12668 | void set_begin() noexcept |
| 12669 | { |
| 12670 | m_it = begin_value; |
| 12671 | } |
| 12672 | |
| 12673 | /// set iterator to a defined past the end |
| 12674 | void set_end() noexcept |
| 12675 | { |
| 12676 | m_it = end_value; |
| 12677 | } |
| 12678 | |
| 12679 | /// return whether the iterator can be dereferenced |
| 12680 | constexpr bool is_begin() const noexcept |
| 12681 | { |
| 12682 | return m_it == begin_value; |
| 12683 | } |
| 12684 | |
| 12685 | /// return whether the iterator is at end |
| 12686 | constexpr bool is_end() const noexcept |
| 12687 | { |
| 12688 | return m_it == end_value; |
| 12689 | } |
| 12690 | |
| 12691 | friend constexpr bool operator==(primitive_iterator_t lhs, primitive_iterator_t rhs) noexcept |
| 12692 | { |
| 12693 | return lhs.m_it == rhs.m_it; |
| 12694 | } |
| 12695 | |
| 12696 | friend constexpr bool operator<(primitive_iterator_t lhs, primitive_iterator_t rhs) noexcept |
| 12697 | { |
| 12698 | return lhs.m_it < rhs.m_it; |
| 12699 | } |
| 12700 | |
| 12701 | primitive_iterator_t operator+(difference_type n) noexcept |
| 12702 | { |
| 12703 | auto result = *this; |
| 12704 | result += n; |
| 12705 | return result; |
| 12706 | } |
| 12707 |