JSON for Modern C++  3.0
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Groups
nlohmann::basic_json< ObjectType, ArrayType, StringType, BooleanType, NumberIntegerType, NumberFloatType, Allocator >::iterator Class Reference

a random access iterator for the basic_json class More...

#include <json.hpp>

Inheritance diagram for nlohmann::basic_json< ObjectType, ArrayType, StringType, BooleanType, NumberIntegerType, NumberFloatType, Allocator >::iterator:
Collaboration diagram for nlohmann::basic_json< ObjectType, ArrayType, StringType, BooleanType, NumberIntegerType, NumberFloatType, Allocator >::iterator:

Public Types

using value_type = basic_json::value_type
 the type of the values when the iterator is dereferenced More...
 
using difference_type = basic_json::difference_type
 a type to represent differences between iterators More...
 
using pointer = basic_json::pointer
 defines a pointer to the type iterated over (value_type) More...
 
using reference = basic_json::reference
 defines a reference to the type iterated over (value_type) More...
 
using iterator_category = std::bidirectional_iterator_tag
 the category of the iterator More...
 

Public Member Functions

 iterator ()=default
 default constructor More...
 
 iterator (pointer object) noexcept
 constructor for a given JSON instance More...
 
 iterator (const iterator &other) noexcept
 copy constructor More...
 
iteratoroperator= (iterator other) noexcept(std::is_nothrow_move_constructible< pointer >::value andstd::is_nothrow_move_assignable< pointer >::value andstd::is_nothrow_move_constructible< internal_iterator< typename array_t::iterator, typename object_t::iterator >>::valueandstd::is_nothrow_move_assignable< internal_iterator< typename array_t::iterator, typename object_t::iterator >>::value)
 copy assignment More...
 
reference operator* ()
 return a reference to the value pointed to by the iterator More...
 
pointer operator-> ()
 dereference the iterator More...
 
iterator operator++ (int)
 post-increment (it++) More...
 
iteratoroperator++ ()
 pre-increment (++it) More...
 
iterator operator-- (int)
 post-decrement (it–) More...
 
iteratoroperator-- ()
 pre-decrement (–it) More...
 
bool operator== (const iterator &other) const
 comparison: equal More...
 
bool operator!= (const iterator &other) const
 comparison: not equal More...
 
bool operator< (const iterator &other) const
 comparison: smaller More...
 
bool operator<= (const iterator &other) const
 comparison: less than or equal More...
 
bool operator> (const iterator &other) const
 comparison: greater than More...
 
bool operator>= (const iterator &other) const
 comparison: greater than or equal More...
 
iteratoroperator+= (difference_type i)
 add to iterator More...
 
iteratoroperator-= (difference_type i)
 subtract from iterator More...
 
iterator operator+ (difference_type i)
 add to iterator More...
 
iterator operator- (difference_type i)
 subtract from iterator More...
 
difference_type operator- (const iterator &other) const
 return difference More...
 
reference operator[] (difference_type n)
 access to successor More...
 
object_t::key_type key () const
 return the key of an object iterator More...
 
reference value ()
 return the key of an iterator More...
 

Private Member Functions

void set_begin () noexcept
 set the iterator to the first value More...
 
void set_end () noexcept
 set the iterator past the last value More...
 

Private Attributes

pointer m_object = nullptr
 associated JSON instance More...
 
internal_iterator< typename
array_t::iterator, typename
object_t::iterator > 
m_it
 the actual iterator of the associated instance More...
 

Friends

class basic_json
 

Detailed Description

template<template< typename U, typename V, typename...Args > class ObjectType = std::map, template< typename U, typename...Args > class ArrayType = std::vector, class StringType = std::string, class BooleanType = bool, class NumberIntegerType = int64_t, class NumberFloatType = double, template< typename U > class Allocator = std::allocator>
class nlohmann::basic_json< ObjectType, ArrayType, StringType, BooleanType, NumberIntegerType, NumberFloatType, Allocator >::iterator

Definition at line 2228 of file json.hpp.

Member Typedef Documentation

template<template< typename U, typename V, typename...Args > class ObjectType = std::map, template< typename U, typename...Args > class ArrayType = std::vector, class StringType = std::string, class BooleanType = bool, class NumberIntegerType = int64_t, class NumberFloatType = double, template< typename U > class Allocator = std::allocator>
using nlohmann::basic_json< ObjectType, ArrayType, StringType, BooleanType, NumberIntegerType, NumberFloatType, Allocator >::iterator::difference_type = basic_json::difference_type

Definition at line 2237 of file json.hpp.

template<template< typename U, typename V, typename...Args > class ObjectType = std::map, template< typename U, typename...Args > class ArrayType = std::vector, class StringType = std::string, class BooleanType = bool, class NumberIntegerType = int64_t, class NumberFloatType = double, template< typename U > class Allocator = std::allocator>
using nlohmann::basic_json< ObjectType, ArrayType, StringType, BooleanType, NumberIntegerType, NumberFloatType, Allocator >::iterator::iterator_category = std::bidirectional_iterator_tag

Definition at line 2243 of file json.hpp.

template<template< typename U, typename V, typename...Args > class ObjectType = std::map, template< typename U, typename...Args > class ArrayType = std::vector, class StringType = std::string, class BooleanType = bool, class NumberIntegerType = int64_t, class NumberFloatType = double, template< typename U > class Allocator = std::allocator>
using nlohmann::basic_json< ObjectType, ArrayType, StringType, BooleanType, NumberIntegerType, NumberFloatType, Allocator >::iterator::pointer = basic_json::pointer

Definition at line 2239 of file json.hpp.

template<template< typename U, typename V, typename...Args > class ObjectType = std::map, template< typename U, typename...Args > class ArrayType = std::vector, class StringType = std::string, class BooleanType = bool, class NumberIntegerType = int64_t, class NumberFloatType = double, template< typename U > class Allocator = std::allocator>
using nlohmann::basic_json< ObjectType, ArrayType, StringType, BooleanType, NumberIntegerType, NumberFloatType, Allocator >::iterator::reference = basic_json::reference

Definition at line 2241 of file json.hpp.

template<template< typename U, typename V, typename...Args > class ObjectType = std::map, template< typename U, typename...Args > class ArrayType = std::vector, class StringType = std::string, class BooleanType = bool, class NumberIntegerType = int64_t, class NumberFloatType = double, template< typename U > class Allocator = std::allocator>
using nlohmann::basic_json< ObjectType, ArrayType, StringType, BooleanType, NumberIntegerType, NumberFloatType, Allocator >::iterator::value_type = basic_json::value_type

Definition at line 2235 of file json.hpp.

Constructor & Destructor Documentation

template<template< typename U, typename V, typename...Args > class ObjectType = std::map, template< typename U, typename...Args > class ArrayType = std::vector, class StringType = std::string, class BooleanType = bool, class NumberIntegerType = int64_t, class NumberFloatType = double, template< typename U > class Allocator = std::allocator>
nlohmann::basic_json< ObjectType, ArrayType, StringType, BooleanType, NumberIntegerType, NumberFloatType, Allocator >::iterator::iterator ( )
inlinedefault
template<template< typename U, typename V, typename...Args > class ObjectType = std::map, template< typename U, typename...Args > class ArrayType = std::vector, class StringType = std::string, class BooleanType = bool, class NumberIntegerType = int64_t, class NumberFloatType = double, template< typename U > class Allocator = std::allocator>
nlohmann::basic_json< ObjectType, ArrayType, StringType, BooleanType, NumberIntegerType, NumberFloatType, Allocator >::iterator::iterator ( pointer  object)
inlinenoexcept

Definition at line 2249 of file json.hpp.

References nlohmann::basic_json< ObjectType, ArrayType, StringType, BooleanType, NumberIntegerType, NumberFloatType, Allocator >::array, and nlohmann::basic_json< ObjectType, ArrayType, StringType, BooleanType, NumberIntegerType, NumberFloatType, Allocator >::object.

2249  : m_object(object)
2250  {
2251  switch (m_object->m_type)
2252  {
2254  {
2255  m_it.object_iterator = typename object_t::iterator();
2256  break;
2257  }
2259  {
2260  m_it.array_iterator = typename array_t::iterator();
2261  break;
2262  }
2263  default:
2264  {
2265  m_it.generic_iterator = -1;
2266  break;
2267  }
2268  }
2269  }
value_t m_type
the type of the current element
Definition: json.hpp:2197
pointer m_object
associated JSON instance
Definition: json.hpp:2739
internal_iterator< typename array_t::iterator, typename object_t::iterator > m_it
the actual iterator of the associated instance
Definition: json.hpp:2741
array (ordered collection of values)
object (unordered set of name/value pairs)
template<template< typename U, typename V, typename...Args > class ObjectType = std::map, template< typename U, typename...Args > class ArrayType = std::vector, class StringType = std::string, class BooleanType = bool, class NumberIntegerType = int64_t, class NumberFloatType = double, template< typename U > class Allocator = std::allocator>
nlohmann::basic_json< ObjectType, ArrayType, StringType, BooleanType, NumberIntegerType, NumberFloatType, Allocator >::iterator::iterator ( const iterator other)
inlinenoexcept

Definition at line 2272 of file json.hpp.

2273  : m_object(other.m_object), m_it(other.m_it)
2274  {}
pointer m_object
associated JSON instance
Definition: json.hpp:2739
internal_iterator< typename array_t::iterator, typename object_t::iterator > m_it
the actual iterator of the associated instance
Definition: json.hpp:2741

Member Function Documentation

template<template< typename U, typename V, typename...Args > class ObjectType = std::map, template< typename U, typename...Args > class ArrayType = std::vector, class StringType = std::string, class BooleanType = bool, class NumberIntegerType = int64_t, class NumberFloatType = double, template< typename U > class Allocator = std::allocator>
object_t::key_type nlohmann::basic_json< ObjectType, ArrayType, StringType, BooleanType, NumberIntegerType, NumberFloatType, Allocator >::iterator::key ( ) const
inline

Definition at line 2715 of file json.hpp.

References nlohmann::basic_json< ObjectType, ArrayType, StringType, BooleanType, NumberIntegerType, NumberFloatType, Allocator >::object.

2716  {
2717  switch (m_object->m_type)
2718  {
2720  {
2721  return m_it.object_iterator->first;
2722  }
2723 
2724  default:
2725  {
2726  throw std::domain_error("cannot use key() for non-object iterators");
2727  }
2728  }
2729  }
value_t m_type
the type of the current element
Definition: json.hpp:2197
pointer m_object
associated JSON instance
Definition: json.hpp:2739
internal_iterator< typename array_t::iterator, typename object_t::iterator > m_it
the actual iterator of the associated instance
Definition: json.hpp:2741
object (unordered set of name/value pairs)
template<template< typename U, typename V, typename...Args > class ObjectType = std::map, template< typename U, typename...Args > class ArrayType = std::vector, class StringType = std::string, class BooleanType = bool, class NumberIntegerType = int64_t, class NumberFloatType = double, template< typename U > class Allocator = std::allocator>
bool nlohmann::basic_json< ObjectType, ArrayType, StringType, BooleanType, NumberIntegerType, NumberFloatType, Allocator >::iterator::operator!= ( const iterator other) const
inline

Definition at line 2558 of file json.hpp.

2559  {
2560  return not operator==(other);
2561  }
bool operator==(const iterator &other) const
comparison: equal
Definition: json.hpp:2530
template<template< typename U, typename V, typename...Args > class ObjectType = std::map, template< typename U, typename...Args > class ArrayType = std::vector, class StringType = std::string, class BooleanType = bool, class NumberIntegerType = int64_t, class NumberFloatType = double, template< typename U > class Allocator = std::allocator>
reference nlohmann::basic_json< ObjectType, ArrayType, StringType, BooleanType, NumberIntegerType, NumberFloatType, Allocator >::iterator::operator* ( )
inline

Definition at line 2350 of file json.hpp.

References nlohmann::basic_json< ObjectType, ArrayType, StringType, BooleanType, NumberIntegerType, NumberFloatType, Allocator >::array, nlohmann::basic_json< ObjectType, ArrayType, StringType, BooleanType, NumberIntegerType, NumberFloatType, Allocator >::null, and nlohmann::basic_json< ObjectType, ArrayType, StringType, BooleanType, NumberIntegerType, NumberFloatType, Allocator >::object.

2351  {
2352  switch (m_object->m_type)
2353  {
2355  {
2356  return m_it.object_iterator->second;
2357  }
2358 
2360  {
2361  return *m_it.array_iterator;
2362  }
2363 
2365  {
2366  throw std::out_of_range("cannot get value");
2367  }
2368 
2369  default:
2370  {
2371  if (m_it.generic_iterator == 0)
2372  {
2373  return *m_object;
2374  }
2375  else
2376  {
2377  throw std::out_of_range("cannot get value");
2378  }
2379  }
2380  }
2381  }
value_t m_type
the type of the current element
Definition: json.hpp:2197
pointer m_object
associated JSON instance
Definition: json.hpp:2739
internal_iterator< typename array_t::iterator, typename object_t::iterator > m_it
the actual iterator of the associated instance
Definition: json.hpp:2741
array (ordered collection of values)
object (unordered set of name/value pairs)
template<template< typename U, typename V, typename...Args > class ObjectType = std::map, template< typename U, typename...Args > class ArrayType = std::vector, class StringType = std::string, class BooleanType = bool, class NumberIntegerType = int64_t, class NumberFloatType = double, template< typename U > class Allocator = std::allocator>
iterator nlohmann::basic_json< ObjectType, ArrayType, StringType, BooleanType, NumberIntegerType, NumberFloatType, Allocator >::iterator::operator+ ( difference_type  i)
inline

Definition at line 2642 of file json.hpp.

2643  {
2644  auto result = *this;
2645  result += i;
2646  return result;
2647  }
template<template< typename U, typename V, typename...Args > class ObjectType = std::map, template< typename U, typename...Args > class ArrayType = std::vector, class StringType = std::string, class BooleanType = bool, class NumberIntegerType = int64_t, class NumberFloatType = double, template< typename U > class Allocator = std::allocator>
iterator nlohmann::basic_json< ObjectType, ArrayType, StringType, BooleanType, NumberIntegerType, NumberFloatType, Allocator >::iterator::operator++ ( int  )
inline

Definition at line 2418 of file json.hpp.

References nlohmann::basic_json< ObjectType, ArrayType, StringType, BooleanType, NumberIntegerType, NumberFloatType, Allocator >::array, and nlohmann::basic_json< ObjectType, ArrayType, StringType, BooleanType, NumberIntegerType, NumberFloatType, Allocator >::object.

2419  {
2420  auto result = *this;
2421 
2422  switch (m_object->m_type)
2423  {
2425  {
2426  m_it.object_iterator++;
2427  break;
2428  }
2429 
2431  {
2432  m_it.array_iterator++;
2433  break;
2434  }
2435 
2436  default:
2437  {
2438  m_it.generic_iterator++;
2439  break;
2440  }
2441  }
2442 
2443  return result;
2444  }
value_t m_type
the type of the current element
Definition: json.hpp:2197
pointer m_object
associated JSON instance
Definition: json.hpp:2739
internal_iterator< typename array_t::iterator, typename object_t::iterator > m_it
the actual iterator of the associated instance
Definition: json.hpp:2741
array (ordered collection of values)
object (unordered set of name/value pairs)
template<template< typename U, typename V, typename...Args > class ObjectType = std::map, template< typename U, typename...Args > class ArrayType = std::vector, class StringType = std::string, class BooleanType = bool, class NumberIntegerType = int64_t, class NumberFloatType = double, template< typename U > class Allocator = std::allocator>
iterator& nlohmann::basic_json< ObjectType, ArrayType, StringType, BooleanType, NumberIntegerType, NumberFloatType, Allocator >::iterator::operator++ ( )
inline

Definition at line 2447 of file json.hpp.

References nlohmann::basic_json< ObjectType, ArrayType, StringType, BooleanType, NumberIntegerType, NumberFloatType, Allocator >::array, and nlohmann::basic_json< ObjectType, ArrayType, StringType, BooleanType, NumberIntegerType, NumberFloatType, Allocator >::object.

2448  {
2449  switch (m_object->m_type)
2450  {
2452  {
2453  ++m_it.object_iterator;
2454  break;
2455  }
2456 
2458  {
2459  ++m_it.array_iterator;
2460  break;
2461  }
2462 
2463  default:
2464  {
2465  ++m_it.generic_iterator;
2466  break;
2467  }
2468  }
2469 
2470  return *this;
2471  }
value_t m_type
the type of the current element
Definition: json.hpp:2197
pointer m_object
associated JSON instance
Definition: json.hpp:2739
internal_iterator< typename array_t::iterator, typename object_t::iterator > m_it
the actual iterator of the associated instance
Definition: json.hpp:2741
array (ordered collection of values)
object (unordered set of name/value pairs)
template<template< typename U, typename V, typename...Args > class ObjectType = std::map, template< typename U, typename...Args > class ArrayType = std::vector, class StringType = std::string, class BooleanType = bool, class NumberIntegerType = int64_t, class NumberFloatType = double, template< typename U > class Allocator = std::allocator>
iterator& nlohmann::basic_json< ObjectType, ArrayType, StringType, BooleanType, NumberIntegerType, NumberFloatType, Allocator >::iterator::operator+= ( difference_type  i)
inline

Definition at line 2610 of file json.hpp.

References nlohmann::basic_json< ObjectType, ArrayType, StringType, BooleanType, NumberIntegerType, NumberFloatType, Allocator >::array, and nlohmann::basic_json< ObjectType, ArrayType, StringType, BooleanType, NumberIntegerType, NumberFloatType, Allocator >::object.

2611  {
2612  switch (m_object->m_type)
2613  {
2615  {
2616  throw std::domain_error("cannot use operator+= for object iterators");
2617  }
2618 
2620  {
2621  m_it.array_iterator += i;
2622  break;
2623  }
2624 
2625  default:
2626  {
2627  m_it.generic_iterator += i;
2628  break;
2629  }
2630  }
2631 
2632  return *this;
2633  }
value_t m_type
the type of the current element
Definition: json.hpp:2197
pointer m_object
associated JSON instance
Definition: json.hpp:2739
internal_iterator< typename array_t::iterator, typename object_t::iterator > m_it
the actual iterator of the associated instance
Definition: json.hpp:2741
array (ordered collection of values)
object (unordered set of name/value pairs)
template<template< typename U, typename V, typename...Args > class ObjectType = std::map, template< typename U, typename...Args > class ArrayType = std::vector, class StringType = std::string, class BooleanType = bool, class NumberIntegerType = int64_t, class NumberFloatType = double, template< typename U > class Allocator = std::allocator>
iterator nlohmann::basic_json< ObjectType, ArrayType, StringType, BooleanType, NumberIntegerType, NumberFloatType, Allocator >::iterator::operator- ( difference_type  i)
inline

Definition at line 2650 of file json.hpp.

2651  {
2652  auto result = *this;
2653  result -= i;
2654  return result;
2655  }
template<template< typename U, typename V, typename...Args > class ObjectType = std::map, template< typename U, typename...Args > class ArrayType = std::vector, class StringType = std::string, class BooleanType = bool, class NumberIntegerType = int64_t, class NumberFloatType = double, template< typename U > class Allocator = std::allocator>
difference_type nlohmann::basic_json< ObjectType, ArrayType, StringType, BooleanType, NumberIntegerType, NumberFloatType, Allocator >::iterator::operator- ( const iterator other) const
inline

Definition at line 2658 of file json.hpp.

References nlohmann::basic_json< ObjectType, ArrayType, StringType, BooleanType, NumberIntegerType, NumberFloatType, Allocator >::array, nlohmann::basic_json< ObjectType, ArrayType, StringType, BooleanType, NumberIntegerType, NumberFloatType, Allocator >::iterator::m_it, and nlohmann::basic_json< ObjectType, ArrayType, StringType, BooleanType, NumberIntegerType, NumberFloatType, Allocator >::object.

2659  {
2660  switch (m_object->m_type)
2661  {
2663  {
2664  throw std::domain_error("cannot use operator- for object iterators");
2665  return 0;
2666  }
2667 
2669  {
2670  return m_it.array_iterator - other.m_it.array_iterator;
2671  }
2672 
2673  default:
2674  {
2675  return m_it.generic_iterator - other.m_it.generic_iterator;
2676  }
2677  }
2678  }
value_t m_type
the type of the current element
Definition: json.hpp:2197
pointer m_object
associated JSON instance
Definition: json.hpp:2739
internal_iterator< typename array_t::iterator, typename object_t::iterator > m_it
the actual iterator of the associated instance
Definition: json.hpp:2741
array (ordered collection of values)
object (unordered set of name/value pairs)
template<template< typename U, typename V, typename...Args > class ObjectType = std::map, template< typename U, typename...Args > class ArrayType = std::vector, class StringType = std::string, class BooleanType = bool, class NumberIntegerType = int64_t, class NumberFloatType = double, template< typename U > class Allocator = std::allocator>
iterator nlohmann::basic_json< ObjectType, ArrayType, StringType, BooleanType, NumberIntegerType, NumberFloatType, Allocator >::iterator::operator-- ( int  )
inline

Definition at line 2474 of file json.hpp.

References nlohmann::basic_json< ObjectType, ArrayType, StringType, BooleanType, NumberIntegerType, NumberFloatType, Allocator >::array, and nlohmann::basic_json< ObjectType, ArrayType, StringType, BooleanType, NumberIntegerType, NumberFloatType, Allocator >::object.

2475  {
2476  auto result = *this;
2477 
2478  switch (m_object->m_type)
2479  {
2481  {
2482  m_it.object_iterator--;
2483  break;
2484  }
2485 
2487  {
2488  m_it.array_iterator--;
2489  break;
2490  }
2491 
2492  default:
2493  {
2494  m_it.generic_iterator--;
2495  break;
2496  }
2497  }
2498 
2499  return result;
2500  }
value_t m_type
the type of the current element
Definition: json.hpp:2197
pointer m_object
associated JSON instance
Definition: json.hpp:2739
internal_iterator< typename array_t::iterator, typename object_t::iterator > m_it
the actual iterator of the associated instance
Definition: json.hpp:2741
array (ordered collection of values)
object (unordered set of name/value pairs)
template<template< typename U, typename V, typename...Args > class ObjectType = std::map, template< typename U, typename...Args > class ArrayType = std::vector, class StringType = std::string, class BooleanType = bool, class NumberIntegerType = int64_t, class NumberFloatType = double, template< typename U > class Allocator = std::allocator>
iterator& nlohmann::basic_json< ObjectType, ArrayType, StringType, BooleanType, NumberIntegerType, NumberFloatType, Allocator >::iterator::operator-- ( )
inline

Definition at line 2503 of file json.hpp.

References nlohmann::basic_json< ObjectType, ArrayType, StringType, BooleanType, NumberIntegerType, NumberFloatType, Allocator >::array, and nlohmann::basic_json< ObjectType, ArrayType, StringType, BooleanType, NumberIntegerType, NumberFloatType, Allocator >::object.

2504  {
2505  switch (m_object->m_type)
2506  {
2508  {
2509  --m_it.object_iterator;
2510  break;
2511  }
2512 
2514  {
2515  --m_it.array_iterator;
2516  break;
2517  }
2518 
2519  default:
2520  {
2521  --m_it.generic_iterator;
2522  break;
2523  }
2524  }
2525 
2526  return *this;
2527  }
value_t m_type
the type of the current element
Definition: json.hpp:2197
pointer m_object
associated JSON instance
Definition: json.hpp:2739
internal_iterator< typename array_t::iterator, typename object_t::iterator > m_it
the actual iterator of the associated instance
Definition: json.hpp:2741
array (ordered collection of values)
object (unordered set of name/value pairs)
template<template< typename U, typename V, typename...Args > class ObjectType = std::map, template< typename U, typename...Args > class ArrayType = std::vector, class StringType = std::string, class BooleanType = bool, class NumberIntegerType = int64_t, class NumberFloatType = double, template< typename U > class Allocator = std::allocator>
iterator& nlohmann::basic_json< ObjectType, ArrayType, StringType, BooleanType, NumberIntegerType, NumberFloatType, Allocator >::iterator::operator-= ( difference_type  i)
inline

Definition at line 2636 of file json.hpp.

2637  {
2638  return operator+=(-i);
2639  }
iterator & operator+=(difference_type i)
add to iterator
Definition: json.hpp:2610
template<template< typename U, typename V, typename...Args > class ObjectType = std::map, template< typename U, typename...Args > class ArrayType = std::vector, class StringType = std::string, class BooleanType = bool, class NumberIntegerType = int64_t, class NumberFloatType = double, template< typename U > class Allocator = std::allocator>
pointer nlohmann::basic_json< ObjectType, ArrayType, StringType, BooleanType, NumberIntegerType, NumberFloatType, Allocator >::iterator::operator-> ( )
inline

Definition at line 2384 of file json.hpp.

References nlohmann::basic_json< ObjectType, ArrayType, StringType, BooleanType, NumberIntegerType, NumberFloatType, Allocator >::array, nlohmann::basic_json< ObjectType, ArrayType, StringType, BooleanType, NumberIntegerType, NumberFloatType, Allocator >::null, and nlohmann::basic_json< ObjectType, ArrayType, StringType, BooleanType, NumberIntegerType, NumberFloatType, Allocator >::object.

2385  {
2386  switch (m_object->m_type)
2387  {
2389  {
2390  return &(m_it.object_iterator->second);
2391  }
2392 
2394  {
2395  return &*m_it.array_iterator;
2396  }
2397 
2399  {
2400  throw std::out_of_range("cannot get value");
2401  }
2402 
2403  default:
2404  {
2405  if (m_it.generic_iterator == 0)
2406  {
2407  return m_object;
2408  }
2409  else
2410  {
2411  throw std::out_of_range("cannot get value");
2412  }
2413  }
2414  }
2415  }
value_t m_type
the type of the current element
Definition: json.hpp:2197
pointer m_object
associated JSON instance
Definition: json.hpp:2739
internal_iterator< typename array_t::iterator, typename object_t::iterator > m_it
the actual iterator of the associated instance
Definition: json.hpp:2741
array (ordered collection of values)
object (unordered set of name/value pairs)
template<template< typename U, typename V, typename...Args > class ObjectType = std::map, template< typename U, typename...Args > class ArrayType = std::vector, class StringType = std::string, class BooleanType = bool, class NumberIntegerType = int64_t, class NumberFloatType = double, template< typename U > class Allocator = std::allocator>
bool nlohmann::basic_json< ObjectType, ArrayType, StringType, BooleanType, NumberIntegerType, NumberFloatType, Allocator >::iterator::operator< ( const iterator other) const
inline

Definition at line 2564 of file json.hpp.

References nlohmann::basic_json< ObjectType, ArrayType, StringType, BooleanType, NumberIntegerType, NumberFloatType, Allocator >::array, nlohmann::basic_json< ObjectType, ArrayType, StringType, BooleanType, NumberIntegerType, NumberFloatType, Allocator >::iterator::m_it, nlohmann::basic_json< ObjectType, ArrayType, StringType, BooleanType, NumberIntegerType, NumberFloatType, Allocator >::iterator::m_object, and nlohmann::basic_json< ObjectType, ArrayType, StringType, BooleanType, NumberIntegerType, NumberFloatType, Allocator >::object.

2565  {
2566  // if objects are not the same, the comparison is undefined
2567  if (m_object != other.m_object)
2568  {
2569  throw std::domain_error("cannot compare iterators of different containers");
2570  }
2571 
2572  switch (m_object->m_type)
2573  {
2575  {
2576  throw std::domain_error("cannot use operator< for object iterators");
2577  }
2578 
2580  {
2581  return (m_it.array_iterator < other.m_it.array_iterator);
2582  }
2583 
2584  default:
2585  {
2586  return (m_it.generic_iterator < other.m_it.generic_iterator);
2587  }
2588  }
2589  }
value_t m_type
the type of the current element
Definition: json.hpp:2197
pointer m_object
associated JSON instance
Definition: json.hpp:2739
internal_iterator< typename array_t::iterator, typename object_t::iterator > m_it
the actual iterator of the associated instance
Definition: json.hpp:2741
array (ordered collection of values)
object (unordered set of name/value pairs)
template<template< typename U, typename V, typename...Args > class ObjectType = std::map, template< typename U, typename...Args > class ArrayType = std::vector, class StringType = std::string, class BooleanType = bool, class NumberIntegerType = int64_t, class NumberFloatType = double, template< typename U > class Allocator = std::allocator>
bool nlohmann::basic_json< ObjectType, ArrayType, StringType, BooleanType, NumberIntegerType, NumberFloatType, Allocator >::iterator::operator<= ( const iterator other) const
inline

Definition at line 2592 of file json.hpp.

2593  {
2594  return not other.operator < (*this);
2595  }
template<template< typename U, typename V, typename...Args > class ObjectType = std::map, template< typename U, typename...Args > class ArrayType = std::vector, class StringType = std::string, class BooleanType = bool, class NumberIntegerType = int64_t, class NumberFloatType = double, template< typename U > class Allocator = std::allocator>
iterator& nlohmann::basic_json< ObjectType, ArrayType, StringType, BooleanType, NumberIntegerType, NumberFloatType, Allocator >::iterator::operator= ( iterator  other)
inlinenoexcept

Definition at line 2277 of file json.hpp.

References std::swap().

2284  {
2285  std::swap(m_object, other.m_object);
2286  std::swap(m_it, other.m_it);
2287  return *this;
2288  }
pointer m_object
associated JSON instance
Definition: json.hpp:2739
internal_iterator< typename array_t::iterator, typename object_t::iterator > m_it
the actual iterator of the associated instance
Definition: json.hpp:2741
void swap(nlohmann::json &j1, nlohmann::json &j2) noexcept(is_nothrow_move_constructible< nlohmann::json >::value andis_nothrow_move_assignable< nlohmann::json >::value)
exchanges the values of two JSON objects
Definition: json.hpp:4695

Here is the call graph for this function:

template<template< typename U, typename V, typename...Args > class ObjectType = std::map, template< typename U, typename...Args > class ArrayType = std::vector, class StringType = std::string, class BooleanType = bool, class NumberIntegerType = int64_t, class NumberFloatType = double, template< typename U > class Allocator = std::allocator>
bool nlohmann::basic_json< ObjectType, ArrayType, StringType, BooleanType, NumberIntegerType, NumberFloatType, Allocator >::iterator::operator== ( const iterator other) const
inline

Definition at line 2530 of file json.hpp.

References nlohmann::basic_json< ObjectType, ArrayType, StringType, BooleanType, NumberIntegerType, NumberFloatType, Allocator >::array, nlohmann::basic_json< ObjectType, ArrayType, StringType, BooleanType, NumberIntegerType, NumberFloatType, Allocator >::iterator::m_it, nlohmann::basic_json< ObjectType, ArrayType, StringType, BooleanType, NumberIntegerType, NumberFloatType, Allocator >::iterator::m_object, and nlohmann::basic_json< ObjectType, ArrayType, StringType, BooleanType, NumberIntegerType, NumberFloatType, Allocator >::object.

2531  {
2532  // if objects are not the same, the comparison is undefined
2533  if (m_object != other.m_object)
2534  {
2535  throw std::domain_error("cannot compare iterators of different containers");
2536  }
2537 
2538  switch (m_object->m_type)
2539  {
2541  {
2542  return (m_it.object_iterator == other.m_it.object_iterator);
2543  }
2544 
2546  {
2547  return (m_it.array_iterator == other.m_it.array_iterator);
2548  }
2549 
2550  default:
2551  {
2552  return (m_it.generic_iterator == other.m_it.generic_iterator);
2553  }
2554  }
2555  }
value_t m_type
the type of the current element
Definition: json.hpp:2197
pointer m_object
associated JSON instance
Definition: json.hpp:2739
internal_iterator< typename array_t::iterator, typename object_t::iterator > m_it
the actual iterator of the associated instance
Definition: json.hpp:2741
array (ordered collection of values)
object (unordered set of name/value pairs)
template<template< typename U, typename V, typename...Args > class ObjectType = std::map, template< typename U, typename...Args > class ArrayType = std::vector, class StringType = std::string, class BooleanType = bool, class NumberIntegerType = int64_t, class NumberFloatType = double, template< typename U > class Allocator = std::allocator>
bool nlohmann::basic_json< ObjectType, ArrayType, StringType, BooleanType, NumberIntegerType, NumberFloatType, Allocator >::iterator::operator> ( const iterator other) const
inline

Definition at line 2598 of file json.hpp.

2599  {
2600  return not operator<=(other);
2601  }
bool operator<=(const iterator &other) const
comparison: less than or equal
Definition: json.hpp:2592
template<template< typename U, typename V, typename...Args > class ObjectType = std::map, template< typename U, typename...Args > class ArrayType = std::vector, class StringType = std::string, class BooleanType = bool, class NumberIntegerType = int64_t, class NumberFloatType = double, template< typename U > class Allocator = std::allocator>
bool nlohmann::basic_json< ObjectType, ArrayType, StringType, BooleanType, NumberIntegerType, NumberFloatType, Allocator >::iterator::operator>= ( const iterator other) const
inline

Definition at line 2604 of file json.hpp.

2605  {
2606  return not operator<(other);
2607  }
bool operator<(const iterator &other) const
comparison: smaller
Definition: json.hpp:2564
template<template< typename U, typename V, typename...Args > class ObjectType = std::map, template< typename U, typename...Args > class ArrayType = std::vector, class StringType = std::string, class BooleanType = bool, class NumberIntegerType = int64_t, class NumberFloatType = double, template< typename U > class Allocator = std::allocator>
reference nlohmann::basic_json< ObjectType, ArrayType, StringType, BooleanType, NumberIntegerType, NumberFloatType, Allocator >::iterator::operator[] ( difference_type  n)
inline

Definition at line 2681 of file json.hpp.

References nlohmann::basic_json< ObjectType, ArrayType, StringType, BooleanType, NumberIntegerType, NumberFloatType, Allocator >::array, nlohmann::basic_json< ObjectType, ArrayType, StringType, BooleanType, NumberIntegerType, NumberFloatType, Allocator >::null, and nlohmann::basic_json< ObjectType, ArrayType, StringType, BooleanType, NumberIntegerType, NumberFloatType, Allocator >::object.

2682  {
2683  switch (m_object->m_type)
2684  {
2686  {
2687  throw std::domain_error("cannot use operator[] for object iterators");
2688  }
2689 
2691  {
2692  return *(m_it.array_iterator + n);
2693  }
2694 
2696  {
2697  throw std::out_of_range("cannot get value");
2698  }
2699 
2700  default:
2701  {
2702  if (m_it.generic_iterator == -n)
2703  {
2704  return *m_object;
2705  }
2706  else
2707  {
2708  throw std::out_of_range("cannot get value");
2709  }
2710  }
2711  }
2712  }
value_t m_type
the type of the current element
Definition: json.hpp:2197
pointer m_object
associated JSON instance
Definition: json.hpp:2739
internal_iterator< typename array_t::iterator, typename object_t::iterator > m_it
the actual iterator of the associated instance
Definition: json.hpp:2741
array (ordered collection of values)
object (unordered set of name/value pairs)
template<template< typename U, typename V, typename...Args > class ObjectType = std::map, template< typename U, typename...Args > class ArrayType = std::vector, class StringType = std::string, class BooleanType = bool, class NumberIntegerType = int64_t, class NumberFloatType = double, template< typename U > class Allocator = std::allocator>
void nlohmann::basic_json< ObjectType, ArrayType, StringType, BooleanType, NumberIntegerType, NumberFloatType, Allocator >::iterator::set_begin ( )
inlineprivatenoexcept

Definition at line 2292 of file json.hpp.

References nlohmann::basic_json< ObjectType, ArrayType, StringType, BooleanType, NumberIntegerType, NumberFloatType, Allocator >::array, nlohmann::basic_json< ObjectType, ArrayType, StringType, BooleanType, NumberIntegerType, NumberFloatType, Allocator >::null, and nlohmann::basic_json< ObjectType, ArrayType, StringType, BooleanType, NumberIntegerType, NumberFloatType, Allocator >::object.

Referenced by nlohmann::basic_json< ObjectType, ArrayType, StringType, BooleanType, NumberIntegerType, NumberFloatType, Allocator >::begin().

2293  {
2294  switch (m_object->m_type)
2295  {
2297  {
2298  m_it.object_iterator = m_object->m_value.object->begin();
2299  break;
2300  }
2301 
2303  {
2304  m_it.array_iterator = m_object->m_value.array->begin();
2305  break;
2306  }
2307 
2309  {
2310  // set to end so begin()==end() is true: null is empty
2311  m_it.generic_iterator = 1;
2312  break;
2313  }
2314 
2315  default:
2316  {
2317  m_it.generic_iterator = 0;
2318  break;
2319  }
2320  }
2321  }
value_t m_type
the type of the current element
Definition: json.hpp:2197
object_t * object
object (stored with pointer to save storage)
Definition: json.hpp:213
pointer m_object
associated JSON instance
Definition: json.hpp:2739
json_value m_value
the value of the current element
Definition: json.hpp:2203
internal_iterator< typename array_t::iterator, typename object_t::iterator > m_it
the actual iterator of the associated instance
Definition: json.hpp:2741
array (ordered collection of values)
object (unordered set of name/value pairs)
array_t * array
array (stored with pointer to save storage)
Definition: json.hpp:215

Here is the caller graph for this function:

template<template< typename U, typename V, typename...Args > class ObjectType = std::map, template< typename U, typename...Args > class ArrayType = std::vector, class StringType = std::string, class BooleanType = bool, class NumberIntegerType = int64_t, class NumberFloatType = double, template< typename U > class Allocator = std::allocator>
void nlohmann::basic_json< ObjectType, ArrayType, StringType, BooleanType, NumberIntegerType, NumberFloatType, Allocator >::iterator::set_end ( )
inlineprivatenoexcept

Definition at line 2324 of file json.hpp.

References nlohmann::basic_json< ObjectType, ArrayType, StringType, BooleanType, NumberIntegerType, NumberFloatType, Allocator >::array, and nlohmann::basic_json< ObjectType, ArrayType, StringType, BooleanType, NumberIntegerType, NumberFloatType, Allocator >::object.

Referenced by nlohmann::basic_json< ObjectType, ArrayType, StringType, BooleanType, NumberIntegerType, NumberFloatType, Allocator >::end().

2325  {
2326  switch (m_object->m_type)
2327  {
2329  {
2330  m_it.object_iterator = m_object->m_value.object->end();
2331  break;
2332  }
2333 
2335  {
2336  m_it.array_iterator = m_object->m_value.array->end();
2337  break;
2338  }
2339 
2340  default:
2341  {
2342  m_it.generic_iterator = 1;
2343  break;
2344  }
2345  }
2346  }
value_t m_type
the type of the current element
Definition: json.hpp:2197
object_t * object
object (stored with pointer to save storage)
Definition: json.hpp:213
pointer m_object
associated JSON instance
Definition: json.hpp:2739
json_value m_value
the value of the current element
Definition: json.hpp:2203
internal_iterator< typename array_t::iterator, typename object_t::iterator > m_it
the actual iterator of the associated instance
Definition: json.hpp:2741
array (ordered collection of values)
object (unordered set of name/value pairs)
array_t * array
array (stored with pointer to save storage)
Definition: json.hpp:215

Here is the caller graph for this function:

template<template< typename U, typename V, typename...Args > class ObjectType = std::map, template< typename U, typename...Args > class ArrayType = std::vector, class StringType = std::string, class BooleanType = bool, class NumberIntegerType = int64_t, class NumberFloatType = double, template< typename U > class Allocator = std::allocator>
reference nlohmann::basic_json< ObjectType, ArrayType, StringType, BooleanType, NumberIntegerType, NumberFloatType, Allocator >::iterator::value ( )
inline

Definition at line 2732 of file json.hpp.

2733  {
2734  return operator*();
2735  }
reference operator*()
return a reference to the value pointed to by the iterator
Definition: json.hpp:2350

Friends And Related Function Documentation

template<template< typename U, typename V, typename...Args > class ObjectType = std::map, template< typename U, typename...Args > class ArrayType = std::vector, class StringType = std::string, class BooleanType = bool, class NumberIntegerType = int64_t, class NumberFloatType = double, template< typename U > class Allocator = std::allocator>
friend class basic_json
friend

Definition at line 2231 of file json.hpp.

Member Data Documentation

template<template< typename U, typename V, typename...Args > class ObjectType = std::map, template< typename U, typename...Args > class ArrayType = std::vector, class StringType = std::string, class BooleanType = bool, class NumberIntegerType = int64_t, class NumberFloatType = double, template< typename U > class Allocator = std::allocator>
internal_iterator<typename array_t::iterator, typename object_t::iterator> nlohmann::basic_json< ObjectType, ArrayType, StringType, BooleanType, NumberIntegerType, NumberFloatType, Allocator >::iterator::m_it
private
template<template< typename U, typename V, typename...Args > class ObjectType = std::map, template< typename U, typename...Args > class ArrayType = std::vector, class StringType = std::string, class BooleanType = bool, class NumberIntegerType = int64_t, class NumberFloatType = double, template< typename U > class Allocator = std::allocator>
pointer nlohmann::basic_json< ObjectType, ArrayType, StringType, BooleanType, NumberIntegerType, NumberFloatType, Allocator >::iterator::m_object = nullptr
private

The documentation for this class was generated from the following file: