MCPcopy Create free account
hub / github.com/Open-GD/OpenGD / get_ubjson_high_precision_number

Method get_ubjson_high_precision_number

Source/external/json.hpp:11747–11811  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

11745 // not exist
11746
11747 bool get_ubjson_high_precision_number()
11748 {
11749 // get size of following number string
11750 std::size_t size{};
11751 bool no_ndarray = true;
11752 auto res = get_ubjson_size_value(size, no_ndarray);
11753 if (JSON_HEDLEY_UNLIKELY(!res))
11754 {
11755 return res;
11756 }
11757
11758 // get number string
11759 std::vector<char> number_vector;
11760 for (std::size_t i = 0; i < size; ++i)
11761 {
11762 get();
11763 if (JSON_HEDLEY_UNLIKELY(!unexpect_eof(input_format, "number")))
11764 {
11765 return false;
11766 }
11767 number_vector.push_back(static_cast<char>(current));
11768 }
11769
11770 // parse number string
11771 using ia_type = decltype(detail::input_adapter(number_vector));
11772 auto number_lexer = detail::lexer<BasicJsonType, ia_type>(detail::input_adapter(number_vector), false);
11773 const auto result_number = number_lexer.scan();
11774 const auto number_string = number_lexer.get_token_string();
11775 const auto result_remainder = number_lexer.scan();
11776
11777 using token_type = typename detail::lexer_base<BasicJsonType>::token_type;
11778
11779 if (JSON_HEDLEY_UNLIKELY(result_remainder != token_type::end_of_input))
11780 {
11781 return sax->parse_error(chars_read, number_string, parse_error::create(115, chars_read,
11782 exception_message(input_format, concat("invalid number text: ", number_lexer.get_token_string()), "high-precision number"), nullptr));
11783 }
11784
11785 switch (result_number)
11786 {
11787 case token_type::value_integer:
11788 return sax->number_integer(number_lexer.get_number_integer());
11789 case token_type::value_unsigned:
11790 return sax->number_unsigned(number_lexer.get_number_unsigned());
11791 case token_type::value_float:
11792 return sax->number_float(number_lexer.get_number_float(), std::move(number_string));
11793 case token_type::uninitialized:
11794 case token_type::literal_true:
11795 case token_type::literal_false:
11796 case token_type::literal_null:
11797 case token_type::value_string:
11798 case token_type::begin_array:
11799 case token_type::begin_object:
11800 case token_type::end_array:
11801 case token_type::end_object:
11802 case token_type::name_separator:
11803 case token_type::value_separator:
11804 case token_type::parse_error:

Callers

nothing calls this directly

Calls 9

getFunction · 0.85
input_adapterFunction · 0.85
createFunction · 0.85
concatFunction · 0.85
get_token_stringMethod · 0.80
parse_errorMethod · 0.45
number_integerMethod · 0.45
number_unsignedMethod · 0.45
number_floatMethod · 0.45

Tested by

no test coverage detected