diff options
author | Benjamin Kosnik <bkoz@redhat.com> | 2001-12-10 08:41:03 +0000 |
---|---|---|
committer | Benjamin Kosnik <bkoz@gcc.gnu.org> | 2001-12-10 08:41:03 +0000 |
commit | 2a74463013d28bb5ac16c0de290e1c9ed79dac28 (patch) | |
tree | 2e3c142c60d613fd9c38672144a6f3e75a9931c5 | |
parent | d4197a152d554f286b37da26bb37c96025f068ee (diff) | |
download | gcc-2a74463013d28bb5ac16c0de290e1c9ed79dac28.zip gcc-2a74463013d28bb5ac16c0de290e1c9ed79dac28.tar.gz gcc-2a74463013d28bb5ac16c0de290e1c9ed79dac28.tar.bz2 |
locale_facets.h (__num_base::_S_scale_hex): Add.
2001-12-09 Benjamin Kosnik <bkoz@redhat.com>
Philip Martin <pmartin@uklinux.net>
* 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 <pmartin@uklinux.net>
From-SVN: r47837
-rw-r--r-- | libstdc++-v3/ChangeLog | 10 | ||||
-rw-r--r-- | libstdc++-v3/include/bits/locale_facets.h | 6 | ||||
-rw-r--r-- | libstdc++-v3/include/bits/locale_facets.tcc | 12 | ||||
-rw-r--r-- | libstdc++-v3/src/locale.cc | 4 | ||||
-rw-r--r-- | libstdc++-v3/testsuite/27_io/istream_extractor_arith.cc | 3 | ||||
-rw-r--r-- | 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 71848d1..e2d7b7e 100644 --- a/libstdc++-v3/ChangeLog +++ b/libstdc++-v3/ChangeLog @@ -1,3 +1,13 @@ +2001-12-09 Benjamin Kosnik <bkoz@redhat.com> + Philip Martin <pmartin@uklinux.net> + + * 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 <ncm@cantrip.org> Loren Rittle <ljrittle@acm.org> diff --git a/libstdc++-v3/include/bits/locale_facets.h b/libstdc++-v3/include/bits/locale_facets.h index 27bd5b1..a992c45 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<typename _CharT> diff --git a/libstdc++-v3/include/bits/locale_facets.tcc b/libstdc++-v3/include/bits/locale_facets.tcc index 51bc9ed..5f22cde 100644 --- a/libstdc++-v3/include/bits/locale_facets.tcc +++ b/libstdc++-v3/include/bits/locale_facets.tcc @@ -35,7 +35,7 @@ #include <bits/std_cerrno.h> #include <bits/std_clocale.h> // For localeconv #include <bits/std_cstdlib.h> // For strof, strtold -#include <bits/std_cmath.h> // For ceil +#include <bits/std_cmath.h> // For ceil #include <bits/std_limits.h> // For numeric_limits #include <bits/std_memory.h> // For auto_ptr #include <bits/streambuf_iterator.h> // 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<int>(ceil(__max * log(10.0) - /log(static_cast<double>(__base)))); - else + if (__base == 10) __max_digits = __max; + else if (__base == 16) + __max_digits = static_cast<int>(ceil(__max * _S_scale_hex)); + else if (__base == 8) + __max_digits = static_cast<int>(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 2a16a3a..92a8a5c 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 9a8537e..83b9302 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 f8bb87b..b7e96cb 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 <bits/c++config.h> |