aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBenjamin Kosnik <bkoz@redhat.com>2001-12-10 08:41:03 +0000
committerBenjamin Kosnik <bkoz@gcc.gnu.org>2001-12-10 08:41:03 +0000
commit2a74463013d28bb5ac16c0de290e1c9ed79dac28 (patch)
tree2e3c142c60d613fd9c38672144a6f3e75a9931c5
parentd4197a152d554f286b37da26bb37c96025f068ee (diff)
downloadgcc-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/ChangeLog10
-rw-r--r--libstdc++-v3/include/bits/locale_facets.h6
-rw-r--r--libstdc++-v3/include/bits/locale_facets.tcc12
-rw-r--r--libstdc++-v3/src/locale.cc4
-rw-r--r--libstdc++-v3/testsuite/27_io/istream_extractor_arith.cc3
-rw-r--r--libstdc++-v3/testsuite/testsuite_hooks.h1
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>