OSDN Git Service

2001-10-22 Benjamin Kosnik <bkoz@redhat.com>
authorbkoz <bkoz@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 23 Oct 2001 21:40:31 +0000 (21:40 +0000)
committerbkoz <bkoz@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 23 Oct 2001 21:40:31 +0000 (21:40 +0000)
* config/cpu/i386/bits/limits.h: Move to...
* config/cpu/i386/bits/cpu_limits.h: ...here.
* config/cpu/cris/bits/cpu_limits.h: Same.
* config/cpu/powerpc/bits/cpu_limits.h: Same.
* config/cpu/x86-64/bits/cpu_limits.h: Same.
* config/cpu/alpha/bits/cpu_limits.h: New.
* config/cpu/m68k/bits/cpu_limits.h: New.
* config/cpu/s390/bits/cpu_limits.h: New.
* config/os/aix/bits/os_defines.h: Tweaks.
* config/os/bsd/freebsd/bits/os_defines.h: Same.
* config/os/bsd/netbsd/bits/os_defines.h: Same.
* config/os/djgpp/bits/os_defines.h: Same.
* config/os/generic/bits/os_defines.h: Same.
* config/os/gnu-linux/bits/os_defines.h: Same.
* config/os/hpux/bits/os_defines.h: Same.
* config/os/irix/irix5.2/bits/os_defines.h: Same.
* config/os/irix/irix6.5/bits/os_defines.h: Same.
* config/os/newlib/bits/os_defines.h: Same.
* config/os/solaris/solaris2.5/bits/os_defines.h: Same.
* config/os/solaris/solaris2.6/bits/os_defines.h: Same.
* config/os/solaris/solaris2.7/bits/os_defines.h: Same.

* include/bits/c++config: Remove include.
* include/bits/limits_generic.h: Remove.
* include/bits/std_limits.h: Include cpu_limits.h.
* include/Makefile.am: Fixup.
* src/limits.cc: Tweak.
* src/limits_generic.cc: Remove.
* src/gen-num-limits.cc: Remove.
* mknumeric_limits: Remove.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@46445 138bc75d-0d04-0410-961f-82ee72b054a4

41 files changed:
libstdc++-v3/ChangeLog
libstdc++-v3/Makefile.in
libstdc++-v3/config/cpu/alpha/bits/cpu_limits.h [moved from libstdc++-v3/config/cpu/powerpc/bits/limits.h with 97% similarity]
libstdc++-v3/config/cpu/cris/bits/cpu_limits.h [moved from libstdc++-v3/config/cpu/cris/bits/limits.h with 100% similarity]
libstdc++-v3/config/cpu/generic/bits/cpu_limits.h [new file with mode: 0644]
libstdc++-v3/config/cpu/i386/bits/cpu_limits.h [moved from libstdc++-v3/config/cpu/i386/bits/limits.h with 95% similarity]
libstdc++-v3/config/cpu/m68k/bits/cpu_limits.h [new file with mode: 0644]
libstdc++-v3/config/cpu/powerpc/bits/cpu_limits.h [new file with mode: 0644]
libstdc++-v3/config/cpu/s390/bits/cpu_limits.h [new file with mode: 0644]
libstdc++-v3/config/cpu/x86-64/bits/cpu_limits.h [moved from libstdc++-v3/config/cpu/x86-64/bits/limits.h with 95% similarity]
libstdc++-v3/config/os/aix/bits/os_defines.h
libstdc++-v3/config/os/bsd/freebsd/bits/os_defines.h
libstdc++-v3/config/os/bsd/netbsd/bits/os_defines.h
libstdc++-v3/config/os/djgpp/bits/os_defines.h
libstdc++-v3/config/os/generic/bits/os_defines.h
libstdc++-v3/config/os/gnu-linux/bits/os_defines.h
libstdc++-v3/config/os/hpux/bits/os_defines.h
libstdc++-v3/config/os/irix/irix5.2/bits/os_defines.h
libstdc++-v3/config/os/irix/irix6.5/bits/os_defines.h
libstdc++-v3/config/os/newlib/bits/os_defines.h
libstdc++-v3/config/os/solaris/solaris2.5/bits/os_defines.h
libstdc++-v3/config/os/solaris/solaris2.6/bits/os_defines.h
libstdc++-v3/config/os/solaris/solaris2.7/bits/os_defines.h
libstdc++-v3/configure
libstdc++-v3/configure.in
libstdc++-v3/configure.target
libstdc++-v3/include/Makefile.am
libstdc++-v3/include/Makefile.in
libstdc++-v3/include/bits/c++config
libstdc++-v3/include/bits/limits_generic.h [deleted file]
libstdc++-v3/include/bits/std_limits.h
libstdc++-v3/libio/Makefile.in
libstdc++-v3/libmath/Makefile.in
libstdc++-v3/libsupc++/Makefile.in
libstdc++-v3/mknumeric_limits [deleted file]
libstdc++-v3/po/Makefile.in
libstdc++-v3/src/Makefile.in
libstdc++-v3/src/gen-num-limits.cc [deleted file]
libstdc++-v3/src/limits.cc
libstdc++-v3/src/limits_generic.cc [deleted file]
libstdc++-v3/testsuite/Makefile.in

index 2e6231a..eb56ce3 100644 (file)
@@ -1,3 +1,36 @@
+2001-10-22  Benjamin Kosnik  <bkoz@redhat.com>
+
+       * config/cpu/i386/bits/limits.h: Move to...
+       * config/cpu/i386/bits/cpu_limits.h: ...here.
+       * config/cpu/cris/bits/cpu_limits.h: Same.
+       * config/cpu/powerpc/bits/cpu_limits.h: Same.   
+       * config/cpu/x86-64/bits/cpu_limits.h: Same.            
+       * config/cpu/alpha/bits/cpu_limits.h: New.
+       * config/cpu/m68k/bits/cpu_limits.h: New.
+       * config/cpu/s390/bits/cpu_limits.h: New.
+       * config/os/aix/bits/os_defines.h: Tweaks.
+       * config/os/bsd/freebsd/bits/os_defines.h: Same.
+       * config/os/bsd/netbsd/bits/os_defines.h: Same.
+       * config/os/djgpp/bits/os_defines.h: Same.
+       * config/os/generic/bits/os_defines.h: Same.
+       * config/os/gnu-linux/bits/os_defines.h: Same.
+       * config/os/hpux/bits/os_defines.h: Same.
+       * config/os/irix/irix5.2/bits/os_defines.h: Same.
+       * config/os/irix/irix6.5/bits/os_defines.h: Same.
+       * config/os/newlib/bits/os_defines.h: Same.
+       * config/os/solaris/solaris2.5/bits/os_defines.h: Same.
+       * config/os/solaris/solaris2.6/bits/os_defines.h: Same.
+       * config/os/solaris/solaris2.7/bits/os_defines.h: Same.
+       
+       * include/bits/c++config: Remove include.       
+       * include/bits/limits_generic.h: Remove.
+       * include/bits/std_limits.h: Include cpu_limits.h.
+       * include/Makefile.am: Fixup.
+       * src/limits.cc: Tweak.
+       * src/limits_generic.cc: Remove.
+       * src/gen-num-limits.cc: Remove.
+       * mknumeric_limits: Remove.
+       
 2001-10-20  Brendan Kehoe  <brendan@zen.org>
 
        * bits/type_traits.h (_Bool): Removed this type.
index 34bae7d..b67209b 100644 (file)
@@ -76,6 +76,7 @@ CCODECVT_H = @CCODECVT_H@
 CLOCALE_H = @CLOCALE_H@
 CMESSAGES_H = @CMESSAGES_H@
 CPP = @CPP@
+CPU_LIMITS_INC_SRCDIR = @CPU_LIMITS_INC_SRCDIR@
 CSHADOW_FLAGS = @CSHADOW_FLAGS@
 CSTDIO_H = @CSTDIO_H@
 CXX = @CXX@
@@ -106,7 +107,6 @@ LIBMATH_INCLUDES = @LIBMATH_INCLUDES@
 LIBSUPCXX_INCLUDES = @LIBSUPCXX_INCLUDES@
 LIBSUPCXX_PICFLAGS = @LIBSUPCXX_PICFLAGS@
 LIBTOOL = @LIBTOOL@
-LIMITS_INC_SRCDIR = @LIMITS_INC_SRCDIR@
 LN_S = @LN_S@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
 #ifndef _GLIBCPP_CPU_LIMITS
 #define _GLIBCPP_CPU_LIMITS 1
 
+#define __glibcpp_long_bits 64
+
 #define __glibcpp_long_double_bits 64
 
 #endif
+
+
+
diff --git a/libstdc++-v3/config/cpu/generic/bits/cpu_limits.h b/libstdc++-v3/config/cpu/generic/bits/cpu_limits.h
new file mode 100644 (file)
index 0000000..0438f7c
--- /dev/null
@@ -0,0 +1,41 @@
+// Copyright (C) 2001 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, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+// 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.
+
+#ifndef _GLIBCPP_CPU_LIMITS
+#define _GLIBCPP_CPU_LIMITS 1
+
+// Nothing is defined in the generic file.  In that way, we fall back
+// on the defaults in std_limits.h.
+
+// If you need to override these defaults, you can either use a
+// CPU-specific version (in which case you must modify
+// configure.target) or you must add the overrides to your
+// os_defines.h.  In general, if all systems for your CPU use the
+// same values, it is best to use a cpu-specific configuration file.
+
+#endif
+
similarity index 95%
rename from libstdc++-v3/config/cpu/i386/bits/limits.h
rename to libstdc++-v3/config/cpu/i386/bits/cpu_limits.h
index 31b6eab..be304e2 100644 (file)
@@ -28,9 +28,6 @@
 #ifndef _GLIBCPP_CPU_LIMITS
 #define _GLIBCPP_CPU_LIMITS 1
 
-// Some operating systems set this
-#ifndef __glibcpp_long_double_bits
 #define __glibcpp_long_double_bits 80
-#endif
 
 #endif
diff --git a/libstdc++-v3/config/cpu/m68k/bits/cpu_limits.h b/libstdc++-v3/config/cpu/m68k/bits/cpu_limits.h
new file mode 100644 (file)
index 0000000..07e4e03
--- /dev/null
@@ -0,0 +1,35 @@
+// Copyright (C) 2001 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, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+// 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.
+
+#ifndef _GLIBCPP_CPU_LIMITS
+#define _GLIBCPP_CPU_LIMITS 1
+
+#define __glibcpp_long_double_bits 96
+
+#endif
+
+
diff --git a/libstdc++-v3/config/cpu/powerpc/bits/cpu_limits.h b/libstdc++-v3/config/cpu/powerpc/bits/cpu_limits.h
new file mode 100644 (file)
index 0000000..87d7883
--- /dev/null
@@ -0,0 +1,38 @@
+// Copyright (C) 2001 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, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+// 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.
+
+#ifndef _GLIBCPP_CPU_LIMITS
+#define _GLIBCPP_CPU_LIMITS 1
+
+#ifndef __LONG_DOUBLE_128__
+#define __glibcpp_long_double_bits 64
+#endif
+
+#endif
+
+
+
diff --git a/libstdc++-v3/config/cpu/s390/bits/cpu_limits.h b/libstdc++-v3/config/cpu/s390/bits/cpu_limits.h
new file mode 100644 (file)
index 0000000..21d31e3
--- /dev/null
@@ -0,0 +1,38 @@
+// Copyright (C) 2001 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, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+// 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.
+
+#ifndef _GLIBCPP_CPU_LIMITS
+#define _GLIBCPP_CPU_LIMITS 1
+
+#define __glibcpp_long_bits 64
+
+#define __glibcpp_long_double_bits 64
+
+#endif
+
+
+
@@ -28,9 +28,6 @@
 #ifndef _GLIBCPP_CPU_LIMITS
 #define _GLIBCPP_CPU_LIMITS 1
 
-// Some operating systems set this
-#ifndef __glibcpp_long_double_bits
 #define __glibcpp_long_double_bits 80
-#endif
 
 #endif
index 101a0b2..188ced1 100644 (file)
 #ifndef _GLIBCPP_OS_DEFINES
 #define _GLIBCPP_OS_DEFINES
 
-/* System-specific #define, typedefs, corrections, etc, go here.  This
-   file will come before all others. */
+// System-specific #define, typedefs, corrections, etc, go here.  This
+// file will come before all others.
 
 #undef _XOPEN_SOURCE
 #define _XOPEN_SOURCE 500
 #undef _XOPEN_SOURCE_EXTENDED
 #define _XOPEN_SOURCE_EXTENDED 1
 
-/* off64_t */
+// off64_t
 #ifndef _LARGE_FILE_API
 #define _LARGE_FILE_API
 #endif
 
-/* atomic types */
+// atomic types
 #ifndef _ALL_SOURCE
 #define _ALL_SOURCE
 #endif
 #undef _G_USING_THUNKS
 #define _G_USING_THUNKS 0
 
-#define __glibcpp_long_double_bits 64
-
 #if !defined(_AIX51) || !defined(__64BIT__)
 #define __glibcpp_wchar_t_bits 16
+#define __glibcpp_wchar_t_is_signed false
 #endif
 
 #ifdef __64BIT__
index 3c31f3a..9e6bbaf 100644 (file)
 
 
 #ifndef _GLIBCPP_OS_DEFINES
-#  define _GLIBCPP_OS_DEFINES
+#define _GLIBCPP_OS_DEFINES 1
 
-
-/* System-specific #define, typedefs, corrections, etc, go here.  This
-   file will come before all others. */
+// System-specific #define, typedefs, corrections, etc, go here.  This
+// file will come before all others.
 
 #define __glibcpp_long_double_bits __glibcpp_double_bits
 
 #define _GLIBCPP_AVOID_FSEEK 1
 
 #endif
-
-
index 6115e97..03f760f 100644 (file)
 // invalidate any other reasons why the executable file might be covered by
 // the GNU General Public License.
 
-
 #ifndef _GLIBCPP_OS_DEFINES
-#  define _GLIBCPP_OS_DEFINES
-
-
-/* Settings for NetBSD.  */
+#define _GLIBCPP_OS_DEFINES 1
 
-/* __off_t is a typedef declared in stdio.h.  */
-/* #define __off_t off_t */
-
-/* We don't have off64_t */
-/* #define __off64_t off64_t */
+// System-specific #define, typedefs, corrections, etc, go here.  This
+// file will come before all others.
 
 #define __ssize_t ssize_t
 
 #endif
-
-
index f979b1e..ce0bf24 100644 (file)
 
 
 #ifndef _GLIBCPP_OS_DEFINES
-#define _GLIBCPP_OS_DEFINES
+#define _GLIBCPP_OS_DEFINES 1
 
-
-/* System-specific #define, typedefs, corrections, etc, go here.  This
-   file will come before all others. */
+// System-specific #define, typedefs, corrections, etc, go here.  This
+// file will come before all others.
 
 #define __off_t off_t
 #define __off64_t off64_t
@@ -42,3 +41,5 @@
 // FIXME: should there be '#undef POSIX_SOURCE'?
 
 #endif
+
+
index b3984f3..143c07e 100644 (file)
 
 
 #ifndef _GLIBCPP_OS_DEFINES
-#  define _GLIBCPP_OS_DEFINES
+#define _GLIBCPP_OS_DEFINES 1
 
 // System-specific #define, typedefs, corrections, etc, go here.  This
 // file will come before all others.
 
-#ifdef __alpha__
-#define __glibcpp_long_bits 64
-#endif
-
 #endif
index 2b4375e..f5612ed 100644 (file)
 // invalidate any other reasons why the executable file might be covered by
 // the GNU General Public License.
 
-
 #ifndef _GLIBCPP_OS_DEFINES
 #define _GLIBCPP_OS_DEFINES 1
 
+// System-specific #define, typedefs, corrections, etc, go here.  This
+// file will come before all others.
+
 // This keeps isanum, et al from being propagated as macros.
 #define __NO_CTYPE 1
 
@@ -63,21 +65,12 @@ typedef __loff_t __off64_t;
 #  define __NO_STRING_INLINES
 # endif
 
-#if defined (__powerpc__) || defined (__s390__)
-#define __glibcpp_wchar_t_is_signed true
-#endif
-
-#if defined (__alpha__) || defined (__powerpc64__) || (defined (__sparc__) && defined(__arch64__)) || defined (__s390x__)
+#if defined(__sparc__) && defined(__arch64__)
 #define __glibcpp_long_bits 64
 #endif
 
-#if defined (__alpha__) || (defined (__powerpc__) && !defined (__LONG_DOUBLE_128__)) || defined (__s390__)
-#define __glibcpp_long_double_bits 64
-#endif
-
-#if defined (__mc68000__)
-#define __glibcpp_long_double_bits 96
+#ifdef __powerpc64__
+#define __glibcpp_long_bits 64
 #endif
 
 #endif
-
index 45f000f..d7045d0 100644 (file)
 // invalidate any other reasons why the executable file might be covered by
 // the GNU General Public License.
 
-
 #ifndef _GLIBCPP_OS_DEFINES
-#  define _GLIBCPP_OS_DEFINES
-
+#define _GLIBCPP_OS_DEFINES
 
-/* System-specific #define, typedefs, corrections, etc, go here.  This
-   file will come before all others. */
+// System-specific #define, typedefs, corrections, etc, go here.  This
+// file will come before all others.
 
 #define __off_t off_t
 #define __off64_t off64_t
@@ -46,4 +44,3 @@
 #endif
 
 #endif
-
index b4e2a1f..50db680 100644 (file)
 // invalidate any other reasons why the executable file might be covered by
 // the GNU General Public License.
 
-
 #ifndef _GLIBCPP_OS_DEFINES
-#define _GLIBCPP_OS_DEFINES
-
-/* System-specific #define, typedefs, corrections, etc, go here.  This
-   file will come before all others. */
-
-/* We need large file support.  There are two ways to turn it on:
-   by defining either _LARGEFILE64_SOURCE or _SGI_SOURCE.  However,
-   it does not actually work to define only the former, as then
-   <sys/stat.h> is invalid: `st_blocks' is defined to be a macro,
-   but then used as a field name.  So, we have to turn on 
-   _SGI_SOURCE.  That only works if _POSIX_SOURCE is turned off,
-   so we have to explicitly turn it off.  (Some of the libio C files
-   explicitly try to turn it on.)  _SGI_SOURCE is actually turned on 
-   implicitly via the command-line.  */
+#define _GLIBCPP_OS_DEFINES 1
+
+// System-specific #define, typedefs, corrections, etc, go here.  This
+// file will come before all others.
+
+// We need large file support.  There are two ways to turn it on: by
+// defining either _LARGEFILE64_SOURCE or _SGI_SOURCE.  However, it
+// does not actually work to define only the former, as then
+// <sys/stat.h> is invalid: `st_blocks' is defined to be a macro, but
+// then used as a field name.  So, we have to turn on _SGI_SOURCE.
+// That only works if _POSIX_SOURCE is turned off, so we have to
+// explicitly turn it off.  (Some of the libio C files explicitly try
+// to turn it on.)  _SGI_SOURCE is actually turned on implicitly via
+// the command-line.
 #undef _POSIX_SOURCE
 
 #define __off_t off_t
 #define __off64_t off64_t
 #define __ssize_t ssize_t
 
-/* GCC does not use thunks on IRIX.  */
+// GCC does not use thunks on IRIX.
 #define _G_USING_THUNKS 0
 
 #endif
-
-
-
index e5fa694..e8f1dcc 100644 (file)
 // invalidate any other reasons why the executable file might be covered by
 // the GNU General Public License.
 
-
 #ifndef _GLIBCPP_OS_DEFINES
-#define _GLIBCPP_OS_DEFINES
-
-/* System-specific #define, typedefs, corrections, etc, go here.  This
-   file will come before all others. */
-
-/* We need large file support.  There are two ways to turn it on:
-   by defining either _LARGEFILE64_SOURCE or _SGI_SOURCE.  However,
-   it does not actually work to define only the former, as then
-   <sys/stat.h> is invalid: `st_blocks' is defined to be a macro,
-   but then used as a field name.  So, we have to turn on 
-   _SGI_SOURCE.  That only works if _POSIX_SOURCE is turned off,
-   so we have to explicitly turn it off.  (Some of the libio C files
-   explicitly try to turn it on.)  _SGI_SOURCE is actually turned on 
-   implicitly via the command-line.  */
+#define _GLIBCPP_OS_DEFINES 1
+
+// System-specific #define, typedefs, corrections, etc, go here.  This
+// file will come before all others.
+
+// We need large file support.  There are two ways to turn it on: by
+// defining either _LARGEFILE64_SOURCE or _SGI_SOURCE.  However, it
+// does not actually work to define only the former, as then
+// <sys/stat.h> is invalid: `st_blocks' is defined to be a macro, but
+// then used as a field name.  So, we have to turn on _SGI_SOURCE.
+// That only works if _POSIX_SOURCE is turned off, so we have to
+// explicitly turn it off.  (Some of the libio C files explicitly try
+// to turn it on.)  _SGI_SOURCE is actually turned on implicitly via
+// the command-line.
 #undef _POSIX_SOURCE
 
 #define __off_t off_t
 #define __off64_t off64_t
 #define __ssize_t ssize_t
 
-/* GCC does not use thunks on IRIX.  */
+// GCC does not use thunks on IRIX. 
 #define _G_USING_THUNKS 0
 
 #define __glibcpp_long_double_bits 64
index ba40cee..1277661 100644 (file)
 // invalidate any other reasons why the executable file might be covered by
 // the GNU General Public License.
 
-
 #ifndef _GLIBCPP_OS_DEFINES
-#  define _GLIBCPP_OS_DEFINES
-
-
-/* System-specific #define, typedefs, corrections, etc, go here.  This
-   file will come before all others. */
+#define _GLIBCPP_OS_DEFINES 1
 
+// System-specific #define, typedefs, corrections, etc, go here.  This
+// file will come before all others.
 
 #endif
-
-
index 5a756b4..0edc784 100644 (file)
 // invalidate any other reasons why the executable file might be covered by
 // the GNU General Public License.
 
-
 #ifndef _GLIBCPP_OS_DEFINES
-#  define _GLIBCPP_OS_DEFINES
+#define _GLIBCPP_OS_DEFINES 1
 
-/* System-specific #define, typedefs, corrections, etc, go here.  This
-   file will come before all others. */
+// System-specific #define, typedefs, corrections, etc, go here.  This
+// file will come before all others.
 
 #define _GLIBCPP_AVOID_FSEEK 1
 
index 961e29d..3acdf5c 100644 (file)
 // invalidate any other reasons why the executable file might be covered by
 // the GNU General Public License.
 
-
 #ifndef _GLIBCPP_OS_DEFINES
-#  define _GLIBCPP_OS_DEFINES
+#define _GLIBCPP_OS_DEFINES 1
 
-/* System-specific #define, typedefs, corrections, etc, go here.  This
-   file will come before all others. */
+// System-specific #define, typedefs, corrections, etc, go here.  This
+// file will come before all others.
 
 #define _GLIBCPP_AVOID_FSEEK 1
 
index 67dae7a..a0fd243 100644 (file)
 // invalidate any other reasons why the executable file might be covered by
 // the GNU General Public License.
 
-
 #ifndef _GLIBCPP_OS_DEFINES
-#  define _GLIBCPP_OS_DEFINES
+#define _GLIBCPP_OS_DEFINES 1
 
-/* System-specific #define, typedefs, corrections, etc, go here.  This
-   file will come before all others. */
+// System-specific #define, typedefs, corrections, etc, go here.  This
+// file will come before all others.
 
 #define _GLIBCPP_AVOID_FSEEK 1
 
index fcbd6f2..d156ac5 100755 (executable)
@@ -16883,8 +16883,8 @@ fi
 #line 16884 "configure"
 #include "confdefs.h"
 
-#include <setjmp.h>
-
+  #include <setjmp.h>
+  
 int main() {
 sigjmp_buf env; while (! sigsetjmp (env, 1)) siglongjmp (env, 1);
 ; return 0; }
@@ -16895,6 +16895,7 @@ if { (eval echo configure:16893: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5;
 #define HAVE_SIGSETJMP 1
 EOF
 
+  
 else
   echo "configure: failed program was:" >&5
   cat conftest.$ac_ext >&5
@@ -16905,17 +16906,17 @@ rm -f conftest*
 do
 ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:16909: checking for $ac_hdr" >&5
+echo "configure:16910: checking for $ac_hdr" >&5
 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 16914 "configure"
+#line 16915 "configure"
 #include "confdefs.h"
 #include <$ac_hdr>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:16919: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:16920: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -16944,12 +16945,12 @@ done
 for ac_func in getpagesize
 do
 echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:16948: checking for $ac_func" >&5
+echo "configure:16949: checking for $ac_func" >&5
 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 16953 "configure"
+#line 16954 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char $ac_func(); below.  */
@@ -16972,7 +16973,7 @@ $ac_func();
 
 ; return 0; }
 EOF
-if { (eval echo configure:16976: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:16977: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_func_$ac_func=yes"
 else
@@ -16997,7 +16998,7 @@ fi
 done
 
 echo $ac_n "checking for working mmap""... $ac_c" 1>&6
-echo "configure:17001: checking for working mmap" >&5
+echo "configure:17002: checking for working mmap" >&5
 if eval "test \"`echo '$''{'ac_cv_func_mmap_fixed_mapped'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -17005,7 +17006,7 @@ else
   ac_cv_func_mmap_fixed_mapped=no
 else
   cat > conftest.$ac_ext <<EOF
-#line 17009 "configure"
+#line 17010 "configure"
 #include "confdefs.h"
 
 /* Thanks to Mike Haertel and Jim Avera for this test.
@@ -17158,7 +17159,7 @@ main()
 }
 
 EOF
-if { (eval echo configure:17162: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:17163: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
 then
   ac_cv_func_mmap_fixed_mapped=yes
 else
 do
 ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:17193: checking for $ac_hdr" >&5
+echo "configure:17194: checking for $ac_hdr" >&5
 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 17198 "configure"
+#line 17199 "configure"
 #include "confdefs.h"
 #include <$ac_hdr>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:17203: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:17204: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -17232,7 +17233,7 @@ done
     # Can't do these in a loop, else the resulting syntax is wrong.
     
   cat > conftest.$ac_ext <<EOF
-#line 17236 "configure"
+#line 17237 "configure"
 #include "confdefs.h"
 #include <sys/resource.h>
                   #include <unistd.h>
@@ -17241,7 +17242,7 @@ int main() {
  int f = RLIMIT_DATA ; 
 ; return 0; }
 EOF
-if { (eval echo configure:17245: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:17246: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   glibcpp_mresult=1
 else
@@ -17258,7 +17259,7 @@ EOF
 
     
   cat > conftest.$ac_ext <<EOF
-#line 17262 "configure"
+#line 17263 "configure"
 #include "confdefs.h"
 #include <sys/resource.h>
                   #include <unistd.h>
@@ -17267,7 +17268,7 @@ int main() {
  int f = RLIMIT_RSS ; 
 ; return 0; }
 EOF
-if { (eval echo configure:17271: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:17272: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   glibcpp_mresult=1
 else
@@ -17284,7 +17285,7 @@ EOF
 
     
   cat > conftest.$ac_ext <<EOF
-#line 17288 "configure"
+#line 17289 "configure"
 #include "confdefs.h"
 #include <sys/resource.h>
                   #include <unistd.h>
@@ -17293,7 +17294,7 @@ int main() {
  int f = RLIMIT_VMEM ; 
 ; return 0; }
 EOF
-if { (eval echo configure:17297: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:17298: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   glibcpp_mresult=1
 else
@@ -17310,7 +17311,7 @@ EOF
 
     
   cat > conftest.$ac_ext <<EOF
-#line 17314 "configure"
+#line 17315 "configure"
 #include "confdefs.h"
 #include <sys/resource.h>
                   #include <unistd.h>
@@ -17319,7 +17320,7 @@ int main() {
  int f = RLIMIT_AS ; 
 ; return 0; }
 EOF
-if { (eval echo configure:17323: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:17324: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   glibcpp_mresult=1
 else
@@ -17341,7 +17342,7 @@ EOF
 else
   
       cat > conftest.$ac_ext <<EOF
-#line 17345 "configure"
+#line 17346 "configure"
 #include "confdefs.h"
 #include <sys/resource.h>
                      #include <unistd.h>
@@ -17350,7 +17351,7 @@ int main() {
  struct rlimit r; setrlimit(0, &r);
 ; return 0; }
 EOF
-if { (eval echo configure:17354: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:17355: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_setrlimit=yes
 else
@@ -17366,7 +17367,7 @@ fi
   fi
 
   echo $ac_n "checking for testsuite memory limit support""... $ac_c" 1>&6
-echo "configure:17370: checking for testsuite memory limit support" >&5
+echo "configure:17371: checking for testsuite memory limit support" >&5
   if test $setrlimit_have_headers = yes && test $ac_setrlimit = yes; then
     ac_mem_limits=yes
     cat >> confdefs.h <<\EOF
@@ -17385,7 +17386,7 @@ fi
 # Propagate the target-specific source directories through the build chain.
 OS_INC_SRCDIR=$os_include_dir/bits
 ATOMICITY_INC_SRCDIR=$ATOMICITYH/bits
-LIMITS_INC_SRCDIR=$LIMITSH/bits
+CPU_LIMITS_INC_SRCDIR=$CPULIMITSH/bits
 
 
 
@@ -17468,13 +17469,13 @@ glibcpp_toolexeclibdir=no
 glibcpp_prefixdir=${prefix}
 
 echo $ac_n "checking for interface version number""... $ac_c" 1>&6
-echo "configure:17472: checking for interface version number" >&5
+echo "configure:17473: checking for interface version number" >&5
 libstdcxx_interface=$INTERFACE
 echo "$ac_t""$libstdcxx_interface" 1>&6
 
 # Process the option --with-gxx-include-dir=<path to include-files directory>
 echo $ac_n "checking for --with-gxx-include-dir""... $ac_c" 1>&6
-echo "configure:17478: checking for --with-gxx-include-dir" >&5
+echo "configure:17479: checking for --with-gxx-include-dir" >&5
 # Check whether --with-gxx-include-dir or --without-gxx-include-dir was given.
 if test "${with_gxx_include_dir+set}" = set; then
   withval="$with_gxx_include_dir"
@@ -17498,7 +17499,7 @@ echo "$ac_t""$gxx_include_dir" 1>&6
 
 # Process the option "--enable-version-specific-runtime-libs"
 echo $ac_n "checking for --enable-version-specific-runtime-libs""... $ac_c" 1>&6
-echo "configure:17502: checking for --enable-version-specific-runtime-libs" >&5
+echo "configure:17503: checking for --enable-version-specific-runtime-libs" >&5
 # Check whether --enable-version-specific-runtime-libs or --disable-version-specific-runtime-libs was given.
 if test "${enable_version_specific_runtime_libs+set}" = set; then
   enableval="$enable_version_specific_runtime_libs"
@@ -17545,7 +17546,7 @@ if test x"$glibcpp_toolexecdir" = x"no"; then
 fi
 
 echo $ac_n "checking for install location""... $ac_c" 1>&6
-echo "configure:17549: checking for install location" >&5
+echo "configure:17550: checking for install location" >&5
 echo "$ac_t""$gxx_include_dir" 1>&6
 
 
@@ -17822,7 +17823,7 @@ s%@USE_COMPLEX_LONG_DOUBLE@%$USE_COMPLEX_LONG_DOUBLE%g
 s%@WERROR@%$WERROR%g
 s%@OS_INC_SRCDIR@%$OS_INC_SRCDIR%g
 s%@ATOMICITY_INC_SRCDIR@%$ATOMICITY_INC_SRCDIR%g
-s%@LIMITS_INC_SRCDIR@%$LIMITS_INC_SRCDIR%g
+s%@CPU_LIMITS_INC_SRCDIR@%$CPU_LIMITS_INC_SRCDIR%g
 s%@GLIBCPP_IS_CROSS_COMPILING@%$GLIBCPP_IS_CROSS_COMPILING%g
 s%@CANADIAN_TRUE@%$CANADIAN_TRUE%g
 s%@CANADIAN_FALSE@%$CANADIAN_FALSE%g
index ebf969f..ea92942 100644 (file)
@@ -225,9 +225,10 @@ else
   AC_LC_MESSAGES
 
   AC_TRY_COMPILE([
-#include <setjmp.h>
-], [sigjmp_buf env; while (! sigsetjmp (env, 1)) siglongjmp (env, 1);],
-[AC_DEFINE(HAVE_SIGSETJMP, 1, [Define if sigsetjmp is available.  ])])
+  #include <setjmp.h>
+  ], [sigjmp_buf env; while (! sigsetjmp (env, 1)) siglongjmp (env, 1);],
+  [AC_DEFINE(HAVE_SIGSETJMP, 1, [Define if sigsetjmp is available.  ])
+  ])
 
   AC_FUNC_MMAP
 
@@ -239,10 +240,10 @@ fi
 # Propagate the target-specific source directories through the build chain.
 OS_INC_SRCDIR=$os_include_dir/bits
 ATOMICITY_INC_SRCDIR=$ATOMICITYH/bits
-LIMITS_INC_SRCDIR=$LIMITSH/bits
+CPU_LIMITS_INC_SRCDIR=$CPULIMITSH/bits
 AC_SUBST(OS_INC_SRCDIR)
 AC_SUBST(ATOMICITY_INC_SRCDIR)
-AC_SUBST(LIMITS_INC_SRCDIR)
+AC_SUBST(CPU_LIMITS_INC_SRCDIR)
 
 # Set up cross-compile flags
 AC_SUBST(GLIBCPP_IS_CROSS_COMPILING)
index 61f331e..304457d 100644 (file)
@@ -13,7 +13,6 @@
 #   target                The configuration target
 #   target_cpu            The configuration target CPU
 #   target_os             The configuration target OS
-#   target_optspace       --enable-target-optspace ("yes", "no", "")
 
 # It possibly modifies the following shell variables:
 #   cpu_include_dir        CPU-specific include directory, relative to srcdir
@@ -22,7 +21,6 @@
 
 # Set any CPU dependent compiler flags.
 # THIS TABLE IS SORTED.  KEEP IT THAT WAY.
-
 case "${target_cpu}" in
   alpha*)
     cpu_include_dir="config/cpu/alpha"
@@ -68,7 +66,6 @@ esac
 
 # Set any OS dependent compiler flags.
 # THIS TABLE IS SORTED.  KEEP IT THAT WAY.
-
 case "${target_os}" in
   aix4.[3456789]* | aix[56789]*)
     os_include_dir="config/os/aix"
@@ -115,7 +112,6 @@ esac
 
 # Set any flags dependant on the full target triplet.
 # THIS TABLE IS SORTED.  KEEP IT THAT WAY.
-
 case "${target}" in
    *-*-aix[456789]*)
      # We set os_include_dir to config/os/aix only on AIX 4.3 and
@@ -135,24 +131,32 @@ case "${target}" in
      ;;
 esac
 
-# Set LIMITSH to the directory where the configuration-dependent
-# limits.h can be found.
+# Set CPULIMITSH to the directory where the configuration-dependent
+# cpu_limits.h can be found.
 # THIS TABLE IS SORTED.  KEEP IT THAT WAY.
-
 case "${target}" in
+   alpha-*-*)
+     CPULIMITSH=config/cpu/alpha
+     ;;
    cris-*-*)
-     LIMITSH=config/cpu/cris
+     CPULIMITSH=config/cpu/cris
      ;;
    i?86-*-*)
-     LIMITSH=config/cpu/i386
+     CPULIMITSH=config/cpu/i386
+     ;;
+   m68k-*-* | m680[246]0-*-*)
+     CPULIMITSH=config/cpu/m68k
      ;;
    powerpc-*-*)
-     LIMITSH=config/cpu/powerpc
+     CPULIMITSH=config/cpu/powerpc
+     ;;
+   s390-*-* | s390x-*-*)
+     CPULIMITSH=config/cpu/s390
      ;;
    x86_64-*-*)
-     LIMITSH=config/cpu/x86-64
+     CPULIMITSH=config/cpu/x86-64
      ;;
    *)
-     LIMITSH=config/cpu/generic
+     CPULIMITSH=config/cpu/generic
      ;;
 esac
index da0bad8..383e391 100644 (file)
@@ -263,7 +263,7 @@ target_headers = \
        ${target_srcdir}/ctype_noninline.h \
        ${target_srcdir}/os_defines.h \
        ${glibcpp_srcdir}/@ATOMICITY_INC_SRCDIR@/atomicity.h \
-       ${glibcpp_srcdir}/@LIMITS_INC_SRCDIR@/limits.h
+       ${glibcpp_srcdir}/@CPU_LIMITS_INC_SRCDIR@/cpu_limits.h 
 
 thread_builddir = ./${target_alias}/bits
 thread_headers = \
index a7cca4c..f16780f 100644 (file)
@@ -76,6 +76,7 @@ CCODECVT_H = @CCODECVT_H@
 CLOCALE_H = @CLOCALE_H@
 CMESSAGES_H = @CMESSAGES_H@
 CPP = @CPP@
+CPU_LIMITS_INC_SRCDIR = @CPU_LIMITS_INC_SRCDIR@
 CSHADOW_FLAGS = @CSHADOW_FLAGS@
 CSTDIO_H = @CSTDIO_H@
 CXXCPP = @CXXCPP@
@@ -105,7 +106,6 @@ LIBMATH_INCLUDES = @LIBMATH_INCLUDES@
 LIBSUPCXX_INCLUDES = @LIBSUPCXX_INCLUDES@
 LIBSUPCXX_PICFLAGS = @LIBSUPCXX_PICFLAGS@
 LIBTOOL = @LIBTOOL@
-LIMITS_INC_SRCDIR = @LIMITS_INC_SRCDIR@
 LN_S = @LN_S@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
@@ -393,7 +393,7 @@ target_headers = \
        ${target_srcdir}/ctype_noninline.h \
        ${target_srcdir}/os_defines.h \
        ${glibcpp_srcdir}/@ATOMICITY_INC_SRCDIR@/atomicity.h \
-       ${glibcpp_srcdir}/@LIMITS_INC_SRCDIR@/limits.h
+       ${glibcpp_srcdir}/@CPU_LIMITS_INC_SRCDIR@/cpu_limits.h 
 
 
 thread_builddir = ./${target_alias}/bits
index dacc31b..c7ee187 100644 (file)
@@ -32,8 +32,6 @@
 
 // Pick up any OS-specific definitions.
 #include <bits/os_defines.h>
-// And any CPU-specific definitions.
-#include <bits/limits.h>
 
 // The current version of the C++ library in compressed ISO date format.
 #define __GLIBCPP__ 20011023
 // by the compiler, but instead instantiated into the library binary.
 #define _GLIBCPP_FULLY_COMPLIANT_HEADERS 1
 
-// Define this to permit user-level control of the expansion of string
-// buffers (via a fn pointer), see basic_string.* for more.
-//#define _GLIBCPP_ALLOC_CONTROL
-
 // To enable older, ARM-style iostreams and other anachronisms use this.
 //#define _GLIBCPP_DEPRECATED 1
 
 // Enable concept checking code from the boost libraries.
 //#define _GLIBCPP_CONCEPT_CHECKS 1
 
+// Define this to permit user-level control of the expansion of string
+// buffers (via a fn pointer), see basic_string.* for more.
+//#define _GLIBCPP_ALLOC_CONTROL
+
 // Map gthr.h abstraction to that required for STL.  Do not key off of
 // __GTHREADS at this point since we haven't seen the correct symbol
 // yet, instead setup so that include/bits/stl_threads.h will know to
diff --git a/libstdc++-v3/include/bits/limits_generic.h b/libstdc++-v3/include/bits/limits_generic.h
deleted file mode 100644 (file)
index a5dd299..0000000
+++ /dev/null
@@ -1,828 +0,0 @@
-// The template and inlines for the -*- C++ -*- numeric_limits classes.
-
-// Copyright (C) 2000-2001 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, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
-// 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.
-
-// Note: this is not a conforming implementation.
-// Written by Gabriel Dos Reis <Gabriel.Dos-Reis@cmla.ens-cachan.fr>
-
-//
-// ISO 14882:1998
-// 18.2.1
-//
-
-/** @file limits_generic.h
- *  ISO 14882:1998
- *  18.2.1
- */
-
-#ifndef _CPP_NUMERIC_LIMITS
-#define _CPP_NUMERIC_LIMITS 1
-
-#pragma GCC system_header
-
-#include <bits/c++config.h>
-#include <bits/std_cfloat.h>
-#include <bits/std_climits.h>
-#if defined( _GLIBCPP_USE_WCHAR_T) 
-#include <bits/std_cwchar.h>
-#endif
-
-namespace std {
-
-    /// Rounding style determines the behavior of floating-point calculations.
-    enum float_round_style {
-        round_indeterminate       = -1,
-        round_toward_zero         = 0,
-        round_to_nearest          = 1,
-        round_toward_infinity     = 2,
-        round_toward_neg_infinity = 3
-    };
-
-    /// This enum signals whether a type has denormalization.
-    enum float_denorm_style {
-        denorm_indeterminate = -1,
-        denorm_absent        = 0,
-        denorm_present       = 1
-    };
-
-    /**
-     *  [18.2.1]/1:  "The numeric_limits component provides a C++ program
-     *  with information about various properties of the implementation's
-     *  representation of the fundamental types."  All of the standard
-     *  fundamental types have specializations of this class template.
-     *  @brief Properties of fundamental types on a per-platform basis.
-     */
-    template<typename _T> struct numeric_limits {
-        static const bool is_specialized = false;
-
-        static _T min() throw() { return static_cast<_T>(0); }
-        static _T max() throw() { return static_cast<_T>(0); }
-
-        static const int digits = 0;
-        static const int digits10 = 0;
-        static const bool is_signed = false;
-        static const bool is_integer = false;
-        static const bool is_exact = false;
-        static const int radix = 0;
-
-        static _T epsilon() throw() { return static_cast<_T>(0); }
-        static _T round_error() throw() { return static_cast<_T>(0); }
-
-        static const int min_exponent = 0;
-        static const int min_exponent10 = 0;
-        static const int max_exponent = 0;
-        static const int max_exponent10 = 0;
-
-        static const bool has_infinity = false;
-        static const bool has_quiet_NaN = false;
-        static const bool has_signaling_NaN = false;
-        static const float_denorm_style has_denorm = denorm_absent;
-        static const bool has_denorm_loss = false;
-
-        static _T infinity() throw()  { return static_cast<_T>(0); }
-        static _T quiet_NaN() throw() { return static_cast<_T>(0); }
-        static _T signaling_NaN() throw() { return static_cast<_T>(0); }
-        static _T denorm_min() throw() { return static_cast<_T>(0); }
-
-        static const bool is_iec559 = false;
-        static const bool is_bounded = false;
-        static const bool is_modulo = false;
-
-        static const bool traps = false;
-        static const bool tinyness_before = false;
-        static const float_round_style round_style = round_toward_zero;
-    };
-
-    template<typename _T> _T __limits_infinity();
-    template<typename _T> _T __limits_quiet_NaN();
-    template<typename _T> _T __limits_signaling_NaN();
-    template<typename _T> _T __limits_denorm_min();
-
-    template<> struct numeric_limits<bool> {
-        static const bool is_specialized = true;
-
-        static bool min() throw()
-        { return false; }
-        static bool max() throw()
-        { return true; }
-
-        static const int digits = 1;
-        static const int digits10 = 0;
-        static const bool is_signed = false;
-        static const bool is_integer = true;
-        static const bool is_exact = true;
-        static const int radix = 2;
-        static bool epsilon() throw()
-        { return 0; }
-        static bool round_error() throw()
-        { return 0; }
-
-        static const int min_exponent = 0;
-        static const int min_exponent10 = 0;
-        static const int max_exponent = 0;
-        static const int max_exponent10 = 0;
-
-        static const bool has_infinity = false;
-        static const bool has_quiet_NaN = false;
-        static const bool has_signaling_NaN = false;
-        static const float_denorm_style has_denorm = denorm_absent;
-        static const bool has_denorm_loss = false;
-
-        static bool infinity() throw()
-        { return static_cast<bool>(0); }
-        static bool quiet_NaN() throw()
-        { return static_cast<bool>(0); }
-        static bool signaling_NaN() throw()
-        { return static_cast<bool>(0); }
-        static bool denorm_min() throw()
-        { return static_cast<bool>(0); }
-
-        static const bool is_iec559 = false;
-        static const bool is_bounded = true;
-        static const bool is_modulo = false;
-
-        static const bool traps = false;
-        static const bool tinyness_before = false;
-        static const float_round_style round_style = round_toward_zero;
-    };
-
-    template<> struct numeric_limits<char> {
-        static const bool is_specialized = true;
-
-        static char min() throw()
-        { return CHAR_MIN; }
-        static char max() throw()
-        { return CHAR_MAX; }
-
-        static const int digits = 7;
-        static const int digits10 = 2;
-        static const bool is_signed = true;
-        static const bool is_integer = true;
-        static const bool is_exact = true;
-        static const int radix = 2;
-        static char epsilon() throw()
-        { return 0; }
-        static char round_error() throw()
-        { return 0; }
-
-        static const int min_exponent = 0;
-        static const int min_exponent10 = 0;
-        static const int max_exponent = 0;
-        static const int max_exponent10 = 0;
-
-        static const bool has_infinity = false;
-        static const bool has_quiet_NaN = false;
-        static const bool has_signaling_NaN = false;
-        static const float_denorm_style has_denorm = denorm_absent;
-        static const bool has_denorm_loss = false;
-
-        static char infinity() throw()
-        { return static_cast<char>(0); }
-        static char quiet_NaN() throw()
-        { return static_cast<char>(0); }
-        static char signaling_NaN() throw()
-        { return static_cast<char>(0); }
-        static char denorm_min() throw()
-        { return static_cast<char>(0); }
-
-        static const bool is_iec559 = false;
-        static const bool is_bounded = true;
-        static const bool is_modulo = false;
-
-        static const bool traps = false;
-        static const bool tinyness_before = false;
-        static const float_round_style round_style = round_toward_zero;
-    };
-
-    template<> struct numeric_limits<signed char> {
-        static const bool is_specialized = true;
-
-        static signed char min() throw()
-        { return SCHAR_MIN; }
-        static signed char max() throw()
-        { return SCHAR_MAX; }
-
-        static const int digits = 7;
-        static const int digits10 = 2;
-        static const bool is_signed = true;
-        static const bool is_integer = true;
-        static const bool is_exact = true;
-        static const int radix = 2;
-        static signed char epsilon() throw()
-        { return 0; }
-        static signed char round_error() throw()
-        { return 0; }
-
-        static const int min_exponent = 0;
-        static const int min_exponent10 = 0;
-        static const int max_exponent = 0;
-        static const int max_exponent10 = 0;
-
-        static const bool has_infinity = false;
-        static const bool has_quiet_NaN = false;
-        static const bool has_signaling_NaN = false;
-        static const float_denorm_style has_denorm = denorm_absent;
-        static const bool has_denorm_loss = false;
-
-        static signed char infinity() throw()
-        { return static_cast<signed char>(0); }
-        static signed char quiet_NaN() throw()
-        { return static_cast<signed char>(0); }
-        static signed char signaling_NaN() throw()
-        { return static_cast<signed char>(0); }
-        static signed char denorm_min() throw()
-        { return static_cast<signed char>(0); }
-
-        static const bool is_iec559 = false;
-        static const bool is_bounded = true;
-        static const bool is_modulo = false;
-
-        static const bool traps = false;
-        static const bool tinyness_before = false;
-        static const float_round_style round_style = round_toward_zero;
-    };
-
-    template<> struct numeric_limits<unsigned char> {
-        static const bool is_specialized = true;
-
-        static unsigned char min() throw()
-        { return 0; }
-        static unsigned char max() throw()
-        { return UCHAR_MAX; }
-
-        static const int digits = 8;
-        static const int digits10 = 2;
-        static const bool is_signed = false;
-        static const bool is_integer = true;
-        static const bool is_exact = true;
-        static const int radix = 2;
-        static unsigned char epsilon() throw()
-        { return 0; }
-        static unsigned char round_error() throw()
-        { return 0; }
-
-        static const int min_exponent = 0;
-        static const int min_exponent10 = 0;
-        static const int max_exponent = 0;
-        static const int max_exponent10 = 0;
-
-        static const bool has_infinity = false;
-        static const bool has_quiet_NaN = false;
-        static const bool has_signaling_NaN = false;
-        static const float_denorm_style has_denorm = denorm_absent;
-        static const bool has_denorm_loss = false;
-
-        static unsigned char infinity() throw()
-        { return static_cast<unsigned char>(0); }
-        static unsigned char quiet_NaN() throw()
-        { return static_cast<unsigned char>(0); }
-        static unsigned char signaling_NaN() throw()
-        { return static_cast<unsigned char>(0); }
-        static unsigned char denorm_min() throw()
-        { return static_cast<unsigned char>(0); }
-
-        static const bool is_iec559 = false;
-        static const bool is_bounded = true;
-        static const bool is_modulo = true;
-
-        static const bool traps = true;
-        static const bool tinyness_before = false;
-        static const float_round_style round_style = round_toward_zero;
-    };
-
-#if defined( _GLIBCPP_USE_WCHAR_T) 
-    template<> struct numeric_limits<wchar_t> {
-        static const bool is_specialized = true;
-
-        static wchar_t min() throw()
-        { return WCHAR_MIN; }
-        static wchar_t max() throw()
-        { return WCHAR_MAX; }
-
-        static const int digits = 31;
-        static const int digits10 = 9;
-        static const bool is_signed = true;
-        static const bool is_integer = true;
-        static const bool is_exact = true;
-        static const int radix = 2;
-        static wchar_t epsilon() throw()
-        { return 0; }
-        static wchar_t round_error() throw()
-        { return 0; }
-
-        static const int min_exponent = 0;
-        static const int min_exponent10 = 0;
-        static const int max_exponent = 0;
-        static const int max_exponent10 = 0;
-
-        static const bool has_infinity = false;
-        static const bool has_quiet_NaN = false;
-        static const bool has_signaling_NaN = false;
-        static const float_denorm_style has_denorm = denorm_absent;
-        static const bool has_denorm_loss = false;
-
-        static wchar_t infinity() throw()
-        { return static_cast<wchar_t>(0); }
-        static wchar_t quiet_NaN() throw()
-        { return static_cast<wchar_t>(0); }
-        static wchar_t signaling_NaN() throw()
-        { return static_cast<wchar_t>(0); }
-        static wchar_t denorm_min() throw()
-        { return static_cast<wchar_t>(0); }
-
-        static const bool is_iec559 = false;
-        static const bool is_bounded = true;
-        static const bool is_modulo = false;
-
-        static const bool traps = false;
-        static const bool tinyness_before = false;
-        static const float_round_style round_style = round_toward_zero;
-    };
-#endif
-
-    template<> struct numeric_limits<short> {
-        static const bool is_specialized = true;
-
-        static short min() throw()
-        { return SHRT_MIN; }
-        static short max() throw()
-        { return SHRT_MAX; }
-
-        static const int digits = 15;
-        static const int digits10 = 4;
-        static const bool is_signed = true;
-        static const bool is_integer = true;
-        static const bool is_exact = true;
-        static const int radix = 2;
-        static short epsilon() throw()
-        { return 0; }
-        static short round_error() throw()
-        { return 0; }
-
-        static const int min_exponent = 0;
-        static const int min_exponent10 = 0;
-        static const int max_exponent = 0;
-        static const int max_exponent10 = 0;
-
-        static const bool has_infinity = false;
-        static const bool has_quiet_NaN = false;
-        static const bool has_signaling_NaN = false;
-        static const float_denorm_style has_denorm = denorm_absent;
-        static const bool has_denorm_loss = false;
-
-        static short infinity() throw()
-        { return static_cast<short>(0); }
-        static short quiet_NaN() throw()
-        { return static_cast<short>(0); }
-        static short signaling_NaN() throw()
-        { return static_cast<short>(0); }
-        static short denorm_min() throw()
-        { return static_cast<short>(0); }
-
-        static const bool is_iec559 = false;
-        static const bool is_bounded = true;
-        static const bool is_modulo = false;
-
-        static const bool traps = false;
-        static const bool tinyness_before = false;
-        static const float_round_style round_style = round_toward_zero;
-    };
-
-    template<> struct numeric_limits<unsigned short> {
-        static const bool is_specialized = true;
-
-        static unsigned short min() throw()
-        { return 0; }
-        static unsigned short max() throw()
-        { return USHRT_MAX; }
-
-        static const int digits = 16;
-        static const int digits10 = 4;
-        static const bool is_signed = false;
-        static const bool is_integer = true;
-        static const bool is_exact = true;
-        static const int radix = 2;
-        static unsigned short epsilon() throw()
-        { return 0; }
-        static unsigned short round_error() throw()
-        { return 0; }
-
-        static const int min_exponent = 0;
-        static const int min_exponent10 = 0;
-        static const int max_exponent = 0;
-        static const int max_exponent10 = 0;
-
-        static const bool has_infinity = false;
-        static const bool has_quiet_NaN = false;
-        static const bool has_signaling_NaN = false;
-        static const float_denorm_style has_denorm = denorm_absent;
-        static const bool has_denorm_loss = false;
-
-        static unsigned short infinity() throw()
-        { return static_cast<unsigned short>(0); }
-        static unsigned short quiet_NaN() throw()
-        { return static_cast<unsigned short>(0); }
-        static unsigned short signaling_NaN() throw()
-        { return static_cast<unsigned short>(0); }
-        static unsigned short denorm_min() throw()
-        { return static_cast<unsigned short>(0); }
-
-        static const bool is_iec559 = false;
-        static const bool is_bounded = true;
-        static const bool is_modulo = true;
-
-        static const bool traps = true;
-        static const bool tinyness_before = false;
-        static const float_round_style round_style = round_toward_zero;
-    };
-
-    template<> struct numeric_limits<int> {
-        static const bool is_specialized = true;
-
-        static int min() throw()
-        { return INT_MIN; }
-        static int max() throw()
-        { return INT_MAX; }
-
-#if INT_MAX > 32767
-        static const int digits = 31;
-        static const int digits10 = 9;
-#else
-        static const int digits = 15;
-        static const int digits10 = 4;
-#endif
-        static const bool is_signed = true;
-        static const bool is_integer = true;
-        static const bool is_exact = true;
-        static const int radix = 2;
-        static int epsilon() throw()
-        { return 0; }
-        static int round_error() throw()
-        { return 0; }
-
-        static const int min_exponent = 0;
-        static const int min_exponent10 = 0;
-        static const int max_exponent = 0;
-        static const int max_exponent10 = 0;
-
-        static const bool has_infinity = false;
-        static const bool has_quiet_NaN = false;
-        static const bool has_signaling_NaN = false;
-        static const float_denorm_style has_denorm = denorm_absent;
-        static const bool has_denorm_loss = false;
-
-        static int infinity() throw()
-        { return static_cast<int>(0); }
-        static int quiet_NaN() throw()
-        { return static_cast<int>(0); }
-        static int signaling_NaN() throw()
-        { return static_cast<int>(0); }
-        static int denorm_min() throw()
-        { return static_cast<int>(0); }
-
-        static const bool is_iec559 = true;
-        static const bool is_bounded = true;
-        static const bool is_modulo = false;
-
-        static const bool traps = false;
-        static const bool tinyness_before = false;
-        static const float_round_style round_style = round_toward_zero;
-    };
-
-    template<> struct numeric_limits<unsigned int> {
-        static const bool is_specialized = true;
-
-        static unsigned int min() throw()
-        { return 0; }
-        static unsigned int max() throw()
-        { return UINT_MAX; }
-
-#if INT_MAX > 32767
-        static const int digits = 32;
-        static const int digits10 = 9;
-#else
-        static const int digits = 16;
-        static const int digits10 = 4;
-#endif
-        static const bool is_signed = false;
-        static const bool is_integer = true;
-        static const bool is_exact = true;
-        static const int radix = 2;
-        static unsigned int epsilon() throw()
-        { return 0; }
-        static unsigned int round_error() throw()
-        { return 0; }
-
-        static const int min_exponent = 0;
-        static const int min_exponent10 = 0;
-        static const int max_exponent = 0;
-        static const int max_exponent10 = 0;
-
-        static const bool has_infinity = false;
-        static const bool has_quiet_NaN = false;
-        static const bool has_signaling_NaN = false;
-        static const float_denorm_style has_denorm = denorm_absent;
-        static const bool has_denorm_loss = false;
-
-        static unsigned int infinity() throw()
-        { return static_cast<unsigned int>(0); }
-        static unsigned int quiet_NaN() throw()
-        { return static_cast<unsigned int>(0); }
-        static unsigned int signaling_NaN() throw()
-        { return static_cast<unsigned int>(0); }
-        static unsigned int denorm_min() throw()
-        { return static_cast<unsigned int>(0); }
-
-        static const bool is_iec559 = true;
-        static const bool is_bounded = true;
-        static const bool is_modulo = true;
-
-        static const bool traps = true;
-        static const bool tinyness_before = false;
-        static const float_round_style round_style = round_toward_zero;
-    };
-
-    template<> struct numeric_limits<long> {
-        static const bool is_specialized = true;
-
-        static long min() throw()
-        { return LONG_MIN; }
-        static long max() throw()
-        { return LONG_MAX; }
-
-#if LONG_MAX > 2147483647
-        static const int digits = 63;
-        static const int digits10 = 18;
-#elif LONG_MAX > 32767
-        static const int digits = 31;
-        static const int digits10 = 9;
-#else
-        static const int digits = 15;
-        static const int digits10 = 4;
-#endif
-        static const bool is_signed = true;
-        static const bool is_integer = true;
-        static const bool is_exact = true;
-        static const int radix = 2;
-        static long epsilon() throw()
-        { return 0; }
-        static long round_error() throw()
-        { return 0; }
-
-        static const int min_exponent = 0;
-        static const int min_exponent10 = 0;
-        static const int max_exponent = 0;
-        static const int max_exponent10 = 0;
-
-        static const bool has_infinity = false;
-        static const bool has_quiet_NaN = false;
-        static const bool has_signaling_NaN = false;
-        static const float_denorm_style has_denorm = denorm_absent;
-        static const bool has_denorm_loss = false;
-
-        static long infinity() throw()
-        { return static_cast<long>(0); }
-        static long quiet_NaN() throw()
-        { return static_cast<long>(0); }
-        static long signaling_NaN() throw()
-        { return static_cast<long>(0); }
-        static long denorm_min() throw()
-        { return static_cast<long>(0); }
-
-        static const bool is_iec559 = true;
-        static const bool is_bounded = true;
-        static const bool is_modulo = false;
-
-        static const bool traps = false;
-        static const bool tinyness_before = false;
-        static const float_round_style round_style = round_toward_zero;
-    };
-
-    template<> struct numeric_limits<unsigned long> {
-        static const bool is_specialized = true;
-
-        static unsigned long min() throw()
-        { return 0; }
-        static unsigned long max() throw()
-        { return ULONG_MAX; }
-
-#if LONG_MAX > 2147483647
-        static const int digits = 64;
-        static const int digits10 = 19;
-#elif LONG_MAX > 32767
-        static const int digits = 32;
-        static const int digits10 = 9;
-#else
-        static const int digits = 16;
-        static const int digits10 = 4;
-#endif
-        static const bool is_signed = false;
-        static const bool is_integer = true;
-        static const bool is_exact = true;
-        static const int radix = 2;
-        static unsigned long epsilon() throw()
-        { return 0; }
-        static unsigned long round_error() throw()
-        { return 0; }
-
-        static const int min_exponent = 0;
-        static const int min_exponent10 = 0;
-        static const int max_exponent = 0;
-        static const int max_exponent10 = 0;
-
-        static const bool has_infinity = false;
-        static const bool has_quiet_NaN = false;
-        static const bool has_signaling_NaN = false;
-        static const float_denorm_style has_denorm = denorm_absent;
-        static const bool has_denorm_loss = false;
-
-        static unsigned long infinity() throw()
-        { return static_cast<unsigned long>(0); }
-        static unsigned long quiet_NaN() throw()
-        { return static_cast<unsigned long>(0); }
-        static unsigned long signaling_NaN() throw()
-        { return static_cast<unsigned long>(0); }
-        static unsigned long denorm_min() throw()
-        { return static_cast<unsigned long>(0); }
-
-        static const bool is_iec559 = true;
-        static const bool is_bounded = true;
-        static const bool is_modulo = true;
-
-        static const bool traps = true;
-        static const bool tinyness_before = false;
-        static const float_round_style round_style = round_toward_zero;
-    };
-
-    template<> struct numeric_limits<float> {
-        static const bool is_specialized = true;
-
-        static float min() throw()
-        { return FLT_MIN; }
-        static float max() throw()
-        { return FLT_MAX; }
-
-        static const int digits = FLT_MANT_DIG;
-        static const int digits10 = FLT_DIG;
-        static const bool is_signed = true;
-        static const bool is_integer = false;
-        static const bool is_exact = false;
-        static const int radix = FLT_RADIX;
-        static float epsilon() throw()
-        { return FLT_EPSILON; }
-        static float round_error() throw()
-        { return FLT_ROUNDS; }
-
-        static const int min_exponent = FLT_MIN_EXP;
-        static const int min_exponent10 = FLT_MIN_10_EXP;
-        static const int max_exponent = FLT_MAX_EXP;
-        static const int max_exponent10 = FLT_MAX_10_EXP;
-
-        static const bool has_infinity = false;
-        static const bool has_quiet_NaN = false;
-        static const bool has_signaling_NaN = false;
-        static const float_denorm_style has_denorm = denorm_absent;
-        static const bool has_denorm_loss = false;
-
-        static float infinity() throw()
-        { return static_cast<float>(0); }
-        static float quiet_NaN() throw()
-        { return static_cast<float>(0); }
-        static float signaling_NaN() throw()
-        { return static_cast<float>(0); }
-        static float denorm_min() throw()
-        { return static_cast<float>(0); }
-
-        static const bool is_iec559 = false;
-        static const bool is_bounded = true;
-        static const bool is_modulo = false;
-
-        static const bool traps = false;
-        static const bool tinyness_before = false;
-        static const float_round_style round_style = round_toward_zero;
-    };
-
-    template<> struct numeric_limits<double> {
-        static const bool is_specialized = true;
-
-        static double min() throw()
-        { return DBL_MIN; }
-        static double max() throw()
-        { return DBL_MAX; }
-
-        static const int digits = DBL_MANT_DIG;
-        static const int digits10 = DBL_DIG;
-        static const bool is_signed = true;
-        static const bool is_integer = false;
-        static const bool is_exact = false;
-        static const int radix = 2;
-        static double epsilon() throw()
-        { return DBL_EPSILON; }
-        static double round_error() throw()
-        { return 1.0; }
-
-        static const int min_exponent = DBL_MIN_EXP;
-        static const int min_exponent10 = DBL_MIN_10_EXP;
-        static const int max_exponent = DBL_MAX_EXP;
-        static const int max_exponent10 = DBL_MAX_10_EXP;
-
-        static const bool has_infinity = false;
-        static const bool has_quiet_NaN = false;
-        static const bool has_signaling_NaN = false;
-        static const float_denorm_style has_denorm = denorm_absent;
-        static const bool has_denorm_loss = false;
-
-        static double infinity() throw()
-        { return static_cast<double>(0); }
-        static double quiet_NaN() throw()
-        { return static_cast<double>(0); }
-        static double signaling_NaN() throw()
-        { return static_cast<double>(0); }
-        static double denorm_min() throw()
-        { return static_cast<double>(0); }
-
-        static const bool is_iec559 = false;
-        static const bool is_bounded = true;
-        static const bool is_modulo = false;
-
-        static const bool traps = false;
-        static const bool tinyness_before = false;
-        static const float_round_style round_style = round_toward_zero;
-    };
-
-    template<> struct numeric_limits<long double> {
-        static const bool is_specialized = true;
-
-        static double min() throw()
-        { return LDBL_MIN; }
-        static double max() throw()
-        { return LDBL_MAX; }
-
-        static const int digits = LDBL_MANT_DIG;
-        static const int digits10 = LDBL_DIG;
-        static const bool is_signed = true;
-        static const bool is_integer = false;
-        static const bool is_exact = false;
-        static const int radix = 2;
-        static double epsilon() throw()
-        { return LDBL_EPSILON; }
-        static double round_error() throw()
-        { return 1.0L; }
-
-        static const int min_exponent = LDBL_MIN_EXP;
-        static const int min_exponent10 = LDBL_MIN_10_EXP;
-        static const int max_exponent = LDBL_MAX_EXP;
-        static const int max_exponent10 = LDBL_MAX_10_EXP;
-
-        static const bool has_infinity = false;
-        static const bool has_quiet_NaN = false;
-        static const bool has_signaling_NaN = false;
-        static const float_denorm_style has_denorm = denorm_absent;
-        static const bool has_denorm_loss = false;
-
-        static double infinity() throw()
-        { return static_cast<double>(0); }
-        static double quiet_NaN() throw()
-        { return static_cast<double>(0); }
-        static double signaling_NaN() throw()
-        { return static_cast<double>(0); }
-        static double denorm_min() throw()
-        { return static_cast<double>(0); }
-
-        static const bool is_iec559 = false;
-        static const bool is_bounded = true;
-        static const bool is_modulo = false;
-
-        static const bool traps = false;
-        static const bool tinyness_before = false;
-        static const float_round_style round_style = round_toward_zero;
-    };
-
-} // namespace std
-
-#endif // _CPP_NUMERIC_LIMITS
index d0f0479..3fca4dc 100644 (file)
@@ -40,6 +40,7 @@
 
 #pragma GCC system_header
 
+#include <bits/cpu_limits.h>
 #include <bits/c++config.h>
 
 //
@@ -95,7 +96,7 @@
 #define __glibcpp_wchar_t_bits 32
 #endif
 #ifndef __glibcpp_wchar_t_is_signed
-#define __glibcpp_wchar_t_is_signed __glibcpp_plain_char_is_signed
+#define __glibcpp_wchar_t_is_signed false
 #endif
 #ifdef _GLIBCPP_USE_LONG_LONG
 #ifndef __glibcpp_long_long_bits
@@ -1139,7 +1140,7 @@ namespace std
 
 
   template<>
-  struct numeric_limits<signed char>
+    struct numeric_limits<signed char>
     {
       static const bool is_specialized = true;
 
@@ -1960,8 +1961,8 @@ namespace std
 
       static const bool traps = __glibcpp_long_double_traps; 
       static const bool tinyness_before = __glibcpp_long_double_tinyness_before;
-      static const float_round_style round_style =
-                    __glibcpp_long_double_round_style;
+      static const float_round_style round_style = 
+        __glibcpp_long_double_round_style;
     };
 
 #undef __glibcpp_long_double_min
index f01d610..4d244f2 100644 (file)
@@ -76,6 +76,7 @@ CCODECVT_H = @CCODECVT_H@
 CLOCALE_H = @CLOCALE_H@
 CMESSAGES_H = @CMESSAGES_H@
 CPP = @CPP@
+CPU_LIMITS_INC_SRCDIR = @CPU_LIMITS_INC_SRCDIR@
 CSHADOW_FLAGS = @CSHADOW_FLAGS@
 CSTDIO_H = @CSTDIO_H@
 CXX = @CXX@
@@ -104,7 +105,6 @@ LIBMATH_INCLUDES = @LIBMATH_INCLUDES@
 LIBSUPCXX_INCLUDES = @LIBSUPCXX_INCLUDES@
 LIBSUPCXX_PICFLAGS = @LIBSUPCXX_PICFLAGS@
 LIBTOOL = @LIBTOOL@
-LIMITS_INC_SRCDIR = @LIMITS_INC_SRCDIR@
 LN_S = @LN_S@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
index 337c0d3..74a41f1 100644 (file)
@@ -76,6 +76,7 @@ CCODECVT_H = @CCODECVT_H@
 CLOCALE_H = @CLOCALE_H@
 CMESSAGES_H = @CMESSAGES_H@
 CPP = @CPP@
+CPU_LIMITS_INC_SRCDIR = @CPU_LIMITS_INC_SRCDIR@
 CSHADOW_FLAGS = @CSHADOW_FLAGS@
 CSTDIO_H = @CSTDIO_H@
 CXX = @CXX@
@@ -106,7 +107,6 @@ LIBMATH_INCLUDES = @LIBMATH_INCLUDES@
 LIBSUPCXX_INCLUDES = @LIBSUPCXX_INCLUDES@
 LIBSUPCXX_PICFLAGS = @LIBSUPCXX_PICFLAGS@
 LIBTOOL = @LIBTOOL@
-LIMITS_INC_SRCDIR = @LIMITS_INC_SRCDIR@
 LN_S = @LN_S@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
index b9c55cc..5d5fe78 100644 (file)
@@ -76,6 +76,7 @@ CCODECVT_H = @CCODECVT_H@
 CLOCALE_H = @CLOCALE_H@
 CMESSAGES_H = @CMESSAGES_H@
 CPP = @CPP@
+CPU_LIMITS_INC_SRCDIR = @CPU_LIMITS_INC_SRCDIR@
 CSHADOW_FLAGS = @CSHADOW_FLAGS@
 CSTDIO_H = @CSTDIO_H@
 CXXCPP = @CXXCPP@
@@ -103,7 +104,6 @@ LIBMATHOBJS = @LIBMATHOBJS@
 LIBMATH_INCLUDES = @LIBMATH_INCLUDES@
 LIBSUPCXX_PICFLAGS = @LIBSUPCXX_PICFLAGS@
 LIBTOOL = @LIBTOOL@
-LIMITS_INC_SRCDIR = @LIMITS_INC_SRCDIR@
 LN_S = @LN_S@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
diff --git a/libstdc++-v3/mknumeric_limits b/libstdc++-v3/mknumeric_limits
deleted file mode 100755 (executable)
index cb33463..0000000
+++ /dev/null
@@ -1,367 +0,0 @@
-#! /bin/sh
-
-# mknumeric_limits: generates
-# - part of bits/std_limits.h completed by gen-num-limits.cc
-# - src/limitsMEMBERS.cc that contains the definition of various
-#   static data members of specialization of class template numeric_limits
-#
-
-echo "running mknumeric_limits"
-
-BUILD_DIR=$1
-if [ ! -d "$BUILD_DIR" ]; then
-  echo "build directory $BUILD_DIR not found, exiting."
-  exit 1
-fi
-
-if [ ! -d "$BUILD_DIR/include" ]; then
-  mkdir  "$BUILD_DIR/include"
-fi
-
-if [ ! -d "$BUILD_DIR/include/bits" ]; then
-  mkdir  "$BUILD_DIR/include/bits"
-fi
-
-if [ ! -d "$BUILD_DIR/src" ]; then
-  mkdir  "$BUILD_DIR/src"
-fi
-
-OUT_H="$BUILD_DIR/include/bits/std_limits.h"
-OUT_C="$BUILD_DIR/src/limitsMEMBERS.cc"
-
-if [ -f $OUT_C ]; then
-    rm -f $OUT_H $OUT_C $OUT_H-t $OUT_C-t
-fi
-
-SRC_DIR=$2
-if [ ! -d "$SRC_DIR" ]; then
-  echo "source directory $SRC_DIR not found, exiting."
-  exit 1
-fi
-
-XCOMPILE=$3
-if [ $XCOMPILE -eq 1 ]; then
-  echo "using default values for cross compiles"
-  cp $SRC_DIR/include/bits/limits_generic.h $OUT_H
-  cp $SRC_DIR/src/limits_generic.cc $OUT_C
-  exit 0;
-fi   
-
-CC=${CC="$BUILD_DIR/../../gcc/xgcc -B$BUILD_DIR/../../gcc/"}
-
-# We output to a temporary file, so that we don't appear to have
-# succeeded unless we actually do.
-cat <<EOF > $OUT_H-t
-// The template and inlines for the -*- C++ -*- numeric_limits classes.
-
-// Copyright (C) 1999-2001 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, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
-// 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.
-
-// Note: this is not a conforming implementation.
-// Written by Gabriel Dos Reis <Gabriel.Dos-Reis@cmla.ens-cachan.fr>
-
-//
-// THIS FILE IS AUTOMATICALLY GENERATED. DO NOT EDIT!
-//
-
-//
-// ISO 14882:1998
-// 18.2.1
-//
-
-#ifndef _CPP_NUMERIC_LIMITS
-#define _CPP_NUMERIC_LIMITS 1
-
-#include <bits/c++config.h>
-#include <bits/std_cfloat.h>
-
-namespace std
-{
-  enum float_round_style 
-  {
-    round_indeterminate       = -1,
-    round_toward_zero         = 0,
-    round_to_nearest          = 1,
-    round_toward_infinity     = 2,
-    round_toward_neg_infinity = 3
-  };
-
-  enum float_denorm_style 
-  {
-    denorm_indeterminate = -1,
-    denorm_absent        = 0,
-    denorm_present       = 1
-  };
-
-  template<typename _Tp> 
-    struct numeric_limits 
-    {
-      static const bool is_specialized = false;
-
-      static _Tp min() throw() { return static_cast<_Tp>(0); }
-      static _Tp max() throw() { return static_cast<_Tp>(0); }
-
-      static const int digits = 0;
-      static const int digits10 = 0;
-      static const bool is_signed = false;
-      static const bool is_integer = false;
-      static const bool is_exact = false;
-      static const int radix = 0;
-
-      static _Tp epsilon() throw() { return static_cast<_Tp>(0); }
-      static _Tp round_error() throw() { return static_cast<_Tp>(0); }
-
-      static const int min_exponent = 0;
-      static const int min_exponent10 = 0;
-      static const int max_exponent = 0;
-      static const int max_exponent10 = 0;
-
-      static const bool has_infinity = false;
-      static const bool has_quiet_NaN = false;
-      static const bool has_signaling_NaN = false;
-      static const float_denorm_style has_denorm = denorm_absent;
-      static const bool has_denorm_loss = false;
-
-      static _Tp infinity() throw()  { return static_cast<_Tp>(0); }
-      static _Tp quiet_NaN() throw() { return static_cast<_Tp>(0); }
-      static _Tp signaling_NaN() throw() { return static_cast<_Tp>(0); }
-      static _Tp denorm_min() throw() { return static_cast<_Tp>(0); }
-
-      static const bool is_iec559 = false;
-      static const bool is_bounded = false;
-      static const bool is_modulo = false;
-
-      static const bool traps = false;
-      static const bool tinyness_before = false;
-      static const float_round_style round_style = round_toward_zero;
-    };
-
-  template<typename _Tp> 
-    const bool
-    numeric_limits<_Tp>::is_specialized;
-
-  template<typename _Tp> 
-    const int
-    numeric_limits<_Tp>::digits;
-
-  template<typename _Tp> 
-    const int
-    numeric_limits<_Tp>::digits10;
-
-  template<typename _Tp> 
-    const bool
-    numeric_limits<_Tp>::is_signed;
-
-  template<typename _Tp> 
-    const bool
-    numeric_limits<_Tp>::is_integer;
-
-  template<typename _Tp> 
-    const bool
-    numeric_limits<_Tp>::is_exact;
-
-  template<typename _Tp> 
-    const int
-    numeric_limits<_Tp>::radix;
-
-  template<typename _Tp> 
-    const int
-    numeric_limits<_Tp>::min_exponent;
-
-  template<typename _Tp> 
-    const int
-    numeric_limits<_Tp>::min_exponent10;
-
-  template<typename _Tp> 
-    const int
-    numeric_limits<_Tp>::max_exponent;
-
-  template<typename _Tp> 
-    const int
-    numeric_limits<_Tp>::max_exponent10;
-
-  template<typename _Tp> 
-    const bool
-    numeric_limits<_Tp>::has_infinity;
-
-  template<typename _Tp> 
-    const bool
-    numeric_limits<_Tp>::has_quiet_NaN;
-
-  template<typename _Tp> 
-    const bool
-    numeric_limits<_Tp>::has_signaling_NaN;
-
-  template<typename _Tp> 
-    const float_denorm_style
-    numeric_limits<_Tp>::has_denorm;
-
-  template<typename _Tp> 
-    const bool
-    numeric_limits<_Tp>::has_denorm_loss;
-
-  template<typename _Tp> 
-    const bool
-    numeric_limits<_Tp>::is_iec559;
-
-  template<typename _Tp> 
-    const bool
-    numeric_limits<_Tp>::is_bounded;
-
-  template<typename _Tp> 
-    const bool
-    numeric_limits<_Tp>::is_modulo;
-
-  template<typename _Tp> 
-    const bool
-    numeric_limits<_Tp>::traps;
-
-  template<typename _Tp> 
-    const bool
-    numeric_limits<_Tp>::tinyness_before;
-
-  template<typename _Tp> 
-    const float_round_style
-    numeric_limits<_Tp>::round_style;
-
-  template<typename _Tp> _Tp __limits_infinity();
-  template<typename _Tp> _Tp __limits_quiet_NaN();
-  template<typename _Tp> _Tp __limits_signaling_NaN();
-  template<typename _Tp> _Tp __limits_denorm_min();
-
-EOF
-
-# Must turn off exceptions, because the C++ exception handling support
-# routines have not been built yet.
-echo "$CC -I$BUILD_DIR -fno-exceptions \
-    -o $BUILD_DIR/src/gen-num-limits $SRC_DIR/src/gen-num-limits.cc"
-
-{ $CC -I$BUILD_DIR -fno-exceptions \
-    -o "$BUILD_DIR/src/gen-num-limits" "$SRC_DIR/src/gen-num-limits.cc"
-} || {
-  echo "gen-num-limits failed to build, exiting."
-  exit 1
-}
-
-"$BUILD_DIR/src/gen-num-limits" >> $OUT_H-t || {
-  echo "gen-num-limits failed to execute, exiting."
-  exit 1
-}
-
-cat <<EOF >> $OUT_H-t
-} // namespace std
-
-#endif // _CPP_NUMERIC_LIMITS
-EOF
-
-trait_name=numeric_limits
-
-cat <<EOF > $OUT_C-t
-// Static data members of -*- C++ -*- numeric_limits classes
-
-// Copyright (C) 1999, 2000 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, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
-// 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.
-
-// Written by Gabriel Dos Reis <Gabriel.Dos-Reis@cmla.ens-cachan.fr>
-
-//
-// ISO C++ 14882:1998
-// 18.2.1
-//
-
-#include <bits/std_limits.h>
-namespace std {
-EOF
-
-for type_name in bool char 'signed char' 'unsigned char' \
-           short 'unsigned short' int 'unsigned int' \
-           long 'unsigned long' 'long long' 'unsigned long long' \
-           float double 'long double'
-    do
-     grep "<$type_name>" $OUT_H-t >/dev/null 2>&1 || continue
-     cat <<EOF >> $OUT_C-t
-
-    const bool $trait_name<$type_name>::is_specialized;
-    const int  $trait_name<$type_name>::digits;
-    const int  $trait_name<$type_name>::digits10;
-    const bool $trait_name<$type_name>::is_signed;
-    const bool $trait_name<$type_name>::is_integer;
-    const bool $trait_name<$type_name>::is_exact;
-    const int  $trait_name<$type_name>::radix;
-    const int  $trait_name<$type_name>::min_exponent;
-    const int  $trait_name<$type_name>::min_exponent10;
-    const int  $trait_name<$type_name>::max_exponent;
-    const int  $trait_name<$type_name>::max_exponent10;
-    const bool $trait_name<$type_name>::has_infinity;
-    const bool $trait_name<$type_name>::has_quiet_NaN;
-    const bool $trait_name<$type_name>::has_signaling_NaN;
-    const float_denorm_style $trait_name<$type_name>::has_denorm;
-    const bool $trait_name<$type_name>::has_denorm_loss;
-    const bool $trait_name<$type_name>::is_iec559;
-    const bool $trait_name<$type_name>::is_bounded;
-    const bool $trait_name<$type_name>::is_modulo;
-    const bool $trait_name<$type_name>::traps;
-    const bool $trait_name<$type_name>::tinyness_before;
-    const float_round_style $trait_name<$type_name>::round_style;
-EOF
-
-done
-
-cat <<EOF >> $OUT_C-t
-} // namespace std
-
-
-EOF
-
-mv $OUT_C-t $OUT_C
-mv $OUT_H-t $OUT_H
-
-
index 5f01f39..b8a93ae 100644 (file)
@@ -76,6 +76,7 @@ CCODECVT_H = @CCODECVT_H@
 CLOCALE_H = @CLOCALE_H@
 CMESSAGES_H = @CMESSAGES_H@
 CPP = @CPP@
+CPU_LIMITS_INC_SRCDIR = @CPU_LIMITS_INC_SRCDIR@
 CSHADOW_FLAGS = @CSHADOW_FLAGS@
 CSTDIO_H = @CSTDIO_H@
 CXX = @CXX@
@@ -106,7 +107,6 @@ LIBMATH_INCLUDES = @LIBMATH_INCLUDES@
 LIBSUPCXX_INCLUDES = @LIBSUPCXX_INCLUDES@
 LIBSUPCXX_PICFLAGS = @LIBSUPCXX_PICFLAGS@
 LIBTOOL = @LIBTOOL@
-LIMITS_INC_SRCDIR = @LIMITS_INC_SRCDIR@
 LN_S = @LN_S@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
index 89342c3..b930b4f 100644 (file)
@@ -75,6 +75,7 @@ CCODECVT_H = @CCODECVT_H@
 CLOCALE_H = @CLOCALE_H@
 CMESSAGES_H = @CMESSAGES_H@
 CPP = @CPP@
+CPU_LIMITS_INC_SRCDIR = @CPU_LIMITS_INC_SRCDIR@
 CSHADOW_FLAGS = @CSHADOW_FLAGS@
 CSTDIO_H = @CSTDIO_H@
 CXXCPP = @CXXCPP@
@@ -100,7 +101,6 @@ LIBICONV = @LIBICONV@
 LIBMATHOBJS = @LIBMATHOBJS@
 LIBSUPCXX_PICFLAGS = @LIBSUPCXX_PICFLAGS@
 LIBTOOL = @LIBTOOL@
-LIMITS_INC_SRCDIR = @LIMITS_INC_SRCDIR@
 LN_S = @LN_S@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@
diff --git a/libstdc++-v3/src/gen-num-limits.cc b/libstdc++-v3/src/gen-num-limits.cc
deleted file mode 100644 (file)
index 6fbfdb7..0000000
+++ /dev/null
@@ -1,844 +0,0 @@
-// Copyright (C) 1999, 2000, 2001 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, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
-// 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.
-
-//
-// Written by Gabriel Dos Reis <gdr@gcc.gnu.org>
-// 
-// Note: This program outputs speciliazations of ISO C++ class template
-// numeric_limits<> as described in 18.2.1.
-// Do not compile with optimization turned on.
-//
-
-#include <config.h>
-#include <limits.h>
-#include <float.h>
-#include <stdio.h>
-#include <signal.h>
-#include <setjmp.h>
-#include <math.h>
-#ifdef _GLIBCPP_USE_WCHAR_T
-#include <wchar.h>
-#endif
-
-// mknumeric_limits will first try to compile this file with
-// HAVE_SIGSETJMP.  If it fails, then it will try without it.  Some
-// systems, such as GNU/Linux/sparc, would remain with the signal
-// blocked if the signal handler uses longjmp instead of siglongjmp.
-// We assume here setjmp/longjmp will preserve the sigblock mask if
-// sigsetjmp is not present.
-
-#if ! HAVE_SIGSETJMP 
-# define sigjmp_buf jmp_buf 
-# define sigsetjmp(buf, save) setjmp (buf) 
-# define siglongjmp(env, ret) longjmp (env, ret) 
-#endif 
-
-const char tab[] = "    ";
-const char tab2[] = "        ";
-const char* bool_alpha[] = { "false", "true" };
-const double log10_of_two = .30102999566398119;
-const int bits_per_byte = CHAR_BIT;
-const int integer_base_rep = 2;
-
-
-//
-// numeric_limits members are all static (as it is usually the case for
-// traits) and of three kinds: predicates, values and functions.
-// Actually there is no harm to think of values and functions as being
-// of the same kind.  Their main purposes are to denote values.
-//
-
-
-//
-// Integer types: bool, char, signed char, unsigned char, wchar_t,
-// short, unsigned short, int, unsigned, long, unsigned long,
-// and possibly long long and unsigned long long
-//
-// Here ISO 14882 disagrees with LIA-1 in stating bool to be an
-// integer type.  Therefore itn't suprising to see ambiguity in the
-// interpretation of some members.  Need to keep track of the discusion
-// in LWG on this topic.
-//
-// Integer types are first promoted to int or long before the actual
-// arithmetical operations are carried out.  Therefore testing whether
-// traps occur amounts -- for integer types -- to test whether traps
-// occur for int, unsigned, long, unsigned long. Furthermore
-// overflow cannot happen for unsigned integer types.
-
-sigjmp_buf env;
-
-/* The prototype of signal() may vary.  Accomodate variations such as
-   void(*)(int) and void(*)(...).  */
-template <typename signal_handler_type, typename signal_number_type>
-inline void (*signal_adapter (signal_handler_type
-                             (*signal_func)(signal_number_type,
-                                            signal_handler_type),
-                             signal_number_type arg,
-                             void (*handler)(int)))(int)
-{
-  return (void (*)(int))(*signal_func)(arg, (signal_handler_type)handler);
-}
-
-template <typename signal_handler_type, typename signal_number_type>
-inline void (*signal_adapter (signal_handler_type (*signal_func)(...),
-                             signal_number_type arg,
-                             void (*handler)(int)))(int)
-{
-  return (void (*)(int))(*signal_func)(arg, (signal_handler_type)handler);
-}
-
-void signal_handler(int sig) 
-{ 
-#ifdef __CYGWIN__
-  static sigset_t x;
-  signal_adapter (signal, sig, signal_handler);
-  sigemptyset (&x);
-  sigprocmask(SIG_SETMASK, &x, NULL);
-#endif /* __CYGWIN__ */
-  siglongjmp(env, sig); 
-}
-
-template<typename Operation>
-bool trapping(const Operation& op)
-{
-    if (sigsetjmp(env, 1) == 0) op();
-    else return true;
-    return false;
-}
-
-template<typename T> 
-  struct division_by_zero 
-  {
-    void operator() () const
-    {
-      volatile T zero = T();
-      volatile T one = T(1);
-      volatile T infinity = one / zero;
-    }
-  };
-
-template<typename T> 
-  struct overflow 
-  {
-    void operator() () const
-    {
-      T i = T(1);
-      T j = T();
-      while (i>j) {
-       j = i;
-       i = i * 2 + 1;
-      }
-    }
-  };
-
-template<typename T> struct underflow { };
-
-
-// Set various signals handler for trapping aritmetic ops.
-void set_signals_handler()
-{
-  signal_adapter(signal, SIGFPE, signal_handler);
-  signal_adapter(signal, SIGTRAP, signal_handler);
-  // This is necessary for Linux/SPARC.
-  signal_adapter(signal, SIGILL, signal_handler);
-}
-
-// traps
-template<typename T> void traps()
-{
-  fflush(NULL);
-  set_signals_handler();
-  bool trap_flag = trapping(division_by_zero<T>());
-  set_signals_handler();
-  trap_flag = trap_flag || trapping(overflow<T>());
-  const char* p = bool_alpha[trap_flag];
-  printf("%s%s = %s;\n", tab2, "static const bool traps", p);    
-}
-
-#define SPECIALIZE_TRAPPING(T)                                          \
-template<> void traps< T >()                                            \
-{                                                                      \
-  fflush(NULL);                                                         \
-  set_signals_handler();                                                \
-  const char* p = bool_alpha[trapping(division_by_zero<T>())];          \
-  printf("%s%s = %s;\n", tab2, "static const bool traps", p);           \
-}
-
-SPECIALIZE_TRAPPING(unsigned char);
-SPECIALIZE_TRAPPING(unsigned short);
-SPECIALIZE_TRAPPING(unsigned int);
-SPECIALIZE_TRAPPING(unsigned long);
-#if _GLIBCPP_USE_LONG_LONG
-SPECIALIZE_TRAPPING(unsigned long long);
-#endif
-
-#undef SPECIALIZE_TRAPPING
-
-template<typename T> 
-  struct type_name_trait 
-  {
-    static const char type_name[];
-    static const char trait_name[];
-  };
-
-#define DEFINED_TYPE_NAME(T)                                            \
-template<>                                                              \
-const char type_name_trait< T >::type_name[] = #T;                      \
-template<>                                                              \
-const char type_name_trait< T >::trait_name[] = "numeric_limits<" #T ">";
-
-DEFINED_TYPE_NAME(bool);
-DEFINED_TYPE_NAME(char);
-DEFINED_TYPE_NAME(signed char);
-DEFINED_TYPE_NAME(unsigned char);
-DEFINED_TYPE_NAME(wchar_t);
-DEFINED_TYPE_NAME(short);
-DEFINED_TYPE_NAME(unsigned short);
-DEFINED_TYPE_NAME(int);
-DEFINED_TYPE_NAME(unsigned int);
-DEFINED_TYPE_NAME(long);
-DEFINED_TYPE_NAME(unsigned long);
-#ifdef _GLIBCPP_USE_LONG_LONG
-DEFINED_TYPE_NAME(long long);
-DEFINED_TYPE_NAME(unsigned long long);
-#endif
-DEFINED_TYPE_NAME(float);
-DEFINED_TYPE_NAME(double);
-DEFINED_TYPE_NAME(long double);
-
-#undef DEFINED_TYPE_NAME
-
-// declarator
-template<typename T> 
-  struct declarator : type_name_trait<T> 
-  {
-    typedef type_name_trait<T> base;
-    static void start()
-    { 
-      printf("%s%s %s %s\n", tab, "template<> struct", base::trait_name, "{"); 
-    }
-    
-    static void end()
-    { printf("%s};\n\n", tab); }
-  };
-
-
-//
-// Predicates
-// 
-template<typename T> 
-  struct predicate 
-  {
-    static const bool is_signed;
-    static const bool is_integer;
-    static const bool is_exact;
-    
-    static const bool has_infinity;
-    static const bool has_quiet_nan;
-    static const bool has_signaling_nan;
-    static const bool has_denorm;
-    static const bool has_denorm_loss;
-    
-    static const bool is_iec559;
-    static const bool is_bounded;
-    
-    static const bool traps;
-  };
-
-template<typename T>
-const bool predicate<T>::is_signed = T(-1) < 0;
-
-// Non integer types should specialize this
-template<typename T>
-const bool predicate<T>::is_integer = true;
-
-// Non exact types should specialize this;
-template<typename T>
-const bool predicate<T>::is_exact = true;
-
-#define SPECIALIZE_EXACTNESS(T)                                                \
-template<>                                                              \
-const bool predicate< T >::is_integer = false;                         \
-template<>                                                              \
-const bool predicate< T >::is_exact = false
-
-SPECIALIZE_EXACTNESS(float);
-SPECIALIZE_EXACTNESS(double);
-SPECIALIZE_EXACTNESS(long double);
-
-#undef SPECIALIZE_EXACTNESS
-
-
-template<typename T>
-const bool predicate<T>::has_infinity = false;
-
-template<typename T>
-const bool predicate<T>::has_quiet_nan = false;
-
-template<typename T>
-const bool predicate<T>::has_signaling_nan = false;
-
-template<typename T>
-const bool predicate<T>::has_denorm = false;
-
-template<typename T>
-const bool predicate<T>::has_denorm_loss = false;
-
-
-
-// Each type conforming to IEC559 specifications should specialize this.
-template<typename T>
-const bool predicate<T>::is_iec559 = false;
-
-#define SPECIALIZE_IEC559(T)                                           \
-template<>                                                              \
-const bool predicate< T >::is_iec559 = true
-
-SPECIALIZE_IEC559(bool);
-SPECIALIZE_IEC559(int);
-SPECIALIZE_IEC559(unsigned int);
-SPECIALIZE_IEC559(long);
-SPECIALIZE_IEC559(unsigned long);
-#ifdef _GLIBCPP_USE_LONG_LONG
-SPECIALIZE_IEC559(long long);
-SPECIALIZE_IEC559(unsigned long long);
-#endif
-
-#undef SPECIALIZE_IEC559
-
-//
-// Values
-// 
-template<typename T> 
-  struct value 
-  {
-    static const char min[];
-    static const char max[];
-    
-    static const int digits;
-    static const int digits10;
-    
-    static const int radix;
-    static const char epsilon[];
-    static const char round_error[];
-    
-    static const int min_exponent;
-    static const int min_exponent10;
-    static const int max_exponent;
-    static const int max_exponent10;
-  };
-
-#define DEFINE_EXTREMA(T, m, M)  DO_DEFINE_EXTREMA(T, m, M)
-#define DO_DEFINE_EXTREMA(T, m, M)                                     \
-template<>                                                              \
-const char value< T >::min[] = #m;                                     \
-template<>                                                              \
-const char value< T >::max[] = #M
-
-DEFINE_EXTREMA(bool, false, true);
-DEFINE_EXTREMA(char, CHAR_MIN, CHAR_MAX);
-DEFINE_EXTREMA(signed char, SCHAR_MIN, SCHAR_MAX);
-DEFINE_EXTREMA(unsigned char, 0, UCHAR_MAX);
-#ifdef _GLIBCPP_USE_WCHAR_T
-DEFINE_EXTREMA(wchar_t, WCHAR_MIN, WCHAR_MAX);
-#endif
-DEFINE_EXTREMA(short, SHRT_MIN, SHRT_MAX);
-DEFINE_EXTREMA(unsigned short, 0, USHRT_MAX);
-DEFINE_EXTREMA(int, INT_MIN, INT_MAX);
-DEFINE_EXTREMA(unsigned int, 0, UINT_MAX);
-DEFINE_EXTREMA(long, LONG_MIN, LONG_MAX);
-DEFINE_EXTREMA(unsigned long, 0, ULONG_MAX);
-#ifdef _GLIBCPP_USE_LONG_LONG
-DEFINE_EXTREMA(long long, (-__LONG_LONG_MAX__-1), __LONG_LONG_MAX__);
-DEFINE_EXTREMA(unsigned long long, 0, (__LONG_LONG_MAX__ * 2ULL + 1));
-#endif
-DEFINE_EXTREMA(float, FLT_MIN, FLT_MAX);
-DEFINE_EXTREMA(double, DBL_MIN, DBL_MAX);
-DEFINE_EXTREMA(long double, LDBL_MIN, LDBL_MAX);
-
-#undef DEFINE_EXTREMA
-#undef DO_DEFINE_EXTREMA
-
-// Non integer types should specialize this
-template<typename T>
-const int value<T>::digits =
-      bits_per_byte * sizeof(T) - int(predicate<T>::is_signed);
-
-// Non integer types should specialize this.  Always two for
-// integer types.
-template<typename T>
-const int value<T>::radix = 2;
-
-#define SPECIALIZE_DIGITS(T, D, D10)           \
-template<>                                     \
-const int value< T >::digits = D;              \
-template<>                                     \
-const int value< T >::digits10 = D10
-
-SPECIALIZE_DIGITS(float, FLT_MANT_DIG, FLT_DIG);
-SPECIALIZE_DIGITS(double, DBL_MANT_DIG, DBL_DIG);
-SPECIALIZE_DIGITS(long double, LDBL_MANT_DIG, LDBL_DIG);
-
-#undef SPECIALIZE_DIGITS
-
-
-#define SPECIALIZE_RADIX(T, R)                 \
-template<>                                     \
-const int value< T >::radix = R
-
-SPECIALIZE_RADIX(float, FLT_RADIX);
-SPECIALIZE_RADIX(double, FLT_RADIX);
-SPECIALIZE_RADIX(long double, FLT_RADIX);
-
-#undef SPECIALIZE_RADIX
-
-// Non integer types should specialize this.  
-// Unfortunately, systems that don't deal with weak linking correctly
-// (Ie, hpux and aix), cannot use this sophisticated yet sane method. So,
-// explicitly instantiate all the data members here so that they will
-// be happy.
-
-// sophisticated, sane method
-#if 0
-template<typename T>
-const char value<T>::epsilon[] = "0";
-#endif
-
-#define SPECIALIZE_EPSILON(T, E) DO_SPECIALIZE_EPSILON(T, E)
-#define DO_SPECIALIZE_EPSILON(T, E)            \
-template<>                                     \
-const char value< T >::epsilon[] = #E
-
-// unsophisticated, gross method
-#if 1
-SPECIALIZE_EPSILON(bool, 0);
-SPECIALIZE_EPSILON(char, 0);
-SPECIALIZE_EPSILON(unsigned char, 0);
-SPECIALIZE_EPSILON(signed char, 0);
-SPECIALIZE_EPSILON(wchar_t, 0);
-SPECIALIZE_EPSILON(short, 0);
-SPECIALIZE_EPSILON(unsigned short, 0);
-SPECIALIZE_EPSILON(int, 0);
-SPECIALIZE_EPSILON(unsigned int, 0);
-SPECIALIZE_EPSILON(long, 0);
-SPECIALIZE_EPSILON(unsigned long, 0);
-SPECIALIZE_EPSILON(long long, 0);
-SPECIALIZE_EPSILON(unsigned long long, 0);
-#endif
-
-SPECIALIZE_EPSILON(float, FLT_EPSILON);
-SPECIALIZE_EPSILON(double, DBL_EPSILON);
-SPECIALIZE_EPSILON(long double, LDBL_EPSILON);
-
-#undef DO_SPECIALIZE_EPSILON
-#undef SPECIALIZE_EPSILON
-
-
-// Non integer types should specialize this.  
-// Unfortunately, systems that don't deal with weak linking correctly
-// (Ie, hpux and aix), cannot use this sophisticated yet sane method. So,
-// explicitly instantiate all the data members here so that they will
-// be happy.
-
-// sophisticated, sane method
-#if 0
-template<typename T>
-const char value<T>::round_error[] = "0";
-#endif
-
-#define SPECIALIZE_ROUND_ERROR(T, R)           \
-template<>                                     \
-const char value< T >::round_error[] = #R
-// unsophisticated, gross method
-#if 1
-SPECIALIZE_ROUND_ERROR(bool, 0);
-SPECIALIZE_ROUND_ERROR(char, 0);
-SPECIALIZE_ROUND_ERROR(unsigned char, 0);
-SPECIALIZE_ROUND_ERROR(signed char, 0);
-SPECIALIZE_ROUND_ERROR(wchar_t, 0);
-SPECIALIZE_ROUND_ERROR(short, 0);
-SPECIALIZE_ROUND_ERROR(unsigned short, 0);
-SPECIALIZE_ROUND_ERROR(int, 0);
-SPECIALIZE_ROUND_ERROR(unsigned int, 0);
-SPECIALIZE_ROUND_ERROR(long, 0);
-SPECIALIZE_ROUND_ERROR(unsigned long, 0);
-SPECIALIZE_ROUND_ERROR(long long, 0);
-SPECIALIZE_ROUND_ERROR(unsigned long long, 0);
-#endif
-
-SPECIALIZE_ROUND_ERROR(float, 1.0f);
-SPECIALIZE_ROUND_ERROR(double, 1.0);
-SPECIALIZE_ROUND_ERROR(long double, 1.0L);
-
-#undef SPECIALIZE_ROUND_ERROR
-
-
-template<typename T>
-const int value<T>::min_exponent = 0;
-
-template<typename T>
-const int value<T>::min_exponent10 = 0;
-
-template<typename T>
-const int value<T>::max_exponent = 0;
-
-template<typename T>
-const int value<T>::max_exponent10 = 0;
-
-#define SPECIALIZE_EXPONENTS(T, m, m10, M, M10)        \
-template<>                                     \
-const int value< T >::min_exponent = m;                \
-template<>                                     \
-const int value< T >::min_exponent10 = m10;    \
-template<>                                     \
-const int value< T >::max_exponent = M;                \
-template<>                                     \
-const int value< T >::max_exponent10 = M10
-
-SPECIALIZE_EXPONENTS(float, FLT_MIN_EXP, FLT_MIN_10_EXP,
-                     FLT_MAX_EXP, FLT_MAX_10_EXP);
-SPECIALIZE_EXPONENTS(double, DBL_MIN_EXP, DBL_MIN_10_EXP,
-                     DBL_MAX_EXP, DBL_MAX_10_EXP);
-SPECIALIZE_EXPONENTS(long double, LDBL_MIN_EXP, LDBL_MIN_10_EXP,
-                     LDBL_MAX_EXP, LDBL_MAX_10_EXP);
-
-#undef SPECIALIZE_EXPONENTS
-
-//
-// Functions to output predicates and values.
-//
-
-template<typename T> void is_signed()
-{
-  printf("%s%s = %s;\n", tab2, "static const bool is_signed",
-        bool_alpha[predicate<T>::is_signed]);
-}
-
-// a fundamental type is modulo iff it isn't signed
-template<typename T> void is_modulo()
-{
-  printf("%s%s = %s;\n", tab2, "static const bool is_modulo",
-        bool_alpha[! predicate<T>::is_signed]);
-}
-
-template<typename T>
-void min()
-{
-  printf("%s%s%s%s\n%s%s%s%s\n", tab2, "static ", declarator<T>::type_name,
-        " min() throw()", tab2, "{ return ", value<T>::min, "; }");
-}
-
-template<typename T>
-void max()
-{
-  printf("%s%s%s%s\n%s%s%s%s\n", tab2, "static ", declarator<T>::type_name,
-        " max() throw()", tab2, "{ return ", value<T>::max, "; }");
-}
-
-template<typename T>
-void is_integer()
-{
-  printf("%s%s = %s;\n", tab2, "static const bool is_integer",
-        bool_alpha[predicate<T>::is_integer]);        
-}
-
-template<typename T>
-void is_exact()
-{
-  printf("%s%s = %s;\n", tab2, "static const bool is_exact",
-        bool_alpha[predicate<T>::is_exact]);    
-}
-
-template<typename T>
-void digits()
-{
-  printf("%s%s = %d;\n", tab2, "static const int digits",
-        value<T>::digits);
-}
-
-template<typename T>
-void digits10()
-{
-  printf("%s%s = %d;\n", tab2, "static const int digits10",
-        int(log10_of_two * value<T>::digits) + 1);
-}
-
-template<typename T>
-void radix()
-{
-  printf("%s%s = %d;\n", tab2, "static const int radix",
-        value<T>::radix);
-}
-
-template<typename T>
-void epsilon()
-{
-  printf("%s%s %s %s\n%s%s %s%s\n", tab2, "static",
-        declarator<T>::type_name, "epsilon() throw()",
-        tab2, "{ return", value<T>::epsilon, "; }");
-}
-
-template<typename T>
-void round_error()
-{
-  printf("%s%s %s %s\n%s%s %s%s\n", tab2, "static",
-        declarator<T>::type_name, "round_error() throw()",
-        tab2, "{ return", value<T>::round_error, "; }");
-}
-
-template<typename T>
-void min_exponent()
-{
-  printf("%s%s = %d;\n", tab2, "static const int min_exponent",
-        value<T>::min_exponent);    
-}
-
-template<typename T>
-void min_exponent10()
-{
-  printf("%s%s = %d;\n", tab2, "static const int min_exponent10",
-        value<T>::min_exponent10);    
-}
-
-template<typename T>
-void max_exponent()
-{
-  printf("%s%s = %d;\n", tab2, "static const int max_exponent",
-        value<T>::max_exponent);    
-}
-
-template<typename T>
-void max_exponent10()
-{
-  printf("%s%s = %d;\n", tab2, "static const int max_exponent10",
-        value<T>::max_exponent10);    
-}
-
-template<typename T>
-void has_infinity()
-{
-  printf("%s%s = %s;\n", tab2, "static const bool has_infinity",
-        bool_alpha[predicate<T>::has_infinity]);
-}
-
-template<typename T>
-void has_quiet_nan()
-{
-  printf("%s%s = %s;\n", tab2, "static const bool has_quiet_NaN",
-        bool_alpha[predicate<T>::has_quiet_nan]);
-}
-
-template<typename T>
-void has_signaling_nan()
-{
-  printf("%s%s = %s;\n", tab2, "static const bool has_signaling_NaN",
-        bool_alpha[predicate<T>::has_signaling_nan]);
-}
-
-template<typename T>
-void has_denorm_loss()
-{
-  printf("%s%s = %s;\n", tab2, "static const bool has_denorm_loss",
-        bool_alpha[predicate<T>::has_denorm_loss]);
-}
-
-template<typename T> 
-  struct infinity_trait 
-  {
-    static void has_denorm()
-    {
-      printf("%s%s;\n", tab2, "static const float_denorm_style "
-            "has_denorm = denorm_absent");
-    }
-    
-    static void infinity()
-    {
-      printf("%s%s %s %s\n%s%s%s%s\n", tab2, "static",
-            declarator<T>::type_name, "infinity() throw()", tab2, 
-            "{ return static_cast<", declarator<T>::type_name, ">(0); }");
-    }
-
-    static void quiet_NaN()
-    {
-      printf("%s%s %s %s\n%s%s%s%s\n", tab2, "static",
-            declarator<T>::type_name, "quiet_NaN() throw()",
-            tab2, "{ return static_cast<", declarator<T>::type_name, 
-            ">(0); }");
-    }
-    
-    static void signaling_NaN()
-    {
-      printf("%s%s %s %s\n%s%s%s%s\n", tab2, "static",
-            declarator<T>::type_name, "signaling_NaN() throw()",
-            tab2, "{ return static_cast<", declarator<T>::type_name, 
-            ">(0); }");
-    }
-
-    static void denorm_min()
-    {
-      printf("%s%s %s %s\n%s%s%s%s\n", tab2, "static",
-            declarator<T>::type_name, "denorm_min() throw()",
-            tab2, "{ return static_cast<", declarator<T>::type_name, 
-            ">(0); }");
-    }
-  };
-
-
-template<typename T>
-void is_iec559()
-{
-  printf("%s%s = %s;\n", tab2, "static const bool is_iec559",
-        bool_alpha[predicate<T>::is_iec559]);
-}
-
-// tinyness_before
-template<typename T>
-void tinyness_before()
-{
-  printf("%s%s;\n", tab2, "static const bool tinyness_before = false");
-}
-
-// round style
-template<typename T>
-void round_style()
-{
-  printf("%s%s;\n", tab2, "static const float_round_style "
-        "round_style = round_toward_zero");    
-}
-
-
-
-// type traits
-template<typename T> 
-  struct type_trait 
-  {
-    type_trait()
-    {
-      declarator<T>::start();
-      printf("%s%s;\n\n", tab2, "static const bool is_specialized = true");
-      min<T>();
-      max<T>();
-      printf("\n");
-      digits<T>();
-      digits10<T>();
-      is_signed<T>();
-      is_integer<T>();
-      is_exact<T>();
-      radix<T>();
-      epsilon<T>();
-      round_error<T>();
-      printf("\n");
-      min_exponent<T>();
-      min_exponent10<T>();
-      max_exponent<T>();
-      max_exponent10<T>();
-      printf("\n");
-      has_infinity<T>();
-      has_quiet_nan<T>();
-      has_signaling_nan<T>();
-      infinity_trait<T>::has_denorm();
-      has_denorm_loss<T>();
-      printf("\n");
-      infinity_trait<T>::infinity();
-      infinity_trait<T>::quiet_NaN();
-      infinity_trait<T>::signaling_NaN();
-      infinity_trait<T>::denorm_min();
-      printf("\n");
-      is_iec559<T>();
-      printf("%s%s;\n", tab2, "static const bool is_bounded = true");
-      is_modulo<T>();
-      printf("\n");
-      traps<T>();
-      tinyness_before<T>();
-      round_style<T>();
-      declarator<T>::end();
-    }
-  };
-
-int main()
-{
-  type_trait<bool>();
-  
-  type_trait<char>();
-  type_trait<signed char>();
-  type_trait<unsigned char>();
-#if defined( _GLIBCPP_USE_WCHAR_T) 
-  type_trait<wchar_t>();
-#endif
-  
-  type_trait<short>();
-  type_trait<unsigned short>();
-  
-  type_trait<int>();
-  type_trait<unsigned int>();
-  
-  type_trait<long>();
-  type_trait<unsigned long>();
-  
-#ifdef _GLIBCPP_USE_LONG_LONG
-  type_trait<long long>();
-  type_trait<unsigned long long>();
-#endif
-
-  type_trait<float>();
-  type_trait<double>();
-  type_trait<long double>();
-  
-  // x86/linux gets this weirdness for the min/max functions:
-  // static long double min() throw()
-  // { return (__extension__ ((union __convert_long_double) 
-  // {__convert_long_double_i: {0x0, 0x80000000, 0x1, 0x0}})
-  // .__convert_long_double_d); }
-}
-
-// G++ doesn't have support for automatic instantiation of static data
-// members on platforms that don't have weak symbols.  On AIX, in
-// particular, static data members must be explicitly instantiated.
-// So, we explicitly instantiate some of the ones we need.  To save
-// typing, we don't name the static data members explicitly; we
-// instead name their containing types.
-
-#define INSTANTIATIONS(TYPE)                   \
-  template struct predicate<TYPE>;             \
-  template struct value<TYPE>
-
-INSTANTIATIONS (bool);
-INSTANTIATIONS (char);
-INSTANTIATIONS (signed char);
-INSTANTIATIONS (unsigned char);
-INSTANTIATIONS (short);
-INSTANTIATIONS (unsigned short);
-INSTANTIATIONS (int);
-INSTANTIATIONS (unsigned int);
-INSTANTIATIONS (long);
-INSTANTIATIONS (unsigned long);
-INSTANTIATIONS (float);
-INSTANTIATIONS (double);
-INSTANTIATIONS (long double);
-#ifdef _GLIBCPP_USE_WCHAR_T
-INSTANTIATIONS (wchar_t);
-#endif
index bf7c1b0..38bf297 100644 (file)
@@ -35,6 +35,7 @@
 //
 
 #include <bits/std_limits.h>
+
 namespace std 
 {
   // bool
@@ -425,5 +426,3 @@ namespace std
   const bool numeric_limits<long double>::tinyness_before;
   const float_round_style numeric_limits<long double>::round_style;
 } // namespace std
-
-
diff --git a/libstdc++-v3/src/limits_generic.cc b/libstdc++-v3/src/limits_generic.cc
deleted file mode 100644 (file)
index 655e365..0000000
+++ /dev/null
@@ -1,340 +0,0 @@
-// Static data members of -*- C++ -*- numeric_limits classes
-
-// Copyright (C) 2000 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, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
-// 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.
-
-// Written by Gabriel Dos Reis <Gabriel.Dos-Reis@cmla.ens-cachan.fr>
-
-//
-// ISO C++ 14882:1998
-// 18.2.1
-//
-
-#include <bits/std_limits.h>
-namespace std {
-
-    const bool numeric_limits<bool>::is_specialized;
-    const int  numeric_limits<bool>::digits;
-    const int  numeric_limits<bool>::digits10;
-    const bool numeric_limits<bool>::is_signed;
-    const bool numeric_limits<bool>::is_integer;
-    const bool numeric_limits<bool>::is_exact;
-    const int  numeric_limits<bool>::radix;
-    const int  numeric_limits<bool>::min_exponent;
-    const int  numeric_limits<bool>::min_exponent10;
-    const int  numeric_limits<bool>::max_exponent;
-    const int  numeric_limits<bool>::max_exponent10;
-    const bool numeric_limits<bool>::has_infinity;
-    const bool numeric_limits<bool>::has_quiet_NaN;
-    const bool numeric_limits<bool>::has_signaling_NaN;
-    const float_denorm_style numeric_limits<bool>::has_denorm;
-    const bool numeric_limits<bool>::has_denorm_loss;
-    const bool numeric_limits<bool>::is_iec559;
-    const bool numeric_limits<bool>::is_bounded;
-    const bool numeric_limits<bool>::is_modulo;
-    const bool numeric_limits<bool>::traps;
-    const bool numeric_limits<bool>::tinyness_before;
-    const float_round_style numeric_limits<bool>::round_style;
-
-    const bool numeric_limits<char>::is_specialized;
-    const int  numeric_limits<char>::digits;
-    const int  numeric_limits<char>::digits10;
-    const bool numeric_limits<char>::is_signed;
-    const bool numeric_limits<char>::is_integer;
-    const bool numeric_limits<char>::is_exact;
-    const int  numeric_limits<char>::radix;
-    const int  numeric_limits<char>::min_exponent;
-    const int  numeric_limits<char>::min_exponent10;
-    const int  numeric_limits<char>::max_exponent;
-    const int  numeric_limits<char>::max_exponent10;
-    const bool numeric_limits<char>::has_infinity;
-    const bool numeric_limits<char>::has_quiet_NaN;
-    const bool numeric_limits<char>::has_signaling_NaN;
-    const float_denorm_style numeric_limits<char>::has_denorm;
-    const bool numeric_limits<char>::has_denorm_loss;
-    const bool numeric_limits<char>::is_iec559;
-    const bool numeric_limits<char>::is_bounded;
-    const bool numeric_limits<char>::is_modulo;
-    const bool numeric_limits<char>::traps;
-    const bool numeric_limits<char>::tinyness_before;
-    const float_round_style numeric_limits<char>::round_style;
-
-    const bool numeric_limits<signed char>::is_specialized;
-    const int  numeric_limits<signed char>::digits;
-    const int  numeric_limits<signed char>::digits10;
-    const bool numeric_limits<signed char>::is_signed;
-    const bool numeric_limits<signed char>::is_integer;
-    const bool numeric_limits<signed char>::is_exact;
-    const int  numeric_limits<signed char>::radix;
-    const int  numeric_limits<signed char>::min_exponent;
-    const int  numeric_limits<signed char>::min_exponent10;
-    const int  numeric_limits<signed char>::max_exponent;
-    const int  numeric_limits<signed char>::max_exponent10;
-    const bool numeric_limits<signed char>::has_infinity;
-    const bool numeric_limits<signed char>::has_quiet_NaN;
-    const bool numeric_limits<signed char>::has_signaling_NaN;
-    const float_denorm_style numeric_limits<signed char>::has_denorm;
-    const bool numeric_limits<signed char>::has_denorm_loss;
-    const bool numeric_limits<signed char>::is_iec559;
-    const bool numeric_limits<signed char>::is_bounded;
-    const bool numeric_limits<signed char>::is_modulo;
-    const bool numeric_limits<signed char>::traps;
-    const bool numeric_limits<signed char>::tinyness_before;
-    const float_round_style numeric_limits<signed char>::round_style;
-
-    const bool numeric_limits<unsigned char>::is_specialized;
-    const int  numeric_limits<unsigned char>::digits;
-    const int  numeric_limits<unsigned char>::digits10;
-    const bool numeric_limits<unsigned char>::is_signed;
-    const bool numeric_limits<unsigned char>::is_integer;
-    const bool numeric_limits<unsigned char>::is_exact;
-    const int  numeric_limits<unsigned char>::radix;
-    const int  numeric_limits<unsigned char>::min_exponent;
-    const int  numeric_limits<unsigned char>::min_exponent10;
-    const int  numeric_limits<unsigned char>::max_exponent;
-    const int  numeric_limits<unsigned char>::max_exponent10;
-    const bool numeric_limits<unsigned char>::has_infinity;
-    const bool numeric_limits<unsigned char>::has_quiet_NaN;
-    const bool numeric_limits<unsigned char>::has_signaling_NaN;
-    const float_denorm_style numeric_limits<unsigned char>::has_denorm;
-    const bool numeric_limits<unsigned char>::has_denorm_loss;
-    const bool numeric_limits<unsigned char>::is_iec559;
-    const bool numeric_limits<unsigned char>::is_bounded;
-    const bool numeric_limits<unsigned char>::is_modulo;
-    const bool numeric_limits<unsigned char>::traps;
-    const bool numeric_limits<unsigned char>::tinyness_before;
-    const float_round_style numeric_limits<unsigned char>::round_style;
-
-    const bool numeric_limits<short>::is_specialized;
-    const int  numeric_limits<short>::digits;
-    const int  numeric_limits<short>::digits10;
-    const bool numeric_limits<short>::is_signed;
-    const bool numeric_limits<short>::is_integer;
-    const bool numeric_limits<short>::is_exact;
-    const int  numeric_limits<short>::radix;
-    const int  numeric_limits<short>::min_exponent;
-    const int  numeric_limits<short>::min_exponent10;
-    const int  numeric_limits<short>::max_exponent;
-    const int  numeric_limits<short>::max_exponent10;
-    const bool numeric_limits<short>::has_infinity;
-    const bool numeric_limits<short>::has_quiet_NaN;
-    const bool numeric_limits<short>::has_signaling_NaN;
-    const float_denorm_style numeric_limits<short>::has_denorm;
-    const bool numeric_limits<short>::has_denorm_loss;
-    const bool numeric_limits<short>::is_iec559;
-    const bool numeric_limits<short>::is_bounded;
-    const bool numeric_limits<short>::is_modulo;
-    const bool numeric_limits<short>::traps;
-    const bool numeric_limits<short>::tinyness_before;
-    const float_round_style numeric_limits<short>::round_style;
-
-    const bool numeric_limits<unsigned short>::is_specialized;
-    const int  numeric_limits<unsigned short>::digits;
-    const int  numeric_limits<unsigned short>::digits10;
-    const bool numeric_limits<unsigned short>::is_signed;
-    const bool numeric_limits<unsigned short>::is_integer;
-    const bool numeric_limits<unsigned short>::is_exact;
-    const int  numeric_limits<unsigned short>::radix;
-    const int  numeric_limits<unsigned short>::min_exponent;
-    const int  numeric_limits<unsigned short>::min_exponent10;
-    const int  numeric_limits<unsigned short>::max_exponent;
-    const int  numeric_limits<unsigned short>::max_exponent10;
-    const bool numeric_limits<unsigned short>::has_infinity;
-    const bool numeric_limits<unsigned short>::has_quiet_NaN;
-    const bool numeric_limits<unsigned short>::has_signaling_NaN;
-    const float_denorm_style numeric_limits<unsigned short>::has_denorm;
-    const bool numeric_limits<unsigned short>::has_denorm_loss;
-    const bool numeric_limits<unsigned short>::is_iec559;
-    const bool numeric_limits<unsigned short>::is_bounded;
-    const bool numeric_limits<unsigned short>::is_modulo;
-    const bool numeric_limits<unsigned short>::traps;
-    const bool numeric_limits<unsigned short>::tinyness_before;
-    const float_round_style numeric_limits<unsigned short>::round_style;
-
-    const bool numeric_limits<int>::is_specialized;
-    const int  numeric_limits<int>::digits;
-    const int  numeric_limits<int>::digits10;
-    const bool numeric_limits<int>::is_signed;
-    const bool numeric_limits<int>::is_integer;
-    const bool numeric_limits<int>::is_exact;
-    const int  numeric_limits<int>::radix;
-    const int  numeric_limits<int>::min_exponent;
-    const int  numeric_limits<int>::min_exponent10;
-    const int  numeric_limits<int>::max_exponent;
-    const int  numeric_limits<int>::max_exponent10;
-    const bool numeric_limits<int>::has_infinity;
-    const bool numeric_limits<int>::has_quiet_NaN;
-    const bool numeric_limits<int>::has_signaling_NaN;
-    const float_denorm_style numeric_limits<int>::has_denorm;
-    const bool numeric_limits<int>::has_denorm_loss;
-    const bool numeric_limits<int>::is_iec559;
-    const bool numeric_limits<int>::is_bounded;
-    const bool numeric_limits<int>::is_modulo;
-    const bool numeric_limits<int>::traps;
-    const bool numeric_limits<int>::tinyness_before;
-    const float_round_style numeric_limits<int>::round_style;
-
-    const bool numeric_limits<unsigned int>::is_specialized;
-    const int  numeric_limits<unsigned int>::digits;
-    const int  numeric_limits<unsigned int>::digits10;
-    const bool numeric_limits<unsigned int>::is_signed;
-    const bool numeric_limits<unsigned int>::is_integer;
-    const bool numeric_limits<unsigned int>::is_exact;
-    const int  numeric_limits<unsigned int>::radix;
-    const int  numeric_limits<unsigned int>::min_exponent;
-    const int  numeric_limits<unsigned int>::min_exponent10;
-    const int  numeric_limits<unsigned int>::max_exponent;
-    const int  numeric_limits<unsigned int>::max_exponent10;
-    const bool numeric_limits<unsigned int>::has_infinity;
-    const bool numeric_limits<unsigned int>::has_quiet_NaN;
-    const bool numeric_limits<unsigned int>::has_signaling_NaN;
-    const float_denorm_style numeric_limits<unsigned int>::has_denorm;
-    const bool numeric_limits<unsigned int>::has_denorm_loss;
-    const bool numeric_limits<unsigned int>::is_iec559;
-    const bool numeric_limits<unsigned int>::is_bounded;
-    const bool numeric_limits<unsigned int>::is_modulo;
-    const bool numeric_limits<unsigned int>::traps;
-    const bool numeric_limits<unsigned int>::tinyness_before;
-    const float_round_style numeric_limits<unsigned int>::round_style;
-
-    const bool numeric_limits<long>::is_specialized;
-    const int  numeric_limits<long>::digits;
-    const int  numeric_limits<long>::digits10;
-    const bool numeric_limits<long>::is_signed;
-    const bool numeric_limits<long>::is_integer;
-    const bool numeric_limits<long>::is_exact;
-    const int  numeric_limits<long>::radix;
-    const int  numeric_limits<long>::min_exponent;
-    const int  numeric_limits<long>::min_exponent10;
-    const int  numeric_limits<long>::max_exponent;
-    const int  numeric_limits<long>::max_exponent10;
-    const bool numeric_limits<long>::has_infinity;
-    const bool numeric_limits<long>::has_quiet_NaN;
-    const bool numeric_limits<long>::has_signaling_NaN;
-    const float_denorm_style numeric_limits<long>::has_denorm;
-    const bool numeric_limits<long>::has_denorm_loss;
-    const bool numeric_limits<long>::is_iec559;
-    const bool numeric_limits<long>::is_bounded;
-    const bool numeric_limits<long>::is_modulo;
-    const bool numeric_limits<long>::traps;
-    const bool numeric_limits<long>::tinyness_before;
-    const float_round_style numeric_limits<long>::round_style;
-
-    const bool numeric_limits<unsigned long>::is_specialized;
-    const int  numeric_limits<unsigned long>::digits;
-    const int  numeric_limits<unsigned long>::digits10;
-    const bool numeric_limits<unsigned long>::is_signed;
-    const bool numeric_limits<unsigned long>::is_integer;
-    const bool numeric_limits<unsigned long>::is_exact;
-    const int  numeric_limits<unsigned long>::radix;
-    const int  numeric_limits<unsigned long>::min_exponent;
-    const int  numeric_limits<unsigned long>::min_exponent10;
-    const int  numeric_limits<unsigned long>::max_exponent;
-    const int  numeric_limits<unsigned long>::max_exponent10;
-    const bool numeric_limits<unsigned long>::has_infinity;
-    const bool numeric_limits<unsigned long>::has_quiet_NaN;
-    const bool numeric_limits<unsigned long>::has_signaling_NaN;
-    const float_denorm_style numeric_limits<unsigned long>::has_denorm;
-    const bool numeric_limits<unsigned long>::has_denorm_loss;
-    const bool numeric_limits<unsigned long>::is_iec559;
-    const bool numeric_limits<unsigned long>::is_bounded;
-    const bool numeric_limits<unsigned long>::is_modulo;
-    const bool numeric_limits<unsigned long>::traps;
-    const bool numeric_limits<unsigned long>::tinyness_before;
-    const float_round_style numeric_limits<unsigned long>::round_style;
-
-    const bool numeric_limits<float>::is_specialized;
-    const int  numeric_limits<float>::digits;
-    const int  numeric_limits<float>::digits10;
-    const bool numeric_limits<float>::is_signed;
-    const bool numeric_limits<float>::is_integer;
-    const bool numeric_limits<float>::is_exact;
-    const int  numeric_limits<float>::radix;
-    const int  numeric_limits<float>::min_exponent;
-    const int  numeric_limits<float>::min_exponent10;
-    const int  numeric_limits<float>::max_exponent;
-    const int  numeric_limits<float>::max_exponent10;
-    const bool numeric_limits<float>::has_infinity;
-    const bool numeric_limits<float>::has_quiet_NaN;
-    const bool numeric_limits<float>::has_signaling_NaN;
-    const float_denorm_style numeric_limits<float>::has_denorm;
-    const bool numeric_limits<float>::has_denorm_loss;
-    const bool numeric_limits<float>::is_iec559;
-    const bool numeric_limits<float>::is_bounded;
-    const bool numeric_limits<float>::is_modulo;
-    const bool numeric_limits<float>::traps;
-    const bool numeric_limits<float>::tinyness_before;
-    const float_round_style numeric_limits<float>::round_style;
-
-    const bool numeric_limits<double>::is_specialized;
-    const int  numeric_limits<double>::digits;
-    const int  numeric_limits<double>::digits10;
-    const bool numeric_limits<double>::is_signed;
-    const bool numeric_limits<double>::is_integer;
-    const bool numeric_limits<double>::is_exact;
-    const int  numeric_limits<double>::radix;
-    const int  numeric_limits<double>::min_exponent;
-    const int  numeric_limits<double>::min_exponent10;
-    const int  numeric_limits<double>::max_exponent;
-    const int  numeric_limits<double>::max_exponent10;
-    const bool numeric_limits<double>::has_infinity;
-    const bool numeric_limits<double>::has_quiet_NaN;
-    const bool numeric_limits<double>::has_signaling_NaN;
-    const float_denorm_style numeric_limits<double>::has_denorm;
-    const bool numeric_limits<double>::has_denorm_loss;
-    const bool numeric_limits<double>::is_iec559;
-    const bool numeric_limits<double>::is_bounded;
-    const bool numeric_limits<double>::is_modulo;
-    const bool numeric_limits<double>::traps;
-    const bool numeric_limits<double>::tinyness_before;
-    const float_round_style numeric_limits<double>::round_style;
-
-    const bool numeric_limits<long double>::is_specialized;
-    const int  numeric_limits<long double>::digits;
-    const int  numeric_limits<long double>::digits10;
-    const bool numeric_limits<long double>::is_signed;
-    const bool numeric_limits<long double>::is_integer;
-    const bool numeric_limits<long double>::is_exact;
-    const int  numeric_limits<long double>::radix;
-    const int  numeric_limits<long double>::min_exponent;
-    const int  numeric_limits<long double>::min_exponent10;
-    const int  numeric_limits<long double>::max_exponent;
-    const int  numeric_limits<long double>::max_exponent10;
-    const bool numeric_limits<long double>::has_infinity;
-    const bool numeric_limits<long double>::has_quiet_NaN;
-    const bool numeric_limits<long double>::has_signaling_NaN;
-    const float_denorm_style numeric_limits<long double>::has_denorm;
-    const bool numeric_limits<long double>::has_denorm_loss;
-    const bool numeric_limits<long double>::is_iec559;
-    const bool numeric_limits<long double>::is_bounded;
-    const bool numeric_limits<long double>::is_modulo;
-    const bool numeric_limits<long double>::traps;
-    const bool numeric_limits<long double>::tinyness_before;
-    const float_round_style numeric_limits<long double>::round_style;
-} // namespace std
-
-
index b09f33d..c9e8687 100644 (file)
@@ -76,6 +76,7 @@ CCODECVT_H = @CCODECVT_H@
 CLOCALE_H = @CLOCALE_H@
 CMESSAGES_H = @CMESSAGES_H@
 CPP = @CPP@
+CPU_LIMITS_INC_SRCDIR = @CPU_LIMITS_INC_SRCDIR@
 CSHADOW_FLAGS = @CSHADOW_FLAGS@
 CSTDIO_H = @CSTDIO_H@
 CXX = @CXX@
@@ -106,7 +107,6 @@ LIBMATH_INCLUDES = @LIBMATH_INCLUDES@
 LIBSUPCXX_INCLUDES = @LIBSUPCXX_INCLUDES@
 LIBSUPCXX_PICFLAGS = @LIBSUPCXX_PICFLAGS@
 LIBTOOL = @LIBTOOL@
-LIMITS_INC_SRCDIR = @LIMITS_INC_SRCDIR@
 LN_S = @LN_S@
 MAINT = @MAINT@
 MAKEINFO = @MAKEINFO@