TerraForge3D  2.3.1
3D Terrain And Landscape Generator

◆ get_ubjson_value()

template<typename BasicJsonType , typename InputAdapterType , typename SAX = json_sax_dom_parser<BasicJsonType>>
bool nlohmann::detail::binary_reader< BasicJsonType, InputAdapterType, SAX >::get_ubjson_value ( const char_int_type  prefix)
inlineprivate
Parameters
prefixthe previously read or set type prefix
Returns
whether value creation completed

Definition at line 10431 of file json.hpp.

10432 {
10433 switch (prefix)
10434 {
10435 case std::char_traits<char_type>::eof(): // EOF
10436 return unexpect_eof(input_format_t::ubjson, "value");
10437
10438 case 'T': // true
10439 return sax->boolean(true);
10440
10441 case 'F': // false
10442 return sax->boolean(false);
10443
10444 case 'Z': // null
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': // char
10495 {
10496 get();
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 {
10505 auto last_token = get_token_string();
10506 return sax->parse_error(chars_read, last_token, parse_error::create(113, chars_read, exception_message(input_format_t::ubjson, "byte after 'C' must be in range 0x00..0x7F; last byte: 0x" + last_token, "char"), BasicJsonType()));
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': // string
10514 {
10515 string_t s;
10516 return get_ubjson_string(s) && sax->string(s);
10517 }
10518
10519 case '[': // array
10520 return get_ubjson_array();
10521
10522 case '{': // object
10523 return get_ubjson_object();
10524
10525 default: // anything else
10526 {
10527 auto last_token = get_token_string();
10528 return sax->parse_error(chars_read, last_token, parse_error::create(112, chars_read, exception_message(input_format_t::ubjson, "invalid byte: 0x" + last_token, "value"), BasicJsonType()));
10529 }
10530 }
10531 }
bool get_ubjson_string(string_t &result, const bool get_char=true)
reads a UBJSON string
Definition: json.hpp:10247
bool unexpect_eof(const input_format_t format, const char *context) const
Definition: json.hpp:10914
std::string get_token_string() const
Definition: json.hpp:10928
std::string exception_message(const input_format_t format, const std::string &detail, const std::string &context) const
Definition: json.hpp:10941
std::size_t chars_read
the number of characters read
Definition: json.hpp:10981
char_int_type current
the current character
Definition: json.hpp:10978
json_sax_t * sax
the SAX parser
Definition: json.hpp:10987
char_int_type get()
get next character from the input
Definition: json.hpp:10769
static parse_error create(int id_, const position_t &pos, const std::string &what_arg, const BasicJsonType &context)
create a parse error exception
Definition: json.hpp:2800
input_format_t
the supported input formats
Definition: json.hpp:5382