@complexity Linear in the length of the JSON pointer.
13025 {
13026 for (const auto &reference_token : reference_tokens)
13027 {
13028
13029 if (ptr->is_null())
13030 {
13031
13032 const bool nums =
13033 std::all_of(reference_token.begin(), reference_token.end(),
13034 [](const unsigned char x)
13035 {
13036 return std::isdigit(x);
13037 });
13038
13039 *ptr = (nums || reference_token == "-")
13042 }
13043
13044 switch (ptr->type())
13045 {
13047 {
13048
13049 ptr = &ptr->operator[](reference_token);
13050 break;
13051 }
13052
13054 {
13055 if (reference_token == "-")
13056 {
13057
13058 ptr = &ptr->operator[](ptr->m_value.array->size());
13059 }
13060
13061 else
13062 {
13063
13064 ptr = &ptr->operator[](
array_index(reference_token));
13065 }
13066
13067 break;
13068 }
13069
13078 default:
13079 JSON_THROW(detail::out_of_range::create(404, "unresolved reference token '" + reference_token + "'", *ptr));
13080 }
13081 }
13082
13083 return *ptr;
13084 }
static BasicJsonType::size_type array_index(const std::string &s)
@ number_integer
number value (signed integer)
@ discarded
discarded by the parser callback function
@ binary
binary array (ordered collection of bytes)
@ object
object (unordered set of name/value pairs)
@ number_float
number value (floating-point)
@ number_unsigned
number value (unsigned integer)
@ array
array (ordered collection of values)