diff options
author | Paolo Carlini <pcarlini@suse.de> | 2007-04-06 14:52:27 +0000 |
---|---|---|
committer | Paolo Carlini <paolo@gcc.gnu.org> | 2007-04-06 14:52:27 +0000 |
commit | b3726dabf388c6909be757c0438fcf0ff61d9a2f (patch) | |
tree | c047f78a7f3057b7ae9f852f3d522a99b1f9a1f2 | |
parent | 8669fed1d7c2b534694dfd00ba7eea088739ca6a (diff) | |
download | gcc-b3726dabf388c6909be757c0438fcf0ff61d9a2f.zip gcc-b3726dabf388c6909be757c0438fcf0ff61d9a2f.tar.gz gcc-b3726dabf388c6909be757c0438fcf0ff61d9a2f.tar.bz2 |
type_traits.h (__numeric_traits): Move...
2007-04-06 Paolo Carlini <pcarlini@suse.de>
* include/ext/type_traits.h (__numeric_traits): Move...
* include/ext/numeric_traits.h: ... here.
* include/Makefile.am: Add.
* include/ext/pb_ds/detail/type_utils.hpp: Include
<ext/numeric_traits.h> too.
* include/tr1/random: Likewise.
* testsuite/ext/type_traits/numeric_traits.cc: Move...
* testsuite/ext/numeric_traits/numeric_traits.cc: ... here.
* include/Makefile.in: Regenerate.
From-SVN: r123618
-rw-r--r-- | libstdc++-v3/ChangeLog | 12 | ||||
-rw-r--r-- | libstdc++-v3/include/Makefile.am | 1 | ||||
-rw-r--r-- | libstdc++-v3/include/Makefile.in | 1 | ||||
-rw-r--r-- | libstdc++-v3/include/ext/numeric_traits.h | 98 | ||||
-rw-r--r-- | libstdc++-v3/include/ext/pb_ds/detail/type_utils.hpp | 1 | ||||
-rw-r--r-- | libstdc++-v3/include/ext/type_traits.h | 53 | ||||
-rw-r--r-- | libstdc++-v3/include/tr1/random | 1 | ||||
-rw-r--r-- | libstdc++-v3/testsuite/ext/numeric_traits/numeric_traits.cc (renamed from libstdc++-v3/testsuite/ext/type_traits/numeric_traits.cc) | 2 |
8 files changed, 116 insertions, 53 deletions
diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog index 9aa519c..63e408c 100644 --- a/libstdc++-v3/ChangeLog +++ b/libstdc++-v3/ChangeLog @@ -1,3 +1,15 @@ +2007-04-06 Paolo Carlini <pcarlini@suse.de> + + * include/ext/type_traits.h (__numeric_traits): Move... + * include/ext/numeric_traits.h: ... here. + * include/Makefile.am: Add. + * include/ext/pb_ds/detail/type_utils.hpp: Include + <ext/numeric_traits.h> too. + * include/tr1/random: Likewise. + * testsuite/ext/type_traits/numeric_traits.cc: Move... + * testsuite/ext/numeric_traits/numeric_traits.cc: ... here. + * include/Makefile.in: Regenerate. + 2007-04-04 Paolo Carlini <pcarlini@suse.de> * include/bits/valarray_array.h (__valarray_default_construct(_Tp*, diff --git a/libstdc++-v3/include/Makefile.am b/libstdc++-v3/include/Makefile.am index 9e34d74..2cb8930 100644 --- a/libstdc++-v3/include/Makefile.am +++ b/libstdc++-v3/include/Makefile.am @@ -512,6 +512,7 @@ ext_headers = \ ${ext_srcdir}/mt_allocator.h \ ${ext_srcdir}/new_allocator.h \ ${ext_srcdir}/numeric \ + ${ext_srcdir}/numeric_traits.h \ ${ext_srcdir}/pod_char_traits.h \ ${ext_srcdir}/pool_allocator.h \ ${ext_srcdir}/rb_tree \ diff --git a/libstdc++-v3/include/Makefile.in b/libstdc++-v3/include/Makefile.in index 8353333..3681d1e 100644 --- a/libstdc++-v3/include/Makefile.in +++ b/libstdc++-v3/include/Makefile.in @@ -743,6 +743,7 @@ ext_headers = \ ${ext_srcdir}/mt_allocator.h \ ${ext_srcdir}/new_allocator.h \ ${ext_srcdir}/numeric \ + ${ext_srcdir}/numeric_traits.h \ ${ext_srcdir}/pod_char_traits.h \ ${ext_srcdir}/pool_allocator.h \ ${ext_srcdir}/rb_tree \ diff --git a/libstdc++-v3/include/ext/numeric_traits.h b/libstdc++-v3/include/ext/numeric_traits.h new file mode 100644 index 0000000..cff5b70 --- /dev/null +++ b/libstdc++-v3/include/ext/numeric_traits.h @@ -0,0 +1,98 @@ +// -*- C++ -*- + +// Copyright (C) 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 terms +// of the GNU General Public License as published by the Free Software +// Foundation; either version 2, or (at your option) any later +// version. + +// This library is distributed in the hope that it will be useful, but +// WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// General Public License for more details. + +// You should have received a copy of the GNU General Public License along +// with this library; see the file COPYING. If not, write to the Free +// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, +// USA. + +// As a special exception, you may use this file as part of a free +// software library without restriction. Specifically, if other files +// instantiate templates or use macros or inline functions from this +// file, or you compile this file and link it with other files to +// produce an executable, this file does not by itself cause the +// resulting executable to be covered by the GNU General Public +// License. This exception does not however invalidate any other +// reasons why the executable file might be covered by the GNU General +// Public License. + +/** @file ext/numeric_traits.h + * This file is a GNU extension to the Standard C++ Library. + */ + +#ifndef _EXT_NUMERIC_TRAITS +#define _EXT_NUMERIC_TRAITS 1 + +#pragma GCC system_header + +#include <limits> +#include <bits/cpp_type_traits.h> +#include <ext/type_traits.h> + +_GLIBCXX_BEGIN_NAMESPACE(__gnu_cxx) + + // Compile time constants for builtin types. + // Sadly std::numeric_limits member functions cannot be used for this. +#define __glibcxx_signed(_Tp) ((_Tp)(-1) < 0) +#define __glibcxx_digits(_Tp) \ + (sizeof(_Tp) * __CHAR_BIT__ - __glibcxx_signed(_Tp)) + +#define __glibcxx_min(_Tp) \ + (__glibcxx_signed(_Tp) ? (_Tp)1 << __glibcxx_digits(_Tp) : (_Tp)0) + +#define __glibcxx_max(_Tp) \ + (__glibcxx_signed(_Tp) ? \ + (((((_Tp)1 << (__glibcxx_digits(_Tp) - 1)) - 1) << 1) + 1) : ~(_Tp)0) + + template<typename _Value> + struct __numeric_traits_integer + { + // Only integers for initialization of member constant. + static const _Value __min = __glibcxx_min(_Value); + static const _Value __max = __glibcxx_max(_Value); + }; + + template<typename _Value> + const _Value __numeric_traits_integer<_Value>::__min; + + template<typename _Value> + const _Value __numeric_traits_integer<_Value>::__max; + + 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; + }; + + template<typename _Value> + const int __numeric_traits_floating<_Value>::__max_digits10; + + template<typename _Value> + struct __numeric_traits + : public __conditional_type<std::__is_integer<_Value>::__value, + __numeric_traits_integer<_Value>, + __numeric_traits_floating<_Value> >::__type + { }; + +_GLIBCXX_END_NAMESPACE + +#undef __glibcxx_signed +#undef __glibcxx_min +#undef __glibcxx_max +#undef __glibcxx_digits + +#endif diff --git a/libstdc++-v3/include/ext/pb_ds/detail/type_utils.hpp b/libstdc++-v3/include/ext/pb_ds/detail/type_utils.hpp index 7a7e425..197b17e 100644 --- a/libstdc++-v3/include/ext/pb_ds/detail/type_utils.hpp +++ b/libstdc++-v3/include/ext/pb_ds/detail/type_utils.hpp @@ -52,6 +52,7 @@ #include <utility> #include <tr1/type_traits> #include <ext/type_traits.h> +#include <ext/numeric_traits.h> namespace pb_ds { diff --git a/libstdc++-v3/include/ext/type_traits.h b/libstdc++-v3/include/ext/type_traits.h index a4ea1ce..310d834 100644 --- a/libstdc++-v3/include/ext/type_traits.h +++ b/libstdc++-v3/include/ext/type_traits.h @@ -37,7 +37,7 @@ #pragma GCC system_header -#include <limits> +#include <bits/c++config.h> #include <bits/cpp_type_traits.h> _GLIBCXX_BEGIN_NAMESPACE(__gnu_cxx) @@ -147,57 +147,6 @@ _GLIBCXX_BEGIN_NAMESPACE(__gnu_cxx) template<> struct __remove_unsigned<wchar_t>; - - // Compile time constants for builtin types. - // Sadly std::numeric_limits member functions cannot be used for this. -#define __glibcxx_signed(_Tp) ((_Tp)(-1) < 0) -#define __glibcxx_digits(_Tp) \ - (sizeof(_Tp) * __CHAR_BIT__ - __glibcxx_signed(_Tp)) - -#define __glibcxx_min(_Tp) \ - (__glibcxx_signed(_Tp) ? (_Tp)1 << __glibcxx_digits(_Tp) : (_Tp)0) - -#define __glibcxx_max(_Tp) \ - (__glibcxx_signed(_Tp) ? \ - (((((_Tp)1 << (__glibcxx_digits(_Tp) - 1)) - 1) << 1) + 1) : ~(_Tp)0) - - template<typename _Value> - struct __numeric_traits_integer - { - // Only integers for initialization of member constant. - static const _Value __min = __glibcxx_min(_Value); - static const _Value __max = __glibcxx_max(_Value); - }; - - template<typename _Value> - const _Value __numeric_traits_integer<_Value>::__min; - - template<typename _Value> - const _Value __numeric_traits_integer<_Value>::__max; - - 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; - }; - - template<typename _Value> - const int __numeric_traits_floating<_Value>::__max_digits10; - - template<typename _Value> - struct __numeric_traits - : public __conditional_type<std::__is_integer<_Value>::__value, - __numeric_traits_integer<_Value>, - __numeric_traits_floating<_Value> >::__type - { }; - _GLIBCXX_END_NAMESPACE -#undef __glibcxx_signed -#undef __glibcxx_min -#undef __glibcxx_max -#undef __glibcxx_digits - #endif diff --git a/libstdc++-v3/include/tr1/random b/libstdc++-v3/include/tr1/random index 907a100..1033743 100644 --- a/libstdc++-v3/include/tr1/random +++ b/libstdc++-v3/include/tr1/random @@ -44,6 +44,7 @@ #include <tr1/type_traits> #include <tr1/cmath> #include <ext/type_traits.h> +#include <ext/numeric_traits.h> #include <bits/concept_check.h> #include <debug/debug.h> diff --git a/libstdc++-v3/testsuite/ext/type_traits/numeric_traits.cc b/libstdc++-v3/testsuite/ext/numeric_traits/numeric_traits.cc index ea58bb8..9e00510 100644 --- a/libstdc++-v3/testsuite/ext/type_traits/numeric_traits.cc +++ b/libstdc++-v3/testsuite/ext/numeric_traits/numeric_traits.cc @@ -20,7 +20,7 @@ // Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, // USA. -#include <ext/type_traits.h> +#include <ext/numeric_traits.h> using __gnu_cxx::__numeric_traits; template struct __numeric_traits<short>; |