in src/detail/skip_value.cpp [77:110]
void skip_number(decode_context &context) {
// Parse negative sign
if (peek(context) == '-') {
++context.position;
}
// Parse integer part
if (peek(context) == '0') {
++context.position;
} else {
fail_if(context, !is_digit(peek(context)), "Expected digit");
do { ++context.position; } while (is_digit(peek(context)));
}
// Parse fractional part
if (peek(context) == '.') {
++context.position;
fail_if(context, !is_digit(peek(context)), "Expected digit after decimal point");
do { ++context.position; } while (is_digit(peek(context)));
}
// Parse exp part
const char maybe_e = peek(context);
if (maybe_e == 'e' || maybe_e == 'E') {
++context.position;
const char maybe_plus_minus = peek(context);
if (maybe_plus_minus == '+' || maybe_plus_minus == '-') {
++context.position;
}
fail_if(context, !is_digit(peek(context)), "Expected digit after exponent sign");
do { ++context.position; } while (is_digit(peek(context)));
}
}