| 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 // |
nothing calls this directly
no test coverage detected