diff options
author | paolo <paolo@138bc75d-0d04-0410-961f-82ee72b054a4> | 2007-04-13 10:54:37 +0000 |
---|---|---|
committer | paolo <paolo@138bc75d-0d04-0410-961f-82ee72b054a4> | 2007-04-13 10:54:37 +0000 |
commit | ee620c0dc32fef05144d97efaa876db5f0b8d632 (patch) | |
tree | 964911b205248c21c697666def199f988fde36c0 /libstdc++-v3 | |
parent | f3d56fef7dc684fd737b19dc06be9765d4e6d124 (diff) | |
download | ppe42-gcc-ee620c0dc32fef05144d97efaa876db5f0b8d632.tar.gz ppe42-gcc-ee620c0dc32fef05144d97efaa876db5f0b8d632.zip |
2007-04-13 Paolo Carlini <pcarlini@suse.de>
* include/ext/numeric_traits.h: Do not include <limits>.
(__numeric_traits_integer::__is_signed, __digits): Add.
(__numeric_traits_floating::__digits10, __max_exponent10): Add.
* src/istream.cc (ignore<char>(streamsize, int_type), operator>>
(basic_istream<char>&, char*), ignore<wchar_t>(streamsize,
int_type)): Use the latter.
* src/compatibility.cc (ignore<char>(streamsize),
ignore<wchar_t>(streamsize)): Likewise.
* include/ext/vstring_util.h (__vstring_utility<>::_S_compare):
Likewise.
* include/bits/stl_memory.h (__get_temporary_buffer): Likewise.
* include/bits/stl_algobase.h (lexicographical_compare(const char*,
const char*, const char*, const char*)): Likewise.
* include/bits/locale_facets.tcc (num_get<>::_M_extract_int(_InIter,
_InIter, ios_base&, ios_base::iostate&, _ValueT&),
num_put<>::_M_insert_int(_OutIter, ios_base&, _CharT, _ValueT),
num_put<>::_M_insert_float(_OutIter, ios_base&, _CharT, char,
_ValueT), collate<>::do_hash(const _CharT*, const _CharT*)): Likewise.
* include/bits/basic_string.h (basic_string<>::_S_compare): Likewise.
* include/bits/istream.tcc (operator>>(short&), operator>>(int&),
ignore(streamsize), ignore(streamsize, int_type), operator>>
(basic_istream<>&, _CharT*)): Likewise.
* include/bits/stl_bvector.h (vector<bool>::max_size): Likewise.
* include/tr1/functional_hash.h (struct hash<long double>): Likewise.
* include/std/istream: Do not include <limits>.
* include/tr1/cmath: Include <limits>.
* testsuite/23_containers/vector/bool/capacity/29134.cc: Likewise.
* testsuite/27_io/basic_istream/extractors_arithmetic/char/12.cc:
Likewise.
* testsuite/27_io/basic_istream/extractors_arithmetic/char/13.cc:
Likewise.
* testsuite/27_io/basic_istream/extractors_arithmetic/wchar_t/12.cc:
Likewise.
* testsuite/27_io/basic_istream/extractors_arithmetic/wchar_t/13.cc:
Likewise.
* testsuite/27_io/ios_base/storage/2.cc: Likewise.
* include/tr1/hashtable: Do not include the whole <iterator>.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@123779 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'libstdc++-v3')
21 files changed, 175 insertions, 69 deletions
diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog index 69cf154723b..1c78c2e17a0 100644 --- a/libstdc++-v3/ChangeLog +++ b/libstdc++-v3/ChangeLog @@ -1,3 +1,44 @@ +2007-04-13 Paolo Carlini <pcarlini@suse.de> + + * include/ext/numeric_traits.h: Do not include <limits>. + (__numeric_traits_integer::__is_signed, __digits): Add. + (__numeric_traits_floating::__digits10, __max_exponent10): Add. + * src/istream.cc (ignore<char>(streamsize, int_type), operator>> + (basic_istream<char>&, char*), ignore<wchar_t>(streamsize, + int_type)): Use the latter. + * src/compatibility.cc (ignore<char>(streamsize), + ignore<wchar_t>(streamsize)): Likewise. + * include/ext/vstring_util.h (__vstring_utility<>::_S_compare): + Likewise. + * include/bits/stl_memory.h (__get_temporary_buffer): Likewise. + * include/bits/stl_algobase.h (lexicographical_compare(const char*, + const char*, const char*, const char*)): Likewise. + * include/bits/locale_facets.tcc (num_get<>::_M_extract_int(_InIter, + _InIter, ios_base&, ios_base::iostate&, _ValueT&), + num_put<>::_M_insert_int(_OutIter, ios_base&, _CharT, _ValueT), + num_put<>::_M_insert_float(_OutIter, ios_base&, _CharT, char, + _ValueT), collate<>::do_hash(const _CharT*, const _CharT*)): Likewise. + * include/bits/basic_string.h (basic_string<>::_S_compare): Likewise. + * include/bits/istream.tcc (operator>>(short&), operator>>(int&), + ignore(streamsize), ignore(streamsize, int_type), operator>> + (basic_istream<>&, _CharT*)): Likewise. + * include/bits/stl_bvector.h (vector<bool>::max_size): Likewise. + * include/tr1/functional_hash.h (struct hash<long double>): Likewise. + * include/std/istream: Do not include <limits>. + * include/tr1/cmath: Include <limits>. + * testsuite/23_containers/vector/bool/capacity/29134.cc: Likewise. + * testsuite/27_io/basic_istream/extractors_arithmetic/char/12.cc: + Likewise. + * testsuite/27_io/basic_istream/extractors_arithmetic/char/13.cc: + Likewise. + * testsuite/27_io/basic_istream/extractors_arithmetic/wchar_t/12.cc: + Likewise. + * testsuite/27_io/basic_istream/extractors_arithmetic/wchar_t/13.cc: + Likewise. + * testsuite/27_io/ios_base/storage/2.cc: Likewise. + + * include/tr1/hashtable: Do not include the whole <iterator>. + 2007-04-11 Paolo Carlini <pcarlini@suse.de> * config/locale/gnu/c_locale.h: Do not include <langinfo.h> diff --git a/libstdc++-v3/include/bits/basic_string.h b/libstdc++-v3/include/bits/basic_string.h index a42e290776c..a6e3d6dffaa 100644 --- a/libstdc++-v3/include/bits/basic_string.h +++ b/libstdc++-v3/include/bits/basic_string.h @@ -395,12 +395,12 @@ _GLIBCXX_BEGIN_NAMESPACE(std) { const difference_type __d = difference_type(__n1 - __n2); - if (__d > numeric_limits<int>::max()) - return numeric_limits<int>::max(); - else if (__d < numeric_limits<int>::min()) - return numeric_limits<int>::min(); + if (__d > __gnu_cxx::__numeric_traits<int>::__max) + return __gnu_cxx::__numeric_traits<int>::__max; + else if (__d < __gnu_cxx::__numeric_traits<int>::__min) + return __gnu_cxx::__numeric_traits<int>::__min; else - return int(__d); + return int(__d); } void diff --git a/libstdc++-v3/include/bits/istream.tcc b/libstdc++-v3/include/bits/istream.tcc index 1ef3253cdbc..4588b9c858a 100644 --- a/libstdc++-v3/include/bits/istream.tcc +++ b/libstdc++-v3/include/bits/istream.tcc @@ -117,8 +117,8 @@ _GLIBCXX_BEGIN_NAMESPACE(std) _M_extract(__l); if (!this->fail()) { - if (numeric_limits<short>::min() <= __l - && __l <= numeric_limits<short>::max()) + if (__gnu_cxx::__numeric_traits<short>::__min <= __l + && __l <= __gnu_cxx::__numeric_traits<short>::__max) __n = short(__l); else this->setstate(ios_base::failbit); @@ -137,8 +137,8 @@ _GLIBCXX_BEGIN_NAMESPACE(std) _M_extract(__l); if (!this->fail()) { - if (numeric_limits<int>::min() <= __l - && __l <= numeric_limits<int>::max()) + if (__gnu_cxx::__numeric_traits<int>::__min <= __l + && __l <= __gnu_cxx::__numeric_traits<int>::__max) __n = int(__l); else this->setstate(ios_base::failbit); @@ -432,10 +432,11 @@ _GLIBCXX_BEGIN_NAMESPACE(std) ++_M_gcount; __c = __sb->snextc(); } - if (__n == numeric_limits<streamsize>::max() + if (__n == __gnu_cxx::__numeric_traits<streamsize>::__max && !traits_type::eq_int_type(__c, __eof)) { - _M_gcount = numeric_limits<streamsize>::min(); + _M_gcount = + __gnu_cxx::__numeric_traits<streamsize>::__min; __large_ignore = true; } else @@ -443,7 +444,7 @@ _GLIBCXX_BEGIN_NAMESPACE(std) } if (__large_ignore) - _M_gcount = numeric_limits<streamsize>::max(); + _M_gcount = __gnu_cxx::__numeric_traits<streamsize>::__max; if (traits_type::eq_int_type(__c, __eof)) __err |= ios_base::eofbit; @@ -483,11 +484,12 @@ _GLIBCXX_BEGIN_NAMESPACE(std) ++_M_gcount; __c = __sb->snextc(); } - if (__n == numeric_limits<streamsize>::max() + if (__n == __gnu_cxx::__numeric_traits<streamsize>::__max && !traits_type::eq_int_type(__c, __eof) && !traits_type::eq_int_type(__c, __delim)) { - _M_gcount = numeric_limits<streamsize>::min(); + _M_gcount = + __gnu_cxx::__numeric_traits<streamsize>::__min; __large_ignore = true; } else @@ -495,13 +497,14 @@ _GLIBCXX_BEGIN_NAMESPACE(std) } if (__large_ignore) - _M_gcount = numeric_limits<streamsize>::max(); + _M_gcount = __gnu_cxx::__numeric_traits<streamsize>::__max; if (traits_type::eq_int_type(__c, __eof)) __err |= ios_base::eofbit; else if (traits_type::eq_int_type(__c, __delim)) { - if (_M_gcount < numeric_limits<streamsize>::max()) + if (_M_gcount + < __gnu_cxx::__numeric_traits<streamsize>::__max) ++_M_gcount; __sb->sbumpc(); } @@ -800,7 +803,7 @@ _GLIBCXX_BEGIN_NAMESPACE(std) // Figure out how many characters to extract. streamsize __num = __in.width(); if (__num <= 0) - __num = numeric_limits<streamsize>::max(); + __num = __gnu_cxx::__numeric_traits<streamsize>::__max; const __ctype_type& __ct = use_facet<__ctype_type>(__in.getloc()); diff --git a/libstdc++-v3/include/bits/locale_facets.tcc b/libstdc++-v3/include/bits/locale_facets.tcc index 64f148513bf..42cf1b04ff1 100644 --- a/libstdc++-v3/include/bits/locale_facets.tcc +++ b/libstdc++-v3/include/bits/locale_facets.tcc @@ -39,7 +39,7 @@ #pragma GCC system_header -#include <limits> // For numeric_limits +#include <ext/numeric_traits.h> #include <typeinfo> // For bad_cast. #include <bits/streambuf_iterator.h> #include <ext/type_traits.h> @@ -538,7 +538,7 @@ _GLIBCXX_BEGIN_LDBL_NAMESPACE if (!__testeof) { __c = *__beg; - if (numeric_limits<_ValueT>::is_signed) + if (__gnu_cxx::__numeric_traits<_ValueT>::__is_signed) __negative = __c == __lit[__num_base::_S_iminus]; if ((__negative || __c == __lit[__num_base::_S_iplus]) && !(__lc->_M_use_grouping && __c == __lc->_M_thousands_sep) @@ -607,8 +607,9 @@ _GLIBCXX_BEGIN_LDBL_NAMESPACE if (__lc->_M_use_grouping) __found_grouping.reserve(32); bool __testfail = false; - const __unsigned_type __max = __negative ? - -numeric_limits<_ValueT>::min() : numeric_limits<_ValueT>::max(); + const __unsigned_type __max = __negative + ? -__gnu_cxx::__numeric_traits<_ValueT>::__min + : __gnu_cxx::__numeric_traits<_ValueT>::__max; const __unsigned_type __smax = __max / __base; __unsigned_type __result = 0; int __digit = 0; @@ -1029,7 +1030,7 @@ _GLIBCXX_BEGIN_LDBL_NAMESPACE if (__v > 0) { if (__flags & ios_base::showpos - && numeric_limits<_ValueT>::is_signed) + && __gnu_cxx::__numeric_traits<_ValueT>::__is_signed) *--__cs = __lit[__num_base::_S_oplus], ++__len; } else if (__v) @@ -1116,7 +1117,8 @@ _GLIBCXX_BEGIN_LDBL_NAMESPACE // Use default precision if out of range. const streamsize __prec = __io.precision() < 0 ? 6 : __io.precision(); - const int __max_digits = numeric_limits<_ValueT>::digits10; + const int __max_digits = + __gnu_cxx::__numeric_traits<_ValueT>::__digits10; // [22.2.2.2.2] Stage 1, numeric conversion to character. int __len; @@ -1143,7 +1145,8 @@ _GLIBCXX_BEGIN_LDBL_NAMESPACE #else // Consider the possibility of long ios_base::fixed outputs const bool __fixed = __io.flags() & ios_base::fixed; - const int __max_exp = numeric_limits<_ValueT>::max_exponent10; + const int __max_exp = + __gnu_cxx::__numeric_traits<_ValueT>::__max_exponent10; // The size of the output string is computed as follows. // ios_base::fixed outputs may need up to __max_exp + 1 chars @@ -1790,7 +1793,8 @@ _GLIBCXX_BEGIN_LDBL_NAMESPACE } #else // max_exponent10 + 1 for the integer part, + 2 for sign and '\0'. - const int __cs_size = numeric_limits<long double>::max_exponent10 + 3; + const int __cs_size = + __gnu_cxx::__numeric_traits<long double>::__max_exponent10 + 3; char* __cs = static_cast<char*>(__builtin_alloca(__cs_size)); int __len = std::__convert_from_v(_S_get_c_locale(), __cs, 0, "%.*Lf", 0, __units); @@ -2499,8 +2503,10 @@ _GLIBCXX_END_LDBL_NAMESPACE { unsigned long __val = 0; for (; __lo < __hi; ++__lo) - __val = *__lo + ((__val << 7) | - (__val >> (numeric_limits<unsigned long>::digits - 7))); + __val = + *__lo + ((__val << 7) + | (__val >> (__gnu_cxx::__numeric_traits<unsigned long>:: + __digits - 7))); return static_cast<long>(__val); } diff --git a/libstdc++-v3/include/bits/stl_algobase.h b/libstdc++-v3/include/bits/stl_algobase.h index 0c4c01deaf3..86fec003de9 100644 --- a/libstdc++-v3/include/bits/stl_algobase.h +++ b/libstdc++-v3/include/bits/stl_algobase.h @@ -70,7 +70,7 @@ #include <bits/stl_pair.h> #include <bits/cpp_type_traits.h> #include <ext/type_traits.h> -#include <limits> +#include <ext/numeric_traits.h> #include <bits/stl_iterator_base_types.h> #include <bits/stl_iterator_base_funcs.h> #include <bits/stl_iterator.h> @@ -1018,7 +1018,7 @@ _GLIBCXX_BEGIN_NAMESPACE(std) __glibcxx_requires_valid_range(__first1, __last1); __glibcxx_requires_valid_range(__first2, __last2); - if (std::numeric_limits<char>::is_signed) + if (__gnu_cxx::__numeric_traits<char>::__is_signed) return std::lexicographical_compare((const signed char*) __first1, (const signed char*) __last1, (const signed char*) __first2, diff --git a/libstdc++-v3/include/bits/stl_bvector.h b/libstdc++-v3/include/bits/stl_bvector.h index d9863e0e617..ba29650831b 100644 --- a/libstdc++-v3/include/bits/stl_bvector.h +++ b/libstdc++-v3/include/bits/stl_bvector.h @@ -583,7 +583,8 @@ template<typename _Alloc> max_size() const { const size_type __isize = - std::numeric_limits<difference_type>::max() - int(_S_word_bit) + 1; + __gnu_cxx::__numeric_traits<difference_type>::__max + - int(_S_word_bit) + 1; const size_type __asize = _M_get_Bit_allocator().max_size(); return (__asize <= __isize / int(_S_word_bit) ? __asize * int(_S_word_bit) : __isize); diff --git a/libstdc++-v3/include/bits/stl_memory.h b/libstdc++-v3/include/bits/stl_memory.h index 1018ae018c4..7dbd32324e4 100644 --- a/libstdc++-v3/include/bits/stl_memory.h +++ b/libstdc++-v3/include/bits/stl_memory.h @@ -41,7 +41,6 @@ #include <bits/stl_uninitialized.h> #include <bits/stl_raw_storage_iter.h> #include <debug/debug.h> -#include <limits> _GLIBCXX_BEGIN_NAMESPACE(std) @@ -57,7 +56,8 @@ _GLIBCXX_BEGIN_NAMESPACE(std) pair<_Tp*, ptrdiff_t> __get_temporary_buffer(ptrdiff_t __len, _Tp*) { - const ptrdiff_t __max = numeric_limits<ptrdiff_t>::max() / sizeof(_Tp); + const ptrdiff_t __max = + __gnu_cxx::__numeric_traits<ptrdiff_t>::__max / sizeof(_Tp); if (__len > __max) __len = __max; diff --git a/libstdc++-v3/include/ext/numeric_traits.h b/libstdc++-v3/include/ext/numeric_traits.h index cff5b7066d6..109e37efc9e 100644 --- a/libstdc++-v3/include/ext/numeric_traits.h +++ b/libstdc++-v3/include/ext/numeric_traits.h @@ -37,7 +37,6 @@ #pragma GCC system_header -#include <limits> #include <bits/cpp_type_traits.h> #include <ext/type_traits.h> @@ -62,6 +61,11 @@ _GLIBCXX_BEGIN_NAMESPACE(__gnu_cxx) // Only integers for initialization of member constant. static const _Value __min = __glibcxx_min(_Value); static const _Value __max = __glibcxx_max(_Value); + + // NB: these two also available in std::numeric_limits as compile + // time constants, but <limits> is big and we avoid including it. + static const bool __is_signed = __glibcxx_signed(_Value); + static const int __digits = __glibcxx_digits(_Value); }; template<typename _Value> @@ -71,17 +75,52 @@ _GLIBCXX_BEGIN_NAMESPACE(__gnu_cxx) const _Value __numeric_traits_integer<_Value>::__max; template<typename _Value> + const bool __numeric_traits_integer<_Value>::__is_signed; + + template<typename _Value> + const int __numeric_traits_integer<_Value>::__digits; + +#undef __glibcxx_signed +#undef __glibcxx_digits +#undef __glibcxx_min +#undef __glibcxx_max + +#define __glibcxx_floating(_Tp, _Fval, _Dval, _LDval) \ + (std::__are_same<_Tp, float>::__value ? _Fval \ + : std::__are_same<_Tp, double>::__value ? _Dval : _LDval) + +#define __glibcxx_max_digits10(_Tp) \ + (2 + __glibcxx_floating(_Tp, __FLT_MANT_DIG__, __DBL_MANT_DIG__, \ + __LDBL_MANT_DIG__) * 3010 / 10000) + +#define __glibcxx_digits10(_Tp) \ + __glibcxx_floating(_Tp, __FLT_DIG__, __DBL_DIG__, __LDBL_DIG__) + +#define __glibcxx_max_exponent10(_Tp) \ + __glibcxx_floating(_Tp, __FLT_MAX_10_EXP__, __DBL_MAX_10_EXP__, \ + __LDBL_MAX_10_EXP__) + + template<typename _Value> struct __numeric_traits_floating { // Only floating point types. See N1822. - static const int __max_digits10 = - 2 + std::numeric_limits<_Value>::digits * 3010/10000; + static const int __max_digits10 = __glibcxx_max_digits10(_Value); + + // See above comment... + static const int __digits10 = __glibcxx_digits10(_Value); + static const int __max_exponent10 = __glibcxx_max_exponent10(_Value); }; template<typename _Value> const int __numeric_traits_floating<_Value>::__max_digits10; template<typename _Value> + const int __numeric_traits_floating<_Value>::__digits10; + + template<typename _Value> + const int __numeric_traits_floating<_Value>::__max_exponent10; + + template<typename _Value> struct __numeric_traits : public __conditional_type<std::__is_integer<_Value>::__value, __numeric_traits_integer<_Value>, @@ -90,9 +129,9 @@ _GLIBCXX_BEGIN_NAMESPACE(__gnu_cxx) _GLIBCXX_END_NAMESPACE -#undef __glibcxx_signed -#undef __glibcxx_min -#undef __glibcxx_max -#undef __glibcxx_digits +#undef __glibcxx_floating +#undef __glibcxx_max_digits10 +#undef __glibcxx_digits10 +#undef __glibcxx_max_exponent10 #endif diff --git a/libstdc++-v3/include/ext/vstring_util.h b/libstdc++-v3/include/ext/vstring_util.h index bd50d7ff21d..390ef37fb3d 100644 --- a/libstdc++-v3/include/ext/vstring_util.h +++ b/libstdc++-v3/include/ext/vstring_util.h @@ -165,12 +165,12 @@ _GLIBCXX_BEGIN_NAMESPACE(__gnu_cxx) { const difference_type __d = difference_type(__n1 - __n2); - if (__d > std::numeric_limits<int>::max()) - return std::numeric_limits<int>::max(); - else if (__d < std::numeric_limits<int>::min()) - return std::numeric_limits<int>::min(); + if (__d > __numeric_traits_integer<int>::__max) + return __numeric_traits_integer<int>::__max; + else if (__d < __numeric_traits_integer<int>::__min) + return __numeric_traits_integer<int>::__min; else - return int(__d); + return int(__d); } }; diff --git a/libstdc++-v3/include/std/istream b/libstdc++-v3/include/std/istream index 2aa0d1c8a9d..9cd2549b0a3 100644 --- a/libstdc++-v3/include/std/istream +++ b/libstdc++-v3/include/std/istream @@ -45,7 +45,6 @@ #include <ios> #include <locale> #include <ostream> -#include <limits> // For numeric_limits _GLIBCXX_BEGIN_NAMESPACE(std) diff --git a/libstdc++-v3/include/tr1/cmath b/libstdc++-v3/include/tr1/cmath index 8d231445b73..36845bb124f 100644 --- a/libstdc++-v3/include/tr1/cmath +++ b/libstdc++-v3/include/tr1/cmath @@ -36,6 +36,7 @@ #include <bits/c++config.h> #include <bits/stl_algobase.h> +#include <limits> #include <cmath> #include <tr1/common.h> diff --git a/libstdc++-v3/include/tr1/functional_hash.h b/libstdc++-v3/include/tr1/functional_hash.h index 9c6f69a3f51..f692308e137 100644 --- a/libstdc++-v3/include/tr1/functional_hash.h +++ b/libstdc++-v3/include/tr1/functional_hash.h @@ -208,7 +208,7 @@ _GLIBCXX_BEGIN_NAMESPACE(_GLIBCXX_TR1) __ldval = __ldval < 0.0l ? -(__ldval + 0.5l) : __ldval; const long double __mult = - std::numeric_limits<std::size_t>::max() + 1.0l; + __gnu_cxx::__numeric_traits<std::size_t>::__max + 1.0l; __ldval *= __mult; // Try to use all the bits of the mantissa (really necessary only @@ -217,8 +217,7 @@ _GLIBCXX_BEGIN_NAMESPACE(_GLIBCXX_TR1) __ldval = (__ldval - (long double)__hibits) * __mult; const std::size_t __coeff = - (std::numeric_limits<std::size_t>::max() - / std::numeric_limits<long double>::max_exponent); + __gnu_cxx::__numeric_traits<std::size_t>::__max / __LDBL_MAX_EXP__; __result = __hibits + (std::size_t)__ldval + __coeff * __exponent; diff --git a/libstdc++-v3/include/tr1/hashtable b/libstdc++-v3/include/tr1/hashtable index 7fa9ea11789..526ebf82e27 100644 --- a/libstdc++-v3/include/tr1/hashtable +++ b/libstdc++-v3/include/tr1/hashtable @@ -53,9 +53,10 @@ #define _TR1_HASHTABLE 1 #include <utility> // For std::pair -#include <iterator> #include <cstddef> #include <cmath> +#include <bits/stl_iterator_base_types.h> +#include <bits/stl_iterator_base_funcs.h> #include <bits/allocator.h> #include <bits/functexcept.h> #include <tr1/type_traits> // For true_type and false_type diff --git a/libstdc++-v3/src/compatibility.cc b/libstdc++-v3/src/compatibility.cc index f88fbc740d8..83b20b96706 100644 --- a/libstdc++-v3/src/compatibility.cc +++ b/libstdc++-v3/src/compatibility.cc @@ -51,6 +51,7 @@ #include <fstream> #include <sstream> #include <cmath> +#include <ext/numeric_traits.h> _GLIBCXX_BEGIN_NAMESPACE(std) @@ -96,10 +97,11 @@ _GLIBCXX_BEGIN_NAMESPACE(std) __c = __sb->snextc(); } } - if (__n == numeric_limits<streamsize>::max() + if (__n == __gnu_cxx::__numeric_traits<streamsize>::__max && !traits_type::eq_int_type(__c, __eof)) { - _M_gcount = numeric_limits<streamsize>::min(); + _M_gcount = + __gnu_cxx::__numeric_traits<streamsize>::__min; __large_ignore = true; } else @@ -107,7 +109,7 @@ _GLIBCXX_BEGIN_NAMESPACE(std) } if (__large_ignore) - _M_gcount = numeric_limits<streamsize>::max(); + _M_gcount = __gnu_cxx::__numeric_traits<streamsize>::__max; if (traits_type::eq_int_type(__c, __eof)) __err |= ios_base::eofbit; @@ -161,10 +163,11 @@ _GLIBCXX_BEGIN_NAMESPACE(std) __c = __sb->snextc(); } } - if (__n == numeric_limits<streamsize>::max() + if (__n == __gnu_cxx::__numeric_traits<streamsize>::__max && !traits_type::eq_int_type(__c, __eof)) { - _M_gcount = numeric_limits<streamsize>::min(); + _M_gcount = + __gnu_cxx::__numeric_traits<streamsize>::__min; __large_ignore = true; } else @@ -172,7 +175,7 @@ _GLIBCXX_BEGIN_NAMESPACE(std) } if (__large_ignore) - _M_gcount = numeric_limits<streamsize>::max(); + _M_gcount = __gnu_cxx::__numeric_traits<streamsize>::__max; if (traits_type::eq_int_type(__c, __eof)) __err |= ios_base::eofbit; diff --git a/libstdc++-v3/src/istream.cc b/libstdc++-v3/src/istream.cc index 688ad165835..0f24340e031 100644 --- a/libstdc++-v3/src/istream.cc +++ b/libstdc++-v3/src/istream.cc @@ -152,11 +152,12 @@ _GLIBCXX_BEGIN_NAMESPACE(std) __c = __sb->snextc(); } } - if (__n == numeric_limits<streamsize>::max() + if (__n == __gnu_cxx::__numeric_traits<streamsize>::__max && !traits_type::eq_int_type(__c, __eof) && !traits_type::eq_int_type(__c, __delim)) { - _M_gcount = numeric_limits<streamsize>::min(); + _M_gcount = + __gnu_cxx::__numeric_traits<streamsize>::__min; __large_ignore = true; } else @@ -164,13 +165,14 @@ _GLIBCXX_BEGIN_NAMESPACE(std) } if (__large_ignore) - _M_gcount = numeric_limits<streamsize>::max(); + _M_gcount = __gnu_cxx::__numeric_traits<streamsize>::__max; if (traits_type::eq_int_type(__c, __eof)) __err |= ios_base::eofbit; else if (traits_type::eq_int_type(__c, __delim)) { - if (_M_gcount < numeric_limits<streamsize>::max()) + if (_M_gcount + < __gnu_cxx::__numeric_traits<streamsize>::__max) ++_M_gcount; __sb->sbumpc(); } @@ -204,7 +206,7 @@ _GLIBCXX_BEGIN_NAMESPACE(std) // Figure out how many characters to extract. streamsize __num = __in.width(); if (__num <= 0) - __num = numeric_limits<streamsize>::max(); + __num = __gnu_cxx::__numeric_traits<streamsize>::__max; const __ctype_type& __ct = use_facet<__ctype_type>(__in.getloc()); @@ -532,11 +534,12 @@ _GLIBCXX_BEGIN_NAMESPACE(std) __c = __sb->snextc(); } } - if (__n == numeric_limits<streamsize>::max() + if (__n == __gnu_cxx::__numeric_traits<streamsize>::__max && !traits_type::eq_int_type(__c, __eof) && !traits_type::eq_int_type(__c, __delim)) { - _M_gcount = numeric_limits<streamsize>::min(); + _M_gcount = + __gnu_cxx::__numeric_traits<streamsize>::__min; __large_ignore = true; } else @@ -544,13 +547,14 @@ _GLIBCXX_BEGIN_NAMESPACE(std) } if (__large_ignore) - _M_gcount = numeric_limits<streamsize>::max(); + _M_gcount = __gnu_cxx::__numeric_traits<streamsize>::__max; if (traits_type::eq_int_type(__c, __eof)) __err |= ios_base::eofbit; else if (traits_type::eq_int_type(__c, __delim)) { - if (_M_gcount < numeric_limits<streamsize>::max()) + if (_M_gcount + < __gnu_cxx::__numeric_traits<streamsize>::__max) ++_M_gcount; __sb->sbumpc(); } diff --git a/libstdc++-v3/testsuite/23_containers/vector/bool/capacity/29134.cc b/libstdc++-v3/testsuite/23_containers/vector/bool/capacity/29134.cc index 69e5a535c9c..7ebec611d72 100644 --- a/libstdc++-v3/testsuite/23_containers/vector/bool/capacity/29134.cc +++ b/libstdc++-v3/testsuite/23_containers/vector/bool/capacity/29134.cc @@ -19,6 +19,7 @@ // 23.2.5 class vector<bool> [lib.vector.bool] #include <vector> +#include <limits> #include <testsuite_hooks.h> // libstdc++/29134 diff --git a/libstdc++-v3/testsuite/27_io/basic_istream/extractors_arithmetic/char/12.cc b/libstdc++-v3/testsuite/27_io/basic_istream/extractors_arithmetic/char/12.cc index e5ef640b292..a727151c674 100644 --- a/libstdc++-v3/testsuite/27_io/basic_istream/extractors_arithmetic/char/12.cc +++ b/libstdc++-v3/testsuite/27_io/basic_istream/extractors_arithmetic/char/12.cc @@ -1,6 +1,7 @@ // 1999-04-12 bkoz -// Copyright (C) 1999, 2000, 2002, 2003 Free Software Foundation, Inc. +// Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007 +// Free Software Foundation, Inc. // // This file is part of the GNU ISO C++ Library. This library is free // software; you can redistribute it and/or modify it under the @@ -27,6 +28,7 @@ #include <istream> #include <sstream> +#include <limits> #include <testsuite_hooks.h> // libstdc++/3720 diff --git a/libstdc++-v3/testsuite/27_io/basic_istream/extractors_arithmetic/char/13.cc b/libstdc++-v3/testsuite/27_io/basic_istream/extractors_arithmetic/char/13.cc index fbda4a47706..ab01a77ab47 100644 --- a/libstdc++-v3/testsuite/27_io/basic_istream/extractors_arithmetic/char/13.cc +++ b/libstdc++-v3/testsuite/27_io/basic_istream/extractors_arithmetic/char/13.cc @@ -1,6 +1,7 @@ // 1999-04-12 bkoz -// Copyright (C) 1999, 2000, 2002, 2003 Free Software Foundation, Inc. +// Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007 +// Free Software Foundation, Inc. // // This file is part of the GNU ISO C++ Library. This library is free // software; you can redistribute it and/or modify it under the @@ -23,6 +24,7 @@ #include <istream> #include <sstream> #include <locale> +#include <limits> #include <testsuite_hooks.h> // libstdc++/3720 part two diff --git a/libstdc++-v3/testsuite/27_io/basic_istream/extractors_arithmetic/wchar_t/12.cc b/libstdc++-v3/testsuite/27_io/basic_istream/extractors_arithmetic/wchar_t/12.cc index 2b8764c16a4..afe929dda4c 100644 --- a/libstdc++-v3/testsuite/27_io/basic_istream/extractors_arithmetic/wchar_t/12.cc +++ b/libstdc++-v3/testsuite/27_io/basic_istream/extractors_arithmetic/wchar_t/12.cc @@ -1,4 +1,4 @@ -// Copyright (C) 2004 Free Software Foundation, Inc. +// Copyright (C) 2004, 2005, 2006, 2007 Free Software Foundation, Inc. // // This file is part of the GNU ISO C++ Library. This library is free // software; you can redistribute it and/or modify it under the @@ -25,6 +25,7 @@ #include <istream> #include <sstream> +#include <limits> #include <testsuite_hooks.h> // libstdc++/3720 diff --git a/libstdc++-v3/testsuite/27_io/basic_istream/extractors_arithmetic/wchar_t/13.cc b/libstdc++-v3/testsuite/27_io/basic_istream/extractors_arithmetic/wchar_t/13.cc index 301431f69cb..57c31737f72 100644 --- a/libstdc++-v3/testsuite/27_io/basic_istream/extractors_arithmetic/wchar_t/13.cc +++ b/libstdc++-v3/testsuite/27_io/basic_istream/extractors_arithmetic/wchar_t/13.cc @@ -1,4 +1,4 @@ -// Copyright (C) 2004 Free Software Foundation, Inc. +// Copyright (C) 2004, 2005, 2006, 2007 Free Software Foundation, Inc. // // This file is part of the GNU ISO C++ Library. This library is free // software; you can redistribute it and/or modify it under the @@ -21,6 +21,7 @@ #include <istream> #include <sstream> #include <locale> +#include <limits> #include <testsuite_hooks.h> // libstdc++/3720 part two diff --git a/libstdc++-v3/testsuite/27_io/ios_base/storage/2.cc b/libstdc++-v3/testsuite/27_io/ios_base/storage/2.cc index 2272a463231..4d25087bcfe 100644 --- a/libstdc++-v3/testsuite/27_io/ios_base/storage/2.cc +++ b/libstdc++-v3/testsuite/27_io/ios_base/storage/2.cc @@ -1,6 +1,7 @@ // 2000-12-19 bkoz -// Copyright (C) 2000, 2002, 2003, 2004 Free Software Foundation +// Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007 +// Free Software Foundation // // This file is part of the GNU ISO C++ Library. This library is free // software; you can redistribute it and/or modify it under the @@ -32,6 +33,7 @@ #include <sstream> #include <iostream> +#include <limits> #include <testsuite_hooks.h> // libstdc++/3129 |