inline void parse()

in include/ylt/standalone/iguana/json_reader.hpp [786:843]


inline void parse(jvalue &result, It &&it, It &&end, bool parse_as_double) {
  using namespace detail;
  skip_ws(it, end);
  switch (*it) {
    case 'n':
      ++it;
      match<'u', 'l', 'l'>(it, end);
      result.template emplace<std::nullptr_t>();
      break;

    case 'f':
    case 't':
      from_json_impl(result.template emplace<bool>(), it, end);
      break;
    case '0':
    case '1':
    case '2':
    case '3':
    case '4':
    case '5':
    case '6':
    case '7':
    case '8':
    case '9':
    case '-': {
      double d{};
      from_json_impl(d, it, end);
      if (!parse_as_double && (static_cast<int>(d) == d))
        result.emplace<int>(d);
      else
        result.emplace<double>(d);
      break;
    }
    case '"':
      if constexpr (Is_view) {
        result.template emplace<std::string_view>();
        from_json_impl(std::get<std::string_view>(result), it, end);
      }
      else {
        result.template emplace<std::string>();
        from_json_impl(std::get<std::string>(result), it, end);
      }
      break;
    case '[':
      result.template emplace<jarray>();
      parse<Is_view>(std::get<jarray>(result), it, end, parse_as_double);
      break;
    case '{': {
      result.template emplace<jobject>();
      parse<Is_view>(std::get<jobject>(result), it, end, parse_as_double);
      break;
    }
    default:
      throw std::runtime_error("parse failed");
  }

  skip_ws(it, end);
}