25#pragma push_macro("_VALIDATE_RETURN_VOID")
26#pragma push_macro("_VALIDATE_RETURN")
27#pragma push_macro("_INVALID_PARAMETER")
28#undef _VALIDATE_RETURN_VOID
29#undef _VALIDATE_RETURN
30#undef _INVALID_PARAMETER
33 #define _INVALID_PARAMETER(expr) _invalid_parameter(expr, __FUNCTIONW__, __FILEW__, __LINE__, 0)
35 #define _INVALID_PARAMETER(expr) _invalid_parameter_noinfo()
38#define _VALIDATE_RETURN(expr, errorcode, retexpr) \
40 int _Expr_val = !!(expr); \
41 _ASSERT_EXPR((_Expr_val), _CRT_WIDE(#expr)); \
44 *_errno() = (errorcode); \
45 _INVALID_PARAMETER(_CRT_WIDE(#expr)); \
50#define _VALIDATE_RETURN_VOID(expr, errorcode) \
52 int _Expr_val = !!(expr); \
53 _ASSERT_EXPR((_Expr_val), _CRT_WIDE(#expr)); \
56 *_errno() = (errorcode); \
57 _INVALID_PARAMETER(_CRT_WIDE(#expr)); \
90 #define DIGIT_RANGE_TEST(zero) \
120 #undef DIGIT_RANGE_TEST
130 if (
c >=
'0' &&
c <=
'9')
132 return static_cast<unsigned>(
c -
'0');
135 if (
c >=
'a' &&
c <=
'z')
137 return static_cast<unsigned>(
c -
'a' + 10);
140 if (
c >=
'A' &&
c <=
'Z')
142 return static_cast<unsigned>(
c -
'A' + 10);
145 return static_cast<unsigned>(-1);
152 return static_cast<unsigned>(
value);
157 return static_cast<unsigned>(-1);
165 if (
c >=
'0' &&
c <=
'9')
168 if (
c >=
'a' &&
c <=
'z')
171 if (
c >=
'A' &&
c <=
'Z')
204template <
typename Un
signedInteger>
222template <
typename Un
signedInteger,
typename CharacterSource,
bool TrimWhitespace = true>
224 __crt_cached_ptd_host&
ptd,
227 bool const is_result_signed
232 using char_type =
typename CharacterSource::char_type;
238 UnsignedInteger
number{0};
240 auto const initial_state =
source.save_state();
245 if constexpr (TrimWhitespace)
262 if (
c ==
'-' ||
c ==
'+')
279 char_type
const next_c =
source.get();
280 if (next_c ==
'x' || next_c ==
'X')
299 UnsignedInteger
const max_pre_multiply_value =
static_cast<UnsignedInteger
>(-1) /
base;
304 if (digit >=
static_cast<unsigned>(
base))
313 UnsignedInteger
const number_after_multiply =
number *
base;
314 UnsignedInteger
const number_after_add = number_after_multiply + digit;
319 number = number_after_add;
329 source.restore_state(initial_state);
339 number =
static_cast<UnsignedInteger
>(-1);
358template <
typename Un
signedInteger,
typename CharacterSource>
363 bool const is_result_signed
367 return parse_integer<UnsignedInteger>(
ptd,
static_cast<CharacterSource&&
>(
source),
base, is_result_signed);
453 template <
typename T>
476 return *
static_cast<double*
>(
_value);
482 return *
static_cast<float*
>(
_value);
503template <
typename FloatingType>
510 result_components._sign = is_negative ? 1 : 0;
511 result_components._exponent = 0;
512 result_components._mantissa = 0;
528template <
typename FloatingType>
535 result_components._sign = is_negative ? 1 : 0;
536 result_components._exponent = floating_traits::exponent_mask;
537 result_components._mantissa = 0;
553template <
typename FloatingType>
560 result_components._sign = is_negative ? 1 : 0;
561 result_components._exponent = floating_traits::exponent_mask;
562 result_components._mantissa = floating_traits::denormal_mantissa_mask;
578template <
typename FloatingType>
585 result_components._sign = is_negative ? 1 : 0;
586 result_components._exponent = floating_traits::exponent_mask;
587 result_components._mantissa = 1;
603template <
typename FloatingType>
610 result_components._sign = 1;
611 result_components._exponent = floating_traits::exponent_mask;
612 result_components._mantissa = floating_traits::special_nan_mantissa_mask;
640 bool const is_negative,
642 bool const round_bit,
643 bool const has_tail_bits
648 bool const is_exactly_representable = !round_bit && !has_tail_bits;
649 if (is_exactly_representable)
662 case FE_TONEAREST:
return round_bit && (has_tail_bits || lsb_bit);
668 _ASSERTE((
"unexpected rounding mode",
false));
677 bool const is_negative,
680 bool const has_zero_tail
694 bool const lsb_bit = (
value & lsb_bit_mask) != 0;
695 bool const round_bit = (
value & round_bit_mask) != 0;
696 bool const tail_bits = !has_zero_tail || (
value & extra_bits_mask) != 0;
717template <
typename FloatingType>
719 bool const is_negative,
729 result_components._sign = is_negative;
730 result_components._exponent =
exponent + floating_traits::exponent_bias;
731 result_components._mantissa = mantissa;
737 int32_t const initial_exponent,
738 bool const is_negative,
739 bool const has_zero_tail,
748 int32_t const normal_mantissa_shift =
static_cast<int32_t>(
result.mantissa_bits() - initial_mantissa_bits);
749 int32_t const normal_exponent = initial_exponent - normal_mantissa_shift;
751 uint64_t mantissa = initial_mantissa;
754 if (normal_exponent >
result.maximum_binary_exponent())
761 else if (normal_exponent <
result.minimum_binary_exponent())
769 int32_t const denormal_mantissa_shift =
770 normal_mantissa_shift +
779 if (denormal_mantissa_shift < 0)
809 if (mantissa >
result.denormal_mantissa_mask())
816 (denormal_mantissa_shift + 1) -
817 normal_mantissa_shift;
822 mantissa <<= denormal_mantissa_shift;
827 if (normal_mantissa_shift < 0)
837 if (mantissa >
result.normal_mantissa_mask())
851 else if (normal_mantissa_shift > 0)
853 mantissa <<= normal_mantissa_shift;
859 mantissa &=
result.denormal_mantissa_mask();
873 uint32_t const integer_bits_of_precision,
874 bool const is_negative,
875 bool const has_nonzero_fractional_part,
883 if (integer_bits_of_precision <= 64)
887 uint32_t const mantissa_low = integer_value._used > 0 ? integer_value._data[0] : 0;
888 uint32_t const mantissa_high = integer_value._used > 1 ? integer_value._data[1] : 0;
891 (
static_cast<uint64_t>(mantissa_high) << 32);
896 uint32_t const top_element_bits = integer_bits_of_precision % 32;
897 uint32_t const top_element_index = integer_bits_of_precision / 32;
899 uint32_t const middle_element_index = top_element_index - 1;
900 uint32_t const bottom_element_index = top_element_index - 2;
904 if (top_element_bits == 0)
909 integer_value._data[bottom_element_index] +
910 (
static_cast<uint64_t>(integer_value._data[middle_element_index]) << 32);
912 bool has_zero_tail = !has_nonzero_fractional_part;
913 for (
uint32_t i = 0;
i != bottom_element_index; ++
i)
915 has_zero_tail &= integer_value._data[
i] == 0;
923 uint32_t const top_element_mask = (1u << top_element_bits) - 1;
924 uint32_t const top_element_shift = 64 - top_element_bits;
926 uint32_t const middle_element_shift = top_element_shift - 32;
928 uint32_t const bottom_element_bits = 32 - top_element_bits;
929 uint32_t const bottom_element_mask = ~top_element_mask;
930 uint32_t const bottom_element_shift = 32 - bottom_element_bits;
932 int32_t const exponent = base_exponent + bottom_element_index * 32 + top_element_bits;
935 (
static_cast<uint64_t>(integer_value._data[top_element_index] & top_element_mask) << top_element_shift) +
936 (
static_cast<uint64_t>(integer_value._data[middle_element_index]) << middle_element_shift) +
937 (
static_cast<uint64_t>(integer_value._data[bottom_element_index] & bottom_element_mask) >> bottom_element_shift);
940 !has_nonzero_fractional_part &&
941 (integer_value._data[bottom_element_index] & top_element_mask) == 0;
943 for (
uint32_t i = 0;
i != bottom_element_index; ++
i)
945 has_zero_tail &= integer_value._data[
i] == 0;
954 uint8_t const*
const first_digit,
955 uint8_t const*
const last_digit,
964 for (
uint8_t const* it = first_digit; it != last_digit; ++it)
966 if (accumulator_count == 9)
972 accumulator_count = 0;
980 if (accumulator_count != 0)
1001 uint32_t const required_bits_of_precision =
result.mantissa_bits() + 1;
1011 uint32_t const integer_digits_present =
__min(positive_exponent,
data._mantissa_count);
1012 uint32_t const integer_digits_missing = positive_exponent - integer_digits_present;
1013 uint8_t const*
const integer_first =
data._mantissa;
1014 uint8_t const*
const integer_last =
data._mantissa + integer_digits_present;
1016 uint8_t const*
const fractional_first = integer_last;
1017 uint8_t const*
const fractional_last =
data._mantissa +
data._mantissa_count;
1018 uint32_t const fractional_digits_present =
static_cast<uint32_t>(fractional_last - fractional_first);
1024 if (integer_digits_missing > 0)
1038 if (integer_bits_of_precision >= required_bits_of_precision ||
1039 fractional_digits_present == 0)
1043 integer_bits_of_precision,
1045 fractional_digits_present != 0,
1059 uint32_t const fractional_denominator_exponent =
data._exponent < 0
1060 ? fractional_digits_present +
static_cast<uint32_t>(-
data._exponent)
1061 : fractional_digits_present;
1082 uint32_t const fractional_shift = fractional_denominator_bits > fractional_numerator_bits
1083 ? fractional_denominator_bits - fractional_numerator_bits
1086 if (fractional_shift > 0)
1088 shift_left(fractional_numerator, fractional_shift);
1091 uint32_t const required_fractional_bits_of_precision =
1092 required_bits_of_precision -
1093 integer_bits_of_precision;
1095 uint32_t remaining_bits_of_precision_required = required_fractional_bits_of_precision;
1096 if (integer_bits_of_precision > 0)
1110 if (fractional_shift > remaining_bits_of_precision_required)
1114 integer_bits_of_precision,
1116 fractional_digits_present != 0,
1120 remaining_bits_of_precision_required -= fractional_shift;
1128 uint32_t const fractional_exponent = fractional_numerator < fractional_denominator
1129 ? fractional_shift + 1
1132 shift_left(fractional_numerator, remaining_bits_of_precision_required);
1133 uint64_t fractional_mantissa =
divide(fractional_numerator, fractional_denominator);
1135 bool has_zero_tail = fractional_numerator._used == 0;
1140 if (fractional_mantissa_bits > required_fractional_bits_of_precision)
1142 uint32_t const shift = fractional_mantissa_bits - required_fractional_bits_of_precision;
1143 has_zero_tail = has_zero_tail && (fractional_mantissa & ((1ull <<
shift) - 1)) == 0;
1144 fractional_mantissa >>=
shift;
1148 uint32_t const integer_mantissa_low = integer_value._used > 0 ? integer_value._data[0] : 0;
1149 uint32_t const integer_mantissa_high = integer_value._used > 1 ? integer_value._data[1] : 0;
1151 integer_mantissa_low +
1152 (
static_cast<uint64_t>(integer_mantissa_high) << 32);
1155 (integer_mantissa << required_fractional_bits_of_precision) +
1156 fractional_mantissa;
1168 int32_t const final_exponent = integer_bits_of_precision > 0
1169 ? integer_bits_of_precision - 2
1170 : -
static_cast<int32_t>(fractional_exponent) - 1;
1175template <
typename FloatingType>
1193 uint8_t const*
const mantissa_last =
data._mantissa +
data._mantissa_count;
1195 while (mantissa_it != mantissa_last && mantissa <=
result.normal_mantissa_mask())
1198 mantissa += *mantissa_it++;
1202 bool has_zero_tail =
true;
1203 while (mantissa_it != mantissa_last && has_zero_tail)
1205 has_zero_tail = has_zero_tail && *mantissa_it++ == 0;
1211template <
typename FloatingType>
1232 floating_point_string
const&
data,
1237 floating_point_string
const&
data,
1241template <
typename Character,
typename CharacterSource>
1244 Character
const*
const lowercase,
1250 for (
size_t i = 0;
i !=
count; ++
i)
1263template <
typename Character,
typename CharacterSource>
1269 static Character
const uppercase[] = {
'S',
'N',
'A',
'N',
')' };
1270 static Character
const lowercase[] = {
's',
'n',
'a',
'n',
')' };
1274template <
typename Character,
typename CharacterSource>
1280 static Character
const uppercase[] = {
'I',
'N',
'D',
')' };
1281 static Character
const lowercase[] = {
'i',
'n',
'd',
')' };
1285template <
typename Character,
typename CharacterSource,
typename StoredState>
1289 StoredState stored_state
1292 using char_type =
typename CharacterSource::char_type;
1294 auto restore_state = [&]()
1298 return source.restore_state(stored_state);
1301 static char_type
const inf_uppercase[] = {
'I',
'N',
'F' };
1302 static char_type
const inf_lowercase[] = {
'i',
'n',
'f' };
1309 stored_state =
source.save_state();
1312 static char_type
const inity_uppercase[] = {
'I',
'N',
'I',
'T',
'Y' };
1313 static char_type
const inity_lowercase[] = {
'i',
'n',
'i',
't',
'y' };
1316 return restore_state()
1325template <
typename Character,
typename CharacterSource,
typename StoredState>
1329 StoredState stored_state
1332 using char_type =
typename CharacterSource::char_type;
1334 auto restore_state = [&]()
1338 return source.restore_state(stored_state);
1341 static char_type
const uppercase[] = {
'N',
'A',
'N' };
1342 static char_type
const lowercase[] = {
'n',
'a',
'n' };
1349 stored_state =
source.save_state();
1354 return restore_state()
1379 while (
c !=
')' &&
c !=
'\0')
1383 return restore_state()
1393 return restore_state()
1401template <
typename CharacterSource>
1404 CharacterSource &
source,
1408 using char_type =
typename CharacterSource::char_type;
1415 auto stored_state =
source.save_state();
1418 auto restore_state = [&]()
1422 return source.restore_state(stored_state);
1432 fp_string._is_negative =
c ==
'-';
1433 if (
c ==
'-' ||
c ==
'+')
1440 if (
c ==
'I' ||
c ==
'i')
1447 if (
c ==
'N' ||
c ==
'n')
1453 bool is_hexadecimal{
false};
1456 auto const next_stored_state =
source.save_state();
1458 char_type
const next_c{
source.get()};
1459 if (next_c ==
'x' || next_c ==
'X')
1461 is_hexadecimal =
true;
1469 stored_state = next_stored_state;
1477 uint8_t* mantissa_first{fp_string._mantissa};
1478 uint8_t*
const mantissa_last {fp_string._mantissa +
_countof(fp_string._mantissa)};
1479 uint8_t* mantissa_it {fp_string._mantissa};
1484 int exponent_adjustment{0};
1488 bool found_digits{
false};
1493 found_digits =
true;
1500 unsigned const max_digit_value{is_hexadecimal ? 0xfu : 9u};
1503 if (digit_value > max_digit_value)
1508 found_digits =
true;
1509 if (mantissa_it != mantissa_last)
1511 *mantissa_it++ =
static_cast<uint8_t>(digit_value);
1514 ++exponent_adjustment;
1518 char const radix_point{*
locale->locinfo->lconv->decimal_point};
1519 if (
c == radix_point)
1526 if (mantissa_it == mantissa_first)
1530 found_digits =
true;
1531 --exponent_adjustment;
1538 unsigned const max_digit_value{is_hexadecimal ? 0xfu : 9u};
1541 if (digit_value > max_digit_value)
1544 found_digits =
true;
1545 if (mantissa_it != mantissa_last)
1547 *mantissa_it++ =
static_cast<uint8_t>(digit_value);
1558 if (!restore_state())
1578 stored_state =
source.save_state();
1582 bool has_exponent{
false};
1587 has_exponent = !is_hexadecimal;
1592 has_exponent = is_hexadecimal;
1603 bool const exponent_is_negative{
c ==
'-'};
1604 if (
c ==
'+' ||
c ==
'-')
1609 bool has_exponent_digits{
false};
1613 has_exponent_digits =
true;
1620 if (digit_value >= 10)
1625 has_exponent_digits =
true;
1641 if (exponent_is_negative)
1648 if (!has_exponent_digits)
1650 if (restore_state())
1669 while (mantissa_it != mantissa_first && *(mantissa_it - 1) == 0)
1679 if (mantissa_it == mantissa_first)
1700 int const exponent_adjustment_multiplier{is_hexadecimal ? 4 : 1};
1702 exponent += exponent_adjustment * exponent_adjustment_multiplier;
1717 fp_string._mantissa_count =
static_cast<uint32_t>(mantissa_it - mantissa_first);
1719 return is_hexadecimal
1724template <
typename FloatingType>
1728 FloatingType*
const result
1731 switch (parse_result)
1753template <
typename CharacterSource,
typename FloatingType>
1757 FloatingType*
const result
1760 using char_type =
typename CharacterSource::char_type;
1786template <
typename Character>
1794 Character
const*
const string,
1795 Character
const**
const end
1809 other._end =
nullptr;
1818 other._end =
nullptr;
1867template <
typename Character,
typename EndPo
inter>
1869 Character
const*
const string,
1870 EndPointer
const end
1876template <
typename Integer,
typename Character,
typename EndPo
inter>
1878 Character
const*
const string,
1879 EndPointer
const end,
1886 return static_cast<Integer
>(parse_integer<typename make_unsigned<Integer>::type>(
1893template <
typename InputAdapter>
1902 InputAdapter*
const input_adapter,
1904 bool*
const succeeded
1921 other._input_adapter =
nullptr;
1922 other._succeeded =
nullptr;
1932 other._input_adapter =
nullptr;
1933 other._succeeded =
nullptr;
1964 if (
c == traits::eof)
1977 if (
c ==
'\0' ||
c == traits::eof)
2010template <
typename InputAdapter>
2012 InputAdapter*
const input_adapter,
2014 bool*
const succeeded
2027template <
typename Character,
typename EndPo
inter,
bool TrimWhitespace = false>
2029 __crt_cached_ptd_host&
ptd,
2030 Character
const*
const string,
2031 EndPointer
const end,
2035 return static_cast<long>(__crt_strtox::parse_integer<unsigned long, __crt_strtox::c_string_character_source<Character>, TrimWhitespace>(
2043#pragma pop_macro("_INVALID_PARAMETER")
2044#pragma pop_macro("_VALIDATE_RETURN")
2045#pragma pop_macro("_VALIDATE_RETURN_VOID")
ios_base &_STLP_CALL uppercase(ios_base &__s)
Character const * save_state() const
c_string_character_source(c_string_character_source &&other)
c_string_character_source(c_string_character_source const &)=delete
~c_string_character_source()
void unget(Character const c)
c_string_character_source(Character const *const string, Character const **const end)
c_string_character_source & operator=(c_string_character_source &&other)
bool restore_state(Character const *const state)
c_string_character_source & operator=(c_string_character_source const &)=delete
floating_point_value(double *const value)
int32_t mantissa_bits() const
int32_t exponent_bias() const
double & as_double() const
int32_t exponent_bits() const
int32_t maximum_binary_exponent() const
int32_t minimum_binary_exponent() const
floating_point_value(float *const value)
uint64_t exponent_mask() const
uint64_t special_nan_mantissa_mask() const
uint64_t denormal_mantissa_mask() const
uint64_t normal_mantissa_mask() const
#define _UCRT_VALIDATE_RETURN(ptd, expr, errorcode, retexpr)
__forceinline long __cdecl _tcstol_internal(__crt_cached_ptd_host &ptd, Character const *const string, EndPointer const end, int const base)
#define _VALIDATE_RETURN_VOID(expr, errorcode)
#define _VALIDATE_RETURN(expr, errorcode, retexpr)
#define DIGIT_RANGE_TEST(zero)
int __cdecl fegetround(void)
result_buffer_count char *const _In_ int const _In_ bool const _In_ unsigned const _In_ STRFLT const _In_ bool const _Inout_ __crt_cached_ptd_host &ptd throw()
floating_traits::components_type components_type
_In_ size_t const _In_ int _In_ bool const _In_ unsigned const _In_ __acrt_rounding_mode const _Inout_ __crt_cached_ptd_host & ptd
GLuint GLuint GLsizei count
GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * data
GLint GLint GLsizei width
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
#define _isspace_l(_Char, _Locale)
__forceinline int __CRTDECL __ascii_iswalpha(int const _C)
__forceinline int __CRTDECL __ascii_towupper(int const _C)
static unsigned int number
static unsigned(__cdecl *hash_bstr)(bstr_t s)
floating_point_parse_result __cdecl parse_floating_point_from_source(_locale_t const locale, CharacterSource &source, floating_point_string &fp_string)
floating_point_parse_result __cdecl parse_floating_point_possible_infinity(Character &c, CharacterSource &source, StoredState stored_state)
void __cdecl assemble_floating_point_ind(_LDBL12 &result)
SLD_STATUS __cdecl convert_hexadecimal_string_to_floating_type(floating_point_string const &data, _LDBL12 &result)
__forceinline uint32_t __cdecl bit_scan_reverse(uint32_t const value)
__forceinline bool __cdecl add(big_integer &x, uint32_t const value)
floating_point_parse_result __cdecl parse_floating_point_possible_nan(Character &c, CharacterSource &source, StoredState stored_state)
SLD_STATUS __cdecl assemble_floating_point_value(uint64_t const initial_mantissa, int32_t const initial_exponent, bool const is_negative, bool const has_zero_tail, floating_point_value const &result)
long minimum_signed_value(unsigned long)
__forceinline Integer __cdecl parse_integer_from_string(Character const *const string, EndPointer const end, int const base, _locale_t const locale)
@ minimum_temporary_decimal_exponent
@ maximum_temporary_decimal_exponent
bool __cdecl parse_floating_point_possible_nan_is_ind(Character &c, CharacterSource &source)
floating_point_parse_result
__forceinline bool __cdecl should_round_up(bool const is_negative, bool const lsb_bit, bool const round_bit, bool const has_tail_bits)
__forceinline bool __cdecl is_digit_or_nondigit(int const c)
input_adapter_character_source< InputAdapter > __cdecl make_input_adapter_character_source(InputAdapter *const input_adapter, uint64_t const width, bool *const succeeded)
__forceinline uint64_t __cdecl right_shift_with_rounding(bool const is_negative, uint64_t const value, uint32_t const shift, bool const has_zero_tail)
SLD_STATUS __cdecl convert_hexadecimal_string_to_floating_type_common(floating_point_string const &data, floating_point_value const &result)
bool is_overflow_condition(unsigned const flags, UnsignedInteger const number)
SLD_STATUS __cdecl convert_decimal_string_to_floating_type_common(floating_point_string const &data, floating_point_value const &result)
long maximum_signed_value(unsigned long)
__forceinline big_integer __cdecl make_big_integer(uint64_t const value)
SLD_STATUS __cdecl assemble_floating_point_value_t(bool const is_negative, int32_t const exponent, uint64_t const mantissa, FloatingType &result)
SLD_STATUS __cdecl parse_floating_point_write_result(floating_point_parse_result const parse_result, floating_point_string const &fp_string, FloatingType *const result)
void __cdecl assemble_floating_point_infinity(bool const is_negative, _LDBL12 &result)
uint64_t __cdecl divide(big_integer &numerator, big_integer const &denominator)
UnsignedInteger __cdecl parse_integer(__crt_cached_ptd_host &ptd, CharacterSource source, int base, bool const is_result_signed)
bool __cdecl parse_next_characters_from_source(Character const *const uppercase, Character const *const lowercase, size_t const count, Character &c, CharacterSource &source)
void __cdecl assemble_floating_point_zero(bool const is_negative, _LDBL12 &result)
c_string_character_source< Character > __cdecl make_c_string_character_source(Character const *const string, EndPointer const end)
__forceinline bool __cdecl multiply(big_integer &multiplicand, uint32_t const multiplier)
__forceinline bool __cdecl multiply_by_power_of_ten(big_integer &x, uint32_t const power)
__forceinline bool __cdecl shift_left(big_integer &x, uint32_t const n)
__forceinline int __cdecl wide_character_to_digit(wchar_t const c)
void __cdecl assemble_floating_point_snan(bool const is_negative, _LDBL12 &result)
__forceinline unsigned __cdecl parse_digit(char const c)
__forceinline void __cdecl accumulate_decimal_digits_into_big_integer(uint8_t const *const first_digit, uint8_t const *const last_digit, big_integer &result)
bool __cdecl parse_floating_point_possible_nan_is_snan(Character &c, CharacterSource &source)
SLD_STATUS __cdecl parse_floating_point(_locale_t const locale, CharacterSource source, FloatingType *const result)
void __cdecl assemble_floating_point_qnan(bool const is_negative, _LDBL12 &result)
SLD_STATUS __cdecl convert_decimal_string_to_floating_type(floating_point_string const &data, _LDBL12 &result)
SLD_STATUS __cdecl assemble_floating_point_value_from_big_integer(big_integer const &integer_value, uint32_t const integer_bits_of_precision, bool const is_negative, bool const has_nonzero_fractional_part, floating_point_value const &result)
#define _ASSERT_AND_INVOKE_WATSON(expr)