From 2a74463013d28bb5ac16c0de290e1c9ed79dac28 Mon Sep 17 00:00:00 2001 From: Benjamin Kosnik Date: Mon, 10 Dec 2001 08:41:03 +0000 Subject: [PATCH] locale_facets.h (__num_base::_S_scale_hex): Add. 2001-12-09 Benjamin Kosnik Philip Martin * include/bits/locale_facets.h (__num_base::_S_scale_hex): Add. (__num_base::_S_scale_oct): Add. * src/locale.cc: Add definitions. * testsuite/27_io/istream_extractor_arith.cc (main): Call test13. * testsuite/testsuite_hooks.h: Remove duplicate VERIFY define. Co-Authored-By: Philip Martin From-SVN: r47837 --- libstdc++-v3/ChangeLog | 10 ++++++++++ libstdc++-v3/include/bits/locale_facets.h | 6 ++++++ libstdc++-v3/include/bits/locale_facets.tcc | 12 +++++++----- libstdc++-v3/src/locale.cc | 4 ++++ .../testsuite/27_io/istream_extractor_arith.cc | 3 ++- libstdc++-v3/testsuite/testsuite_hooks.h | 1 - 6 files changed, 29 insertions(+), 7 deletions(-) diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog index 71848d1041a..e2d7b7e9840 100644 --- a/libstdc++-v3/ChangeLog +++ b/libstdc++-v3/ChangeLog @@ -1,3 +1,13 @@ +2001-12-09 Benjamin Kosnik + Philip Martin + + * include/bits/locale_facets.h (__num_base::_S_scale_hex): Add. + (__num_base::_S_scale_oct): Add. + * src/locale.cc: Add definitions. + * testsuite/27_io/istream_extractor_arith.cc (main): Call test13. + + * testsuite/testsuite_hooks.h: Remove duplicate VERIFY define. + 2001-12-07 Nathan Myers Loren Rittle diff --git a/libstdc++-v3/include/bits/locale_facets.h b/libstdc++-v3/include/bits/locale_facets.h index 27bd5b15ac7..a992c455093 100644 --- a/libstdc++-v3/include/bits/locale_facets.h +++ b/libstdc++-v3/include/bits/locale_facets.h @@ -439,6 +439,12 @@ namespace std // Construct and return valid scanf format for integer types. static void _S_format_int(const ios_base& __io, char* __fptr, char __mod, char __modl); + + // Used to establish gating factor for base 16 input. + static const double _S_scale_hex; + + // Used to establish gating factor for base 8 input. + static const double _S_scale_oct; }; template diff --git a/libstdc++-v3/include/bits/locale_facets.tcc b/libstdc++-v3/include/bits/locale_facets.tcc index 51bc9edb5dc..5f22cde02a2 100644 --- a/libstdc++-v3/include/bits/locale_facets.tcc +++ b/libstdc++-v3/include/bits/locale_facets.tcc @@ -35,7 +35,7 @@ #include #include // For localeconv #include // For strof, strtold -#include // For ceil +#include // For ceil #include // For numeric_limits #include // For auto_ptr #include // For streambuf_iterators @@ -299,11 +299,13 @@ namespace std // Figure out the maximum number of digits that can be extracted // for the given type, using the determined base. int __max_digits; - if (__base != 10) - __max_digits = static_cast(ceil(__max * log(10.0) - /log(static_cast(__base)))); - else + if (__base == 10) __max_digits = __max; + else if (__base == 16) + __max_digits = static_cast(ceil(__max * _S_scale_hex)); + else if (__base == 8) + __max_digits = static_cast(ceil(__max * _S_scale_oct)); + // Add in what's already been extracted. __max_digits += __pos; diff --git a/libstdc++-v3/src/locale.cc b/libstdc++-v3/src/locale.cc index 2a16a3aeed2..92a8a5c0980 100644 --- a/libstdc++-v3/src/locale.cc +++ b/libstdc++-v3/src/locale.cc @@ -76,6 +76,10 @@ namespace std const char __num_base::_S_atoms[] = "0123456789eEabcdfABCDF"; + const double __num_base::_S_scale_hex = log(10.0)/log(16.0); + + const double __num_base::_S_scale_oct = log(10.0)/log(8.0); + // Definitions for static const data members of locale::_Impl const locale::id* const locale::_Impl::_S_id_ctype[] = diff --git a/libstdc++-v3/testsuite/27_io/istream_extractor_arith.cc b/libstdc++-v3/testsuite/27_io/istream_extractor_arith.cc index 9a8537e82f8..83b93025226 100644 --- a/libstdc++-v3/testsuite/27_io/istream_extractor_arith.cc +++ b/libstdc++-v3/testsuite/27_io/istream_extractor_arith.cc @@ -579,7 +579,7 @@ void test13() digits += '1'; istringstream iss2(digits); iss2 >> i; - VERIFY( iss2.good() ); + VERIFY( !iss2.fail() ); digits += '1'; i = 0; @@ -604,6 +604,7 @@ int main() test11(); test12(); + test13(); return 0; } diff --git a/libstdc++-v3/testsuite/testsuite_hooks.h b/libstdc++-v3/testsuite/testsuite_hooks.h index f8bb87b175e..b7e96cb2cf0 100644 --- a/libstdc++-v3/testsuite/testsuite_hooks.h +++ b/libstdc++-v3/testsuite/testsuite_hooks.h @@ -49,7 +49,6 @@ # define VERIFY(fn) assert(fn) #else # define VERIFY(fn) test &= (fn) -# define VERIFY(fn) fn #endif #include -- 2.30.2