From: Paolo Carlini Date: Fri, 6 Apr 2007 14:52:27 +0000 (+0000) Subject: type_traits.h (__numeric_traits): Move... X-Git-Tag: releases/gcc-4.3.0~5774 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=b3726dabf388c6909be757c0438fcf0ff61d9a2f;p=thirdparty%2Fgcc.git type_traits.h (__numeric_traits): Move... 2007-04-06 Paolo Carlini * 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 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 --- diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog index 9aa519c03e45..63e408c01700 100644 --- a/libstdc++-v3/ChangeLog +++ b/libstdc++-v3/ChangeLog @@ -1,3 +1,15 @@ +2007-04-06 Paolo Carlini + + * 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 + 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 * include/bits/valarray_array.h (__valarray_default_construct(_Tp*, diff --git a/libstdc++-v3/include/Makefile.am b/libstdc++-v3/include/Makefile.am index 9e34d7447c3f..2cb893063928 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 83533330d5c2..3681d1e78acf 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 000000000000..cff5b7066d6f --- /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 +#include +#include + +_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 + 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 + const _Value __numeric_traits_integer<_Value>::__min; + + template + const _Value __numeric_traits_integer<_Value>::__max; + + template + struct __numeric_traits_floating + { + // Only floating point types. See N1822. + static const int __max_digits10 = + 2 + std::numeric_limits<_Value>::digits * 3010/10000; + }; + + template + const int __numeric_traits_floating<_Value>::__max_digits10; + + template + struct __numeric_traits + : public __conditional_type::__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 7a7e425a0ecc..197b17efb6bd 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 #include #include +#include namespace pb_ds { diff --git a/libstdc++-v3/include/ext/type_traits.h b/libstdc++-v3/include/ext/type_traits.h index a4ea1ce48cf4..310d8342d60a 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 +#include #include _GLIBCXX_BEGIN_NAMESPACE(__gnu_cxx) @@ -147,57 +147,6 @@ _GLIBCXX_BEGIN_NAMESPACE(__gnu_cxx) template<> struct __remove_unsigned; - - // 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 - 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 - const _Value __numeric_traits_integer<_Value>::__min; - - template - const _Value __numeric_traits_integer<_Value>::__max; - - template - struct __numeric_traits_floating - { - // Only floating point types. See N1822. - static const int __max_digits10 = - 2 + std::numeric_limits<_Value>::digits * 3010/10000; - }; - - template - const int __numeric_traits_floating<_Value>::__max_digits10; - - template - struct __numeric_traits - : public __conditional_type::__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 907a1000fd32..10337437fede 100644 --- a/libstdc++-v3/include/tr1/random +++ b/libstdc++-v3/include/tr1/random @@ -44,6 +44,7 @@ #include #include #include +#include #include #include diff --git a/libstdc++-v3/testsuite/ext/type_traits/numeric_traits.cc b/libstdc++-v3/testsuite/ext/numeric_traits/numeric_traits.cc similarity index 97% rename from libstdc++-v3/testsuite/ext/type_traits/numeric_traits.cc rename to libstdc++-v3/testsuite/ext/numeric_traits/numeric_traits.cc index ea58bb8afc70..9e00510fff18 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 +#include using __gnu_cxx::__numeric_traits; template struct __numeric_traits;