MCPcopy Create free account
hub / github.com/OpenFodder/openfodder / get_ubjson_high_precision_number

Method get_ubjson_high_precision_number

Source/Utils/json.hpp:9827–9874  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

9825 // not exist
9826
9827 bool get_ubjson_high_precision_number()
9828 {
9829 // get size of following number string
9830 std::size_t size{};
9831 auto res = get_ubjson_size_value(size);
9832 if (JSON_HEDLEY_UNLIKELY(!res))
9833 {
9834 return res;
9835 }
9836
9837 // get number string
9838 std::vector<char> number_vector;
9839 for (std::size_t i = 0; i < size; ++i)
9840 {
9841 get();
9842 if (JSON_HEDLEY_UNLIKELY(!unexpect_eof(input_format_t::ubjson, "number")))
9843 {
9844 return false;
9845 }
9846 number_vector.push_back(static_cast<char>(current));
9847 }
9848
9849 // parse number string
9850 auto number_ia = detail::input_adapter(std::forward<decltype(number_vector)>(number_vector));
9851 auto number_lexer = detail::lexer<BasicJsonType, decltype(number_ia)>(std::move(number_ia), false);
9852 const auto result_number = number_lexer.scan();
9853 const auto number_string = number_lexer.get_token_string();
9854 const auto result_remainder = number_lexer.scan();
9855
9856 using token_type = typename detail::lexer_base<BasicJsonType>::token_type;
9857
9858 if (JSON_HEDLEY_UNLIKELY(result_remainder != token_type::end_of_input))
9859 {
9860 return sax->parse_error(chars_read, number_string, parse_error::create(115, chars_read, exception_message(input_format_t::ubjson, "invalid number text: " + number_lexer.get_token_string(), "high-precision number")));
9861 }
9862
9863 switch (result_number)
9864 {
9865 case token_type::value_integer:
9866 return sax->number_integer(number_lexer.get_number_integer());
9867 case token_type::value_unsigned:
9868 return sax->number_unsigned(number_lexer.get_number_unsigned());
9869 case token_type::value_float:
9870 return sax->number_float(number_lexer.get_number_float(), std::move(number_string));
9871 default:
9872 return sax->parse_error(chars_read, number_string, parse_error::create(115, chars_read, exception_message(input_format_t::ubjson, "invalid number text: " + number_lexer.get_token_string(), "high-precision number")));
9873 }
9874 }
9875
9876 ///////////////////////
9877 // Utility functions //

Callers

nothing calls this directly

Calls 9

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

Tested by

no test coverage detected