mirror of
https://github.com/fastfloat/fast_float.git
synced 2025-12-07 01:06:48 +08:00
PVS-Studio founds some errors, I fixed it.
This commit is contained in:
parent
388426e35a
commit
ae29a0dbe5
@ -286,7 +286,7 @@ report_parse_error(UC const *p, parse_error error) noexcept {
|
|||||||
template <typename UC>
|
template <typename UC>
|
||||||
fastfloat_really_inline FASTFLOAT_CONSTEXPR20 parsed_number_string_t<UC>
|
fastfloat_really_inline FASTFLOAT_CONSTEXPR20 parsed_number_string_t<UC>
|
||||||
parse_number_string(UC const *p, UC const *pend,
|
parse_number_string(UC const *p, UC const *pend,
|
||||||
const parse_options_t<UC> options) noexcept {
|
parse_options_t<UC> const &options) noexcept {
|
||||||
|
|
||||||
parsed_number_string_t<UC> answer;
|
parsed_number_string_t<UC> answer;
|
||||||
answer.valid = false;
|
answer.valid = false;
|
||||||
@ -487,7 +487,7 @@ parse_number_string(UC const *p, UC const *pend,
|
|||||||
template <typename T, typename UC>
|
template <typename T, typename UC>
|
||||||
fastfloat_really_inline FASTFLOAT_CONSTEXPR20 from_chars_result_t<UC>
|
fastfloat_really_inline FASTFLOAT_CONSTEXPR20 from_chars_result_t<UC>
|
||||||
parse_int_string(UC const *p, UC const *pend, T &value,
|
parse_int_string(UC const *p, UC const *pend, T &value,
|
||||||
parse_options_t<UC> options) {
|
parse_options_t<UC> const &options) noexcept {
|
||||||
|
|
||||||
from_chars_result_t<UC> answer;
|
from_chars_result_t<UC> answer;
|
||||||
|
|
||||||
|
|||||||
@ -103,15 +103,15 @@ fastfloat_really_inline FASTFLOAT_CONSTEXPR20 adjusted_mantissa
|
|||||||
compute_float(int64_t q, uint64_t w) noexcept {
|
compute_float(int64_t q, uint64_t w) noexcept {
|
||||||
adjusted_mantissa answer;
|
adjusted_mantissa answer;
|
||||||
if ((w == 0) || (q < binary::smallest_power_of_ten())) {
|
if ((w == 0) || (q < binary::smallest_power_of_ten())) {
|
||||||
answer.power2 = 0;
|
// answer.power2 = 0; already set
|
||||||
answer.mantissa = 0;
|
// answer.mantissa = 0; already set
|
||||||
// result should be zero
|
// result should be zero
|
||||||
return answer;
|
return answer;
|
||||||
}
|
}
|
||||||
if (q > binary::largest_power_of_ten()) {
|
if (q > binary::largest_power_of_ten()) {
|
||||||
// we want to get infinity:
|
// we want to get infinity:
|
||||||
answer.power2 = binary::infinite_power();
|
answer.power2 = binary::infinite_power();
|
||||||
answer.mantissa = 0;
|
// answer.mantissa = 0; already set
|
||||||
return answer;
|
return answer;
|
||||||
}
|
}
|
||||||
// At this point in time q is in [powers::smallest_power_of_five,
|
// At this point in time q is in [powers::smallest_power_of_five,
|
||||||
|
|||||||
@ -43,7 +43,7 @@ from_chars(UC const *first, UC const *last, T &value,
|
|||||||
template <typename T, typename UC = char>
|
template <typename T, typename UC = char>
|
||||||
FASTFLOAT_CONSTEXPR20 from_chars_result_t<UC>
|
FASTFLOAT_CONSTEXPR20 from_chars_result_t<UC>
|
||||||
from_chars_advanced(UC const *first, UC const *last, T &value,
|
from_chars_advanced(UC const *first, UC const *last, T &value,
|
||||||
parse_options_t<UC> options) noexcept;
|
parse_options_t<UC> const &options) noexcept;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* from_chars for integer types.
|
* from_chars for integer types.
|
||||||
|
|||||||
@ -1006,9 +1006,9 @@ template <typename T>
|
|||||||
fastfloat_really_inline FASTFLOAT_CONSTEXPR20 void
|
fastfloat_really_inline FASTFLOAT_CONSTEXPR20 void
|
||||||
to_float(
|
to_float(
|
||||||
#ifndef FASTFLOAT_ONLY_POSITIVE_C_NUMBER_WO_INF_NAN
|
#ifndef FASTFLOAT_ONLY_POSITIVE_C_NUMBER_WO_INF_NAN
|
||||||
const bool negative,
|
bool const negative,
|
||||||
#endif
|
#endif
|
||||||
const adjusted_mantissa am, T &value) noexcept {
|
adjusted_mantissa const &am, T &value) noexcept {
|
||||||
using equiv_uint = equiv_uint_t<T>;
|
using equiv_uint = equiv_uint_t<T>;
|
||||||
equiv_uint word = equiv_uint(am.mantissa);
|
equiv_uint word = equiv_uint(am.mantissa);
|
||||||
word = equiv_uint(word | equiv_uint(am.power2)
|
word = equiv_uint(word | equiv_uint(am.power2)
|
||||||
|
|||||||
@ -145,7 +145,7 @@ template <typename T> struct from_chars_caller {
|
|||||||
template <typename UC>
|
template <typename UC>
|
||||||
FASTFLOAT_CONSTEXPR20 static from_chars_result_t<UC>
|
FASTFLOAT_CONSTEXPR20 static from_chars_result_t<UC>
|
||||||
call(UC const *first, UC const *last, T &value,
|
call(UC const *first, UC const *last, T &value,
|
||||||
parse_options_t<UC> options) noexcept {
|
parse_options_t<UC> const &options) noexcept {
|
||||||
return from_chars_advanced(first, last, value, options);
|
return from_chars_advanced(first, last, value, options);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
@ -155,7 +155,7 @@ template <> struct from_chars_caller<std::float32_t> {
|
|||||||
template <typename UC>
|
template <typename UC>
|
||||||
FASTFLOAT_CONSTEXPR20 static from_chars_result_t<UC>
|
FASTFLOAT_CONSTEXPR20 static from_chars_result_t<UC>
|
||||||
call(UC const *first, UC const *last, std::float32_t &value,
|
call(UC const *first, UC const *last, std::float32_t &value,
|
||||||
parse_options_t<UC> options) noexcept {
|
parse_options_t<UC> const &options) noexcept {
|
||||||
// if std::float32_t is defined, and we are in C++23 mode; macro set for
|
// if std::float32_t is defined, and we are in C++23 mode; macro set for
|
||||||
// float32; set value to float due to equivalence between float and
|
// float32; set value to float due to equivalence between float and
|
||||||
// float32_t
|
// float32_t
|
||||||
@ -172,7 +172,7 @@ template <> struct from_chars_caller<std::float64_t> {
|
|||||||
template <typename UC>
|
template <typename UC>
|
||||||
FASTFLOAT_CONSTEXPR20 static from_chars_result_t<UC>
|
FASTFLOAT_CONSTEXPR20 static from_chars_result_t<UC>
|
||||||
call(UC const *first, UC const *last, std::float64_t &value,
|
call(UC const *first, UC const *last, std::float64_t &value,
|
||||||
parse_options_t<UC> options) noexcept {
|
parse_options_t<UC> const &options) noexcept {
|
||||||
// if std::float64_t is defined, and we are in C++23 mode; macro set for
|
// if std::float64_t is defined, and we are in C++23 mode; macro set for
|
||||||
// float64; set value as double due to equivalence between double and
|
// float64; set value as double due to equivalence between double and
|
||||||
// float64_t
|
// float64_t
|
||||||
@ -199,7 +199,7 @@ from_chars(UC const *first, UC const *last, T &value,
|
|||||||
*/
|
*/
|
||||||
template <typename T, typename UC>
|
template <typename T, typename UC>
|
||||||
FASTFLOAT_CONSTEXPR20 from_chars_result_t<UC>
|
FASTFLOAT_CONSTEXPR20 from_chars_result_t<UC>
|
||||||
from_chars_advanced(const parsed_number_string_t<UC> &pns, T &value) noexcept {
|
from_chars_advanced(parsed_number_string_t<UC> const &pns, T &value) noexcept {
|
||||||
|
|
||||||
static_assert(is_supported_float_type<T>::value,
|
static_assert(is_supported_float_type<T>::value,
|
||||||
"only some floating-point types are supported");
|
"only some floating-point types are supported");
|
||||||
@ -300,7 +300,7 @@ from_chars_advanced(const parsed_number_string_t<UC> &pns, T &value) noexcept {
|
|||||||
template <typename T, typename UC>
|
template <typename T, typename UC>
|
||||||
FASTFLOAT_CONSTEXPR20 from_chars_result_t<UC>
|
FASTFLOAT_CONSTEXPR20 from_chars_result_t<UC>
|
||||||
from_chars_float_advanced(UC const *first, UC const *last, T &value,
|
from_chars_float_advanced(UC const *first, UC const *last, T &value,
|
||||||
const parse_options_t<UC> options) noexcept {
|
parse_options_t<UC> const &options) noexcept {
|
||||||
|
|
||||||
static_assert(is_supported_float_type<T>::value,
|
static_assert(is_supported_float_type<T>::value,
|
||||||
"only some floating-point types are supported");
|
"only some floating-point types are supported");
|
||||||
@ -359,7 +359,7 @@ from_chars(UC const *first, UC const *last, T &value, int base) noexcept {
|
|||||||
template <typename T, typename UC>
|
template <typename T, typename UC>
|
||||||
FASTFLOAT_CONSTEXPR20 from_chars_result_t<UC>
|
FASTFLOAT_CONSTEXPR20 from_chars_result_t<UC>
|
||||||
from_chars_int_advanced(UC const *first, UC const *last, T &value,
|
from_chars_int_advanced(UC const *first, UC const *last, T &value,
|
||||||
const parse_options_t<UC> options) noexcept {
|
parse_options_t<UC> const &options) noexcept {
|
||||||
|
|
||||||
static_assert(is_supported_integer_type<T>::value,
|
static_assert(is_supported_integer_type<T>::value,
|
||||||
"only integer types are supported");
|
"only integer types are supported");
|
||||||
@ -398,7 +398,7 @@ template <> struct from_chars_advanced_caller<1> {
|
|||||||
template <typename T, typename UC>
|
template <typename T, typename UC>
|
||||||
FASTFLOAT_CONSTEXPR20 static from_chars_result_t<UC>
|
FASTFLOAT_CONSTEXPR20 static from_chars_result_t<UC>
|
||||||
call(UC const *first, UC const *last, T &value,
|
call(UC const *first, UC const *last, T &value,
|
||||||
const parse_options_t<UC> options) noexcept {
|
parse_options_t<UC> const &options) noexcept {
|
||||||
return from_chars_float_advanced(first, last, value, options);
|
return from_chars_float_advanced(first, last, value, options);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
@ -407,7 +407,7 @@ template <> struct from_chars_advanced_caller<2> {
|
|||||||
template <typename T, typename UC>
|
template <typename T, typename UC>
|
||||||
FASTFLOAT_CONSTEXPR20 static from_chars_result_t<UC>
|
FASTFLOAT_CONSTEXPR20 static from_chars_result_t<UC>
|
||||||
call(UC const *first, UC const *last, T &value,
|
call(UC const *first, UC const *last, T &value,
|
||||||
const parse_options_t<UC> options) noexcept {
|
parse_options_t<UC> const &options) noexcept {
|
||||||
return from_chars_int_advanced(first, last, value, options);
|
return from_chars_int_advanced(first, last, value, options);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
@ -415,7 +415,7 @@ template <> struct from_chars_advanced_caller<2> {
|
|||||||
template <typename T, typename UC>
|
template <typename T, typename UC>
|
||||||
FASTFLOAT_CONSTEXPR20 from_chars_result_t<UC>
|
FASTFLOAT_CONSTEXPR20 from_chars_result_t<UC>
|
||||||
from_chars_advanced(UC const *first, UC const *last, T &value,
|
from_chars_advanced(UC const *first, UC const *last, T &value,
|
||||||
const parse_options_t<UC> options) noexcept {
|
parse_options_t<UC> const &options) noexcept {
|
||||||
return from_chars_advanced_caller<
|
return from_chars_advanced_caller<
|
||||||
size_t(is_supported_float_type<T>::value) +
|
size_t(is_supported_float_type<T>::value) +
|
||||||
2 * size_t(is_supported_integer_type<T>::value)>::call(first, last, value,
|
2 * size_t(is_supported_integer_type<T>::value)>::call(first, last, value,
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user