10432 {
10433 switch (prefix)
10434 {
10435 case std::char_traits<char_type>::eof():
10437
10438 case 'T':
10439 return sax->boolean(
true);
10440
10441 case 'F':
10442 return sax->boolean(
false);
10443
10444 case 'Z':
10445 return sax->null();
10446
10447 case 'U':
10448 {
10449 std::uint8_t number{};
10450 return get_number(input_format_t::ubjson, number) &&
sax->number_unsigned(number);
10451 }
10452
10453 case 'i':
10454 {
10455 std::int8_t number{};
10456 return get_number(input_format_t::ubjson, number) &&
sax->number_integer(number);
10457 }
10458
10459 case 'I':
10460 {
10461 std::int16_t number{};
10462 return get_number(input_format_t::ubjson, number) &&
sax->number_integer(number);
10463 }
10464
10465 case 'l':
10466 {
10467 std::int32_t number{};
10468 return get_number(input_format_t::ubjson, number) &&
sax->number_integer(number);
10469 }
10470
10471 case 'L':
10472 {
10473 std::int64_t number{};
10474 return get_number(input_format_t::ubjson, number) &&
sax->number_integer(number);
10475 }
10476
10477 case 'd':
10478 {
10479 float number{};
10480 return get_number(input_format_t::ubjson, number) &&
sax->number_float(
static_cast<number_float_t
>(number),
"");
10481 }
10482
10483 case 'D':
10484 {
10485 double number{};
10486 return get_number(input_format_t::ubjson, number) &&
sax->number_float(
static_cast<number_float_t
>(number),
"");
10487 }
10488
10489 case 'H':
10490 {
10491 return get_ubjson_high_precision_number();
10492 }
10493
10494 case 'C':
10495 {
10497
10498 if (JSON_HEDLEY_UNLIKELY(!
unexpect_eof(input_format_t::ubjson,
"char")))
10499 {
10500 return false;
10501 }
10502
10503 if (JSON_HEDLEY_UNLIKELY(
current > 127))
10504 {
10507 }
10508
10509 string_t s(1,
static_cast<typename string_t::value_type
>(
current));
10510 return sax->string(s);
10511 }
10512
10513 case 'S':
10514 {
10515 string_t s;
10517 }
10518
10519 case '[':
10521
10522 case '{':
10524
10525 default:
10526 {
10529 }
10530 }
10531 }
bool get_ubjson_string(string_t &result, const bool get_char=true)
reads a UBJSON string
bool unexpect_eof(const input_format_t format, const char *context) const
std::string get_token_string() const
std::string exception_message(const input_format_t format, const std::string &detail, const std::string &context) const
std::size_t chars_read
the number of characters read
char_int_type current
the current character
json_sax_t * sax
the SAX parser
char_int_type get()
get next character from the input
static parse_error create(int id_, const position_t &pos, const std::string &what_arg, const BasicJsonType &context)
create a parse error exception
input_format_t
the supported input formats