! @brief access to successor @pre The iterator is initialized; i.e. `m_object != nullptr`. */
| 11343 | @pre The iterator is initialized; i.e. `m_object != nullptr`. |
| 11344 | */ |
| 11345 | reference operator[](difference_type n) const |
| 11346 | { |
| 11347 | JSON_ASSERT(m_object != nullptr); |
| 11348 | |
| 11349 | switch (m_object->m_type) |
| 11350 | { |
| 11351 | case value_t::object: |
| 11352 | JSON_THROW(invalid_iterator::create(208, "cannot use operator[] for object iterators")); |
| 11353 | |
| 11354 | case value_t::array: |
| 11355 | return *std::next(m_it.array_iterator, n); |
| 11356 | |
| 11357 | case value_t::null: |
| 11358 | JSON_THROW(invalid_iterator::create(214, "cannot get value")); |
| 11359 | |
| 11360 | default: |
| 11361 | { |
| 11362 | if (JSON_HEDLEY_LIKELY(m_it.primitive_iterator.get_value() == -n)) |
| 11363 | { |
| 11364 | return *m_object; |
| 11365 | } |
| 11366 | |
| 11367 | JSON_THROW(invalid_iterator::create(214, "cannot get value")); |
| 11368 | } |
| 11369 | } |
| 11370 | } |
| 11371 | |
| 11372 | /*! |
| 11373 | @brief return the key of an object iterator |