@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. */
| 9171 | end_value (`1`) models past the end. |
| 9172 | */ |
| 9173 | class primitive_iterator_t |
| 9174 | { |
| 9175 | private: |
| 9176 | using difference_type = std::ptrdiff_t; |
| 9177 | static constexpr difference_type begin_value = 0; |
| 9178 | static constexpr difference_type end_value = begin_value + 1; |
| 9179 | |
| 9180 | /// iterator as signed integer type |
| 9181 | difference_type m_it = (std::numeric_limits<std::ptrdiff_t>::min)(); |
| 9182 | |
| 9183 | public: |
| 9184 | constexpr difference_type get_value() const noexcept |
| 9185 | { |
| 9186 | return m_it; |
| 9187 | } |
| 9188 | |
| 9189 | /// set iterator to a defined beginning |
| 9190 | void set_begin() noexcept |
| 9191 | { |
| 9192 | m_it = begin_value; |
| 9193 | } |
| 9194 | |
| 9195 | /// set iterator to a defined past the end |
| 9196 | void set_end() noexcept |
| 9197 | { |
| 9198 | m_it = end_value; |
| 9199 | } |
| 9200 | |
| 9201 | /// return whether the iterator can be dereferenced |
| 9202 | constexpr bool is_begin() const noexcept |
| 9203 | { |
| 9204 | return m_it == begin_value; |
| 9205 | } |
| 9206 | |
| 9207 | /// return whether the iterator is at end |
| 9208 | constexpr bool is_end() const noexcept |
| 9209 | { |
| 9210 | return m_it == end_value; |
| 9211 | } |
| 9212 | |
| 9213 | friend constexpr bool operator==(primitive_iterator_t lhs, primitive_iterator_t rhs) noexcept |
| 9214 | { |
| 9215 | return lhs.m_it == rhs.m_it; |
| 9216 | } |
| 9217 | |
| 9218 | friend constexpr bool operator<(primitive_iterator_t lhs, primitive_iterator_t rhs) noexcept |
| 9219 | { |
| 9220 | return lhs.m_it < rhs.m_it; |
| 9221 | } |
| 9222 | |
| 9223 | primitive_iterator_t operator+(difference_type n) noexcept |
| 9224 | { |
| 9225 | auto result = *this; |
| 9226 | result += n; |
| 9227 | return result; |
| 9228 | } |
| 9229 | |
| 9230 | friend constexpr difference_type operator-(primitive_iterator_t lhs, primitive_iterator_t rhs) noexcept |