From 3d6ecf4c75d142859287a23eefeb95b09bf2106a Mon Sep 17 00:00:00 2001 From: Matt Borland Date: Tue, 14 Mar 2023 08:15:43 -0700 Subject: [PATCH] Move properties structs --- include/boost/charconv/detail/bit_layouts.hpp | 40 +++++++++++++++++++ 1 file changed, 40 insertions(+) diff --git a/include/boost/charconv/detail/bit_layouts.hpp b/include/boost/charconv/detail/bit_layouts.hpp index 3d8ff06..9cfb49b 100644 --- a/include/boost/charconv/detail/bit_layouts.hpp +++ b/include/boost/charconv/detail/bit_layouts.hpp @@ -26,6 +26,26 @@ struct IEEEf2bits #endif }; +struct ieee754_binary32 +{ + static constexpr int significand_bits = 23; + static constexpr int exponent_bits = 8; + static constexpr int min_exponent = -126; + static constexpr int max_exponent = 127; + static constexpr int exponent_bias = -127; + static constexpr int decimal_digits = 9; +}; + +#ifdef BOOST_NO_CXX17_INLINE_VARIABLES +// Definitions of in-class constexpr members are allowed but deprecated in C++17 +constexpr int ieee754_binary32::significand_bits; +constexpr int ieee754_binary32::exponent_bits; +constexpr int ieee754_binary32::min_exponent; +constexpr int ieee754_binary32::max_exponent; +constexpr int ieee754_binary32::exponent_bias; +constexpr int ieee754_binary32::decimal_digits; +#endif + struct IEEEd2bits { #if BOOST_CHARCONV_ENDIAN_LITTLE_BYTE @@ -41,6 +61,26 @@ struct IEEEd2bits #endif }; +struct ieee754_binary64 +{ + static constexpr int significand_bits = 52; + static constexpr int exponent_bits = 11; + static constexpr int min_exponent = -1022; + static constexpr int max_exponent = 1023; + static constexpr int exponent_bias = -1023; + static constexpr int decimal_digits = 17; +}; + +#ifdef BOOST_NO_CXX17_INLINE_VARIABLES +// Definitions of in-class constexpr members are allowed but deprecated in C++17 +constexpr int ieee754_binary64::significand_bits; +constexpr int ieee754_binary64::exponent_bits; +constexpr int ieee754_binary64::min_exponent; +constexpr int ieee754_binary64::max_exponent; +constexpr int ieee754_binary64::exponent_bias; +constexpr int ieee754_binary64::decimal_digits; +#endif + // 80 bit long double (e.g. x86-64) #if LDBL_MANT_DIG == 64 && LDBL_MAX_EXP == 16384