limits.h: Move to...
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. From-SVN: r46445
This commit is contained in:
parent
91dc81f990
commit
f295ecef02
41 changed files with 328 additions and 2558 deletions
|
@ -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.
|
||||
|
|
|
@ -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@
|
||||
|
|
|
@ -28,6 +28,11 @@
|
|||
#ifndef _GLIBCPP_CPU_LIMITS
|
||||
#define _GLIBCPP_CPU_LIMITS 1
|
||||
|
||||
#define __glibcpp_long_bits 64
|
||||
|
||||
#define __glibcpp_long_double_bits 64
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
|
41
libstdc++-v3/config/cpu/generic/bits/cpu_limits.h
Normal file
41
libstdc++-v3/config/cpu/generic/bits/cpu_limits.h
Normal file
|
@ -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
|
||||
|
|
@ -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
|
35
libstdc++-v3/config/cpu/m68k/bits/cpu_limits.h
Normal file
35
libstdc++-v3/config/cpu/m68k/bits/cpu_limits.h
Normal file
|
@ -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
|
||||
|
||||
|
38
libstdc++-v3/config/cpu/powerpc/bits/cpu_limits.h
Normal file
38
libstdc++-v3/config/cpu/powerpc/bits/cpu_limits.h
Normal file
|
@ -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
|
||||
|
||||
|
||||
|
38
libstdc++-v3/config/cpu/s390/bits/cpu_limits.h
Normal file
38
libstdc++-v3/config/cpu/s390/bits/cpu_limits.h
Normal file
|
@ -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
|
|
@ -30,20 +30,20 @@
|
|||
#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
|
||||
|
@ -55,10 +55,9 @@
|
|||
#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__
|
||||
|
|
|
@ -29,16 +29,13 @@
|
|||
|
||||
|
||||
#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
|
||||
|
||||
|
||||
|
|
|
@ -27,21 +27,12 @@
|
|||
// 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
|
||||
|
||||
|
||||
/* Settings for NetBSD. */
|
||||
|
||||
/* __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
|
||||
|
||||
|
||||
|
|
|
@ -29,11 +29,10 @@
|
|||
|
||||
|
||||
#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
|
||||
|
||||
|
||||
|
|
|
@ -29,13 +29,9 @@
|
|||
|
||||
|
||||
#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
|
||||
|
|
|
@ -27,10 +27,12 @@
|
|||
// 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
|
||||
|
||||
|
|
|
@ -27,13 +27,11 @@
|
|||
// 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
|
||||
|
||||
|
|
|
@ -27,32 +27,28 @@
|
|||
// 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.
|
||||
|
||||
/* 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. */
|
||||
// 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
|
||||
|
||||
|
||||
|
||||
|
|
|
@ -27,29 +27,28 @@
|
|||
// 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.
|
||||
|
||||
/* 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. */
|
||||
// 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
|
||||
|
|
|
@ -27,15 +27,10 @@
|
|||
// 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
|
||||
|
||||
|
||||
|
|
|
@ -27,12 +27,11 @@
|
|||
// 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
|
||||
|
||||
|
|
|
@ -27,12 +27,11 @@
|
|||
// 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
|
||||
|
||||
|
|
|
@ -27,12 +27,11 @@
|
|||
// 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
|
||||
|
||||
|
|
63
libstdc++-v3/configure
vendored
63
libstdc++-v3/configure
vendored
|
@ -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
|
||||
|
@ -17189,17 +17190,17 @@ fi
|
|||
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
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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 = \
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
@ -51,10 +49,6 @@
|
|||
// 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
|
||||
|
||||
|
@ -64,6 +58,10 @@
|
|||
// 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
|
||||
|
|
|
@ -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
|
|
@ -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
|
||||
|
|
|
@ -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@
|
||||
|
|
|
@ -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@
|
||||
|
|
|
@ -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@
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
@ -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@
|
||||
|
|
|
@ -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@
|
||||
|
|
|
@ -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
|
|
@ -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
|
||||
|
||||
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
@ -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@
|
||||
|
|
Loading…
Add table
Reference in a new issue