re PR libstdc++/36104 (gnu-versioned-namespace is broken)
2011-01-14 Benjamin Kosnik <bkoz@redhat.com> PR libstdc++/36104 * include/Makefile.am (bits_sup_headers, stamp-bits-sup): New. * include/Makefile.in: Regenerate. * libsupc++/Makefile.am (std_HEADERS, bits_HEADERS): New. (install-stdHEADERS, install-bitsHEADERS): New. * libsupc++/Makefile.in: Regenerate. * include/bits/c++config: Update for inline namespaces. * libsupc++/cxxabi-forced.h: To... * libsupc++/cxxabi_forced.h: ...this. * libsupc++/hash_bytes.h: Separate file. * libsupc++/typeinfo: Use it. * libsupc++/exception: Adjust for bits subdirectory. * libsupc++/eh_aux_runtime.cc: Same. * libsupc++/eh_ptr.cc: Same. * libsupc++/new_op.cc: Same. * libsupc++/exception_defines.h: Same. * libsupc++/nested_exception.h: Same. * libsupc++/eh_terminate.cc: Same. * libsupc++/vec.cc: Same. * libsupc++/vterminate.cc: Same. * libsupc++/exception_ptr.h: Same. * libsupc++/eh_personality.cc: Same. * libsupc++/eh_call.cc: Same. * libsupc++/new_opnt.cc: Same. * libsupc++/hash_bytes.cc: Same. * config/cpu/arm/cxxabi_tweaks.h: Same. * config/cpu/generic/cxxabi_tweaks.h: Same. * libsupc++/cxxabi.h: Same. Consolidate _GLIBCXX_NOTHROW defines. * include/std/bitset: Same. * include/ext/vstring.tcc: Same. * include/bits/hashtable.h: Same. * include/bits/functional_hash.h: Same. * include/bits/hashtable_policy.h: Same. * include/bits/basic_string.h: Same. * include/bits/istream.tcc: Same. * include/bits/ostream.tcc: Same. * include/bits/algorithmfwd.h: Same. * include/bits/basic_string.tcc: Same. * include/bits/ostream_insert.h: Same. * include/bits/fstream.tcc: Same. * include/bits/functexcept.h: Same. * doc/doxygen/user.cfg.in: Adjust names. * testsuite/ext/profile/mutex_extensions_neg.cc: Adjust line numbers. From-SVN: r168831
This commit is contained in:
parent
6227ed7d7a
commit
7c3e9502c3
41 changed files with 648 additions and 484 deletions
|
@ -1,3 +1,52 @@
|
|||
2011-01-14 Benjamin Kosnik <bkoz@redhat.com>
|
||||
|
||||
PR libstdc++/36104
|
||||
* include/Makefile.am (bits_sup_headers, stamp-bits-sup): New.
|
||||
* include/Makefile.in: Regenerate.
|
||||
* libsupc++/Makefile.am (std_HEADERS, bits_HEADERS): New.
|
||||
(install-stdHEADERS, install-bitsHEADERS): New.
|
||||
* libsupc++/Makefile.in: Regenerate.
|
||||
|
||||
* include/bits/c++config: Update for inline namespaces.
|
||||
* libsupc++/cxxabi-forced.h: To...
|
||||
* libsupc++/cxxabi_forced.h: ...this.
|
||||
* libsupc++/hash_bytes.h: Separate file.
|
||||
* libsupc++/typeinfo: Use it.
|
||||
* libsupc++/exception: Adjust for bits subdirectory.
|
||||
* libsupc++/eh_aux_runtime.cc: Same.
|
||||
* libsupc++/eh_ptr.cc: Same.
|
||||
* libsupc++/new_op.cc: Same.
|
||||
* libsupc++/exception_defines.h: Same.
|
||||
* libsupc++/nested_exception.h: Same.
|
||||
* libsupc++/eh_terminate.cc: Same.
|
||||
* libsupc++/vec.cc: Same.
|
||||
* libsupc++/vterminate.cc: Same.
|
||||
* libsupc++/exception_ptr.h: Same.
|
||||
* libsupc++/eh_personality.cc: Same.
|
||||
* libsupc++/eh_call.cc: Same.
|
||||
* libsupc++/new_opnt.cc: Same.
|
||||
* libsupc++/hash_bytes.cc: Same.
|
||||
* config/cpu/arm/cxxabi_tweaks.h: Same.
|
||||
* config/cpu/generic/cxxabi_tweaks.h: Same.
|
||||
* libsupc++/cxxabi.h: Same. Consolidate _GLIBCXX_NOTHROW defines.
|
||||
* include/std/bitset: Same.
|
||||
* include/ext/vstring.tcc: Same.
|
||||
* include/bits/hashtable.h: Same.
|
||||
* include/bits/functional_hash.h: Same.
|
||||
* include/bits/hashtable_policy.h: Same.
|
||||
* include/bits/basic_string.h: Same.
|
||||
* include/bits/istream.tcc: Same.
|
||||
* include/bits/ostream.tcc: Same.
|
||||
* include/bits/algorithmfwd.h: Same.
|
||||
* include/bits/basic_string.tcc: Same.
|
||||
* include/bits/ostream_insert.h: Same.
|
||||
* include/bits/fstream.tcc: Same.
|
||||
* include/bits/functexcept.h: Same.
|
||||
|
||||
* doc/doxygen/user.cfg.in: Adjust names.
|
||||
|
||||
* testsuite/ext/profile/mutex_extensions_neg.cc: Adjust line numbers.
|
||||
|
||||
2011-01-14 Paolo Carlini <paolo.carlini@oracle.com>
|
||||
|
||||
* testsuite/25_algorithms/is_permutation/check_type.cc: Minor
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
// Control various target specific ABI tweaks. ARM version.
|
||||
|
||||
// Copyright (C) 2004, 2006, 2008, 2009 Free Software Foundation, Inc.
|
||||
// Copyright (C) 2004, 2006, 2008, 2009, 2011 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
|
||||
|
@ -22,8 +22,9 @@
|
|||
// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
|
||||
// <http://www.gnu.org/licenses/>.
|
||||
|
||||
/** @file cxxabi_tweaks.h
|
||||
* The header provides an CPU-variable interface to the C++ ABI.
|
||||
/** @file bits/cxxabi_tweaks.h
|
||||
* This is an internal header file, included by other library headers.
|
||||
* Do not attempt to use it directly. @headername{cxxabi.h}
|
||||
*/
|
||||
|
||||
#ifndef _CXXABI_TWEAKS_H
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
// Control various target specific ABI tweaks. Generic version.
|
||||
|
||||
// Copyright (C) 2004, 2006, 2008, 2009 Free Software Foundation, Inc.
|
||||
// Copyright (C) 2004, 2006, 2008, 2009, 2011 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
|
||||
|
@ -22,8 +22,9 @@
|
|||
// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
|
||||
// <http://www.gnu.org/licenses/>.
|
||||
|
||||
/** @file cxxabi_tweaks.h
|
||||
* The header provides an CPU-variable interface to the C++ ABI.
|
||||
/** @file bits/cxxabi_tweaks.h
|
||||
* This is an internal header file, included by other library headers.
|
||||
* Do not attempt to use it directly. @headername{cxxabi.h}
|
||||
*/
|
||||
|
||||
#ifndef _CXXABI_TWEAKS_H
|
||||
|
|
|
@ -586,7 +586,7 @@ WARN_LOGFILE =
|
|||
|
||||
INPUT = @srcdir@/doc/doxygen/doxygroups.cc \
|
||||
@srcdir@/libsupc++/cxxabi.h \
|
||||
@srcdir@/libsupc++/cxxabi-forced.h \
|
||||
@srcdir@/libsupc++/cxxabi_forced.h \
|
||||
@srcdir@/libsupc++/exception \
|
||||
@srcdir@/libsupc++/exception_defines.h \
|
||||
@srcdir@/libsupc++/exception_ptr.h \
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
## Makefile for the include subdirectory of the GNU C++ Standard library.
|
||||
##
|
||||
## Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010
|
||||
## Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010,
|
||||
## 2011
|
||||
## Free Software Foundation, Inc.
|
||||
##
|
||||
## This file is part of the libstdc++ version 3 distribution.
|
||||
|
@ -172,6 +173,14 @@ bits_headers = \
|
|||
${bits_srcdir}/valarray_after.h \
|
||||
${bits_srcdir}/vector.tcc
|
||||
|
||||
bits_sup_srcdir = ${glibcxx_srcdir}/libsupc++
|
||||
bits_sup_headers = \
|
||||
${bits_sup_srcdir}/cxxabi_forced.h \
|
||||
${bits_sup_srcdir}/exception_defines.h \
|
||||
${bits_sup_srcdir}/exception_ptr.h \
|
||||
${bits_sup_srcdir}/hash_bytes.h \
|
||||
${bits_sup_srcdir}/nested_exception.h
|
||||
|
||||
backward_srcdir = ${glibcxx_srcdir}/include/backward
|
||||
backward_builddir = ./backward
|
||||
backward_headers = \
|
||||
|
@ -888,7 +897,7 @@ endif
|
|||
# List of all timestamp files. By keeping only one copy of this list, both
|
||||
# CLEANFILES and all-local are kept up-to-date.
|
||||
allstamped = \
|
||||
stamp-std stamp-bits stamp-c_base stamp-c_compatibility \
|
||||
stamp-std stamp-bits stamp-bits-sup stamp-c_base stamp-c_compatibility \
|
||||
stamp-backward stamp-ext stamp-pb stamp-tr1 stamp-decimal \
|
||||
stamp-debug stamp-parallel stamp-profile stamp-profile-impl \
|
||||
stamp-host
|
||||
|
@ -917,6 +926,10 @@ stamp-bits: ${bits_headers}
|
|||
@-cd ${bits_builddir} && $(LN_S) $? . 2>/dev/null
|
||||
@$(STAMP) stamp-bits
|
||||
|
||||
stamp-bits-sup: stamp-bits ${bits_sup_headers}
|
||||
@-cd ${bits_builddir} && $(LN_S) $? . 2>/dev/null
|
||||
@$(STAMP) stamp-bits-sup
|
||||
|
||||
stamp-c_base: ${c_base_headers}
|
||||
@-mkdir -p ${c_base_builddir}
|
||||
@-cd ${c_base_builddir} && $(LN_S) $? . 2>/dev/null
|
||||
|
@ -1071,14 +1084,14 @@ ${host_builddir}/c++config.h: ${CONFIG_HEADER} \
|
|||
stamp-namespace-version \
|
||||
stamp-visibility
|
||||
@date=`cat ${toplevel_srcdir}/gcc/DATESTAMP` ;\
|
||||
nsa_version=`cat stamp-namespace-version` ;\
|
||||
ns_version=`cat stamp-namespace-version` ;\
|
||||
visibility=`cat stamp-visibility` ;\
|
||||
ldbl_compat='s,g,g,' ;\
|
||||
grep "^[ ]*#[ ]*define[ ][ ]*_GLIBCXX_LONG_DOUBLE_COMPAT[ ][ ]*1[ ]*$$" \
|
||||
${CONFIG_HEADER} > /dev/null 2>&1 \
|
||||
&& ldbl_compat='s,^#undef _GLIBCXX_LONG_DOUBLE_COMPAT$$,#define _GLIBCXX_LONG_DOUBLE_COMPAT 1,' ;\
|
||||
sed -e "s,define __GLIBCXX__,define __GLIBCXX__ $$date," \
|
||||
-e "s,define _GLIBCXX_NAMESPACE_ASSOCIATION_VERSION, define _GLIBCXX_NAMESPACE_ASSOCIATION_VERSION $$nsa_version," \
|
||||
-e "s,define _GLIBCXX_INLINE_VERSION, define _GLIBCXX_INLINE_VERSION $$ns_version," \
|
||||
-e "s,define _GLIBCXX_HAVE_ATTRIBUTE_VISIBILITY, define _GLIBCXX_HAVE_ATTRIBUTE_VISIBILITY $$visibility," \
|
||||
-e "$$ldbl_compat" \
|
||||
< ${glibcxx_srcdir}/include/bits/c++config > $@ ;\
|
||||
|
|
|
@ -423,6 +423,14 @@ bits_headers = \
|
|||
${bits_srcdir}/valarray_after.h \
|
||||
${bits_srcdir}/vector.tcc
|
||||
|
||||
bits_sup_srcdir = ${glibcxx_srcdir}/libsupc++
|
||||
bits_sup_headers = \
|
||||
${bits_sup_srcdir}/cxxabi_forced.h \
|
||||
${bits_sup_srcdir}/exception_defines.h \
|
||||
${bits_sup_srcdir}/exception_ptr.h \
|
||||
${bits_sup_srcdir}/hash_bytes.h \
|
||||
${bits_sup_srcdir}/nested_exception.h
|
||||
|
||||
backward_srcdir = ${glibcxx_srcdir}/include/backward
|
||||
backward_builddir = ./backward
|
||||
backward_headers = \
|
||||
|
@ -1125,7 +1133,7 @@ PCHFLAGS = -x c++-header -nostdinc++ $(CXXFLAGS)
|
|||
# List of all timestamp files. By keeping only one copy of this list, both
|
||||
# CLEANFILES and all-local are kept up-to-date.
|
||||
allstamped = \
|
||||
stamp-std stamp-bits stamp-c_base stamp-c_compatibility \
|
||||
stamp-std stamp-bits stamp-bits-sup stamp-c_base stamp-c_compatibility \
|
||||
stamp-backward stamp-ext stamp-pb stamp-tr1 stamp-decimal \
|
||||
stamp-debug stamp-parallel stamp-profile stamp-profile-impl \
|
||||
stamp-host
|
||||
|
@ -1316,6 +1324,10 @@ stamp-bits: ${bits_headers}
|
|||
@-cd ${bits_builddir} && $(LN_S) $? . 2>/dev/null
|
||||
@$(STAMP) stamp-bits
|
||||
|
||||
stamp-bits-sup: stamp-bits ${bits_sup_headers}
|
||||
@-cd ${bits_builddir} && $(LN_S) $? . 2>/dev/null
|
||||
@$(STAMP) stamp-bits-sup
|
||||
|
||||
stamp-c_base: ${c_base_headers}
|
||||
@-mkdir -p ${c_base_builddir}
|
||||
@-cd ${c_base_builddir} && $(LN_S) $? . 2>/dev/null
|
||||
|
@ -1464,14 +1476,14 @@ ${host_builddir}/c++config.h: ${CONFIG_HEADER} \
|
|||
stamp-namespace-version \
|
||||
stamp-visibility
|
||||
@date=`cat ${toplevel_srcdir}/gcc/DATESTAMP` ;\
|
||||
nsa_version=`cat stamp-namespace-version` ;\
|
||||
ns_version=`cat stamp-namespace-version` ;\
|
||||
visibility=`cat stamp-visibility` ;\
|
||||
ldbl_compat='s,g,g,' ;\
|
||||
grep "^[ ]*#[ ]*define[ ][ ]*_GLIBCXX_LONG_DOUBLE_COMPAT[ ][ ]*1[ ]*$$" \
|
||||
${CONFIG_HEADER} > /dev/null 2>&1 \
|
||||
&& ldbl_compat='s,^#undef _GLIBCXX_LONG_DOUBLE_COMPAT$$,#define _GLIBCXX_LONG_DOUBLE_COMPAT 1,' ;\
|
||||
sed -e "s,define __GLIBCXX__,define __GLIBCXX__ $$date," \
|
||||
-e "s,define _GLIBCXX_NAMESPACE_ASSOCIATION_VERSION, define _GLIBCXX_NAMESPACE_ASSOCIATION_VERSION $$nsa_version," \
|
||||
-e "s,define _GLIBCXX_INLINE_VERSION, define _GLIBCXX_INLINE_VERSION $$ns_version," \
|
||||
-e "s,define _GLIBCXX_HAVE_ATTRIBUTE_VISIBILITY, define _GLIBCXX_HAVE_ATTRIBUTE_VISIBILITY $$visibility," \
|
||||
-e "$$ldbl_compat" \
|
||||
< ${glibcxx_srcdir}/include/bits/c++config > $@ ;\
|
||||
|
|
|
@ -804,7 +804,7 @@ _GLIBCXX_BEGIN_NESTED_NAMESPACE(std, _GLIBCXX_STD_P)
|
|||
|
||||
_GLIBCXX_END_NESTED_NAMESPACE
|
||||
|
||||
#ifdef _GLIBCXX_NAMESPACE_ASSOCIATION_PARALLEL
|
||||
#ifdef _GLIBCXX_PARALLEL
|
||||
# include <parallel/algorithmfwd.h>
|
||||
#endif
|
||||
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
// Components for manipulating sequences of characters -*- C++ -*-
|
||||
|
||||
// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,
|
||||
// 2006, 2007, 2008, 2009, 2010
|
||||
// 2006, 2007, 2008, 2009, 2010, 2011
|
||||
// Free Software Foundation, Inc.
|
||||
//
|
||||
// This file is part of the GNU ISO C++ Library. This library is free
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
// Components for manipulating sequences of characters -*- C++ -*-
|
||||
|
||||
// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,
|
||||
// 2006, 2007, 2008, 2009, 2010
|
||||
// 2006, 2007, 2008, 2009, 2010, 2011
|
||||
// Free Software Foundation, Inc.
|
||||
//
|
||||
// This file is part of the GNU ISO C++ Library. This library is free
|
||||
|
@ -41,7 +41,7 @@
|
|||
|
||||
#pragma GCC system_header
|
||||
|
||||
#include <cxxabi-forced.h>
|
||||
#include <bits/cxxabi_forced.h>
|
||||
|
||||
_GLIBCXX_BEGIN_NAMESPACE(std)
|
||||
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
// Predefined symbols and macros -*- C++ -*-
|
||||
|
||||
// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,
|
||||
// 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc.
|
||||
// 2006, 2007, 2008, 2009, 2010, 2011 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
|
||||
|
@ -32,7 +32,7 @@
|
|||
#define _GLIBCXX_CXX_CONFIG_H 1
|
||||
|
||||
// The current version of the C++ library in compressed ISO date format.
|
||||
#define __GLIBCXX__
|
||||
#define __GLIBCXX__
|
||||
|
||||
// Macros for various attributes.
|
||||
#ifndef _GLIBCXX_PURE
|
||||
|
@ -49,7 +49,7 @@
|
|||
|
||||
#ifndef _GLIBCXX_NOTHROW
|
||||
# ifdef __cplusplus
|
||||
# define _GLIBCXX_NOTHROW throw()
|
||||
# define _GLIBCXX_NOTHROW throw()
|
||||
# else
|
||||
# define _GLIBCXX_NOTHROW __attribute__((__nothrow__))
|
||||
# endif
|
||||
|
@ -87,7 +87,7 @@ namespace std
|
|||
{
|
||||
typedef __SIZE_TYPE__ size_t;
|
||||
typedef __PTRDIFF_TYPE__ ptrdiff_t;
|
||||
|
||||
|
||||
#ifdef __GXX_EXPERIMENTAL_CXX0X__
|
||||
typedef decltype(nullptr) nullptr_t;
|
||||
#endif
|
||||
|
@ -103,23 +103,19 @@ namespace std
|
|||
#ifndef _GLIBCXX_CONSTEXPR
|
||||
# ifdef __GXX_EXPERIMENTAL_CXX0X__
|
||||
# define _GLIBCXX_CONSTEXPR constexpr
|
||||
# else
|
||||
# define _GLIBCXX_CONSTEXPR
|
||||
# endif
|
||||
#endif
|
||||
|
||||
#ifndef _GLIBCXX_USE_CONSTEXPR
|
||||
# ifdef __GXX_EXPERIMENTAL_CXX0X__
|
||||
# define _GLIBCXX_USE_CONSTEXPR constexpr
|
||||
# else
|
||||
# define _GLIBCXX_CONSTEXPR
|
||||
# define _GLIBCXX_USE_CONSTEXPR const
|
||||
# endif
|
||||
#endif
|
||||
|
||||
// Macros for activating various namespace association modes.
|
||||
// _GLIBCXX_NAMESPACE_ASSOCIATION_DEBUG
|
||||
// _GLIBCXX_NAMESPACE_ASSOCIATION_PARALLEL
|
||||
// _GLIBCXX_NAMESPACE_ASSOCIATION_VERSION
|
||||
// Macros for activating various inline namespaces.
|
||||
//
|
||||
// _GLIBCXX_NAMESPACE_DEBUG
|
||||
// _GLIBCXX_NAMESPACE_PARALLEL
|
||||
// _GLIBCXX_NAMESPACE_PROFILE
|
||||
// _GLIBCXX_NAMESPACE_VERSION
|
||||
|
||||
// Guide to libstdc++ namespaces.
|
||||
/*
|
||||
|
@ -127,6 +123,7 @@ namespace std
|
|||
{
|
||||
namespace __debug { }
|
||||
namespace __parallel { }
|
||||
namespace __profile { }
|
||||
namespace __norm { } // __normative, __shadow, __replaced
|
||||
namespace __cxx1998 { }
|
||||
|
||||
|
@ -135,26 +132,26 @@ namespace std
|
|||
*/
|
||||
|
||||
#ifdef _GLIBCXX_DEBUG
|
||||
# define _GLIBCXX_NAMESPACE_ASSOCIATION_DEBUG 1
|
||||
# define _GLIBCXX_INLINE_DEBUG 1
|
||||
#endif
|
||||
|
||||
#ifdef _GLIBCXX_PARALLEL
|
||||
# define _GLIBCXX_NAMESPACE_ASSOCIATION_PARALLEL 1
|
||||
# define _GLIBCXX_INLINE_PARALLEL 1
|
||||
#endif
|
||||
|
||||
// Namespace association for profile
|
||||
// Namespace association for profile.
|
||||
#ifdef _GLIBCXX_PROFILE
|
||||
# define _GLIBCXX_NAMESPACE_ASSOCIATION_PROFILE 1
|
||||
# define _GLIBCXX_INLINE_PROFILE 1
|
||||
#endif
|
||||
|
||||
#define _GLIBCXX_NAMESPACE_ASSOCIATION_VERSION
|
||||
#define _GLIBCXX_INLINE_VERSION
|
||||
|
||||
// Defined if any namespace association modes are active.
|
||||
#if _GLIBCXX_NAMESPACE_ASSOCIATION_DEBUG \
|
||||
|| _GLIBCXX_NAMESPACE_ASSOCIATION_PARALLEL \
|
||||
|| _GLIBCXX_NAMESPACE_ASSOCIATION_PROFILE \
|
||||
|| _GLIBCXX_NAMESPACE_ASSOCIATION_VERSION
|
||||
# define _GLIBCXX_USE_NAMESPACE_ASSOCIATION 1
|
||||
// Defined if inline namespaces modes are active.
|
||||
#if _GLIBCXX_INLINE_DEBUG \
|
||||
|| _GLIBCXX_INLINE_PARALLEL \
|
||||
|| _GLIBCXX_INLINE_PROFILE \
|
||||
|| _GLIBCXX_INLINE_VERSION
|
||||
# define _GLIBCXX_USE_INLINE_NAMESPACES 1
|
||||
#endif
|
||||
|
||||
// Macros for namespace scope. Either namespace std:: or the name
|
||||
|
@ -169,7 +166,7 @@ namespace std
|
|||
// _GLIBCXX_END_NAMESPACE
|
||||
// _GLIBCXX_BEGIN_NESTED_NAMESPACE
|
||||
// _GLIBCXX_END_NESTED_NAMESPACE
|
||||
#ifndef _GLIBCXX_USE_NAMESPACE_ASSOCIATION
|
||||
#ifndef _GLIBCXX_USE_INLINE_NAMESPACES
|
||||
# define _GLIBCXX_STD_D _GLIBCXX_STD
|
||||
# define _GLIBCXX_STD_P _GLIBCXX_STD
|
||||
# define _GLIBCXX_STD_PR _GLIBCXX_STD
|
||||
|
@ -180,7 +177,7 @@ namespace std
|
|||
# define _GLIBCXX_END_NAMESPACE }
|
||||
#else
|
||||
|
||||
# if _GLIBCXX_NAMESPACE_ASSOCIATION_VERSION // && not anything else
|
||||
# if _GLIBCXX_INLINE_VERSION // && not anything else
|
||||
# define _GLIBCXX_STD_D _GLIBCXX_STD
|
||||
# define _GLIBCXX_STD_P _GLIBCXX_STD
|
||||
# define _GLIBCXX_STD _6
|
||||
|
@ -189,37 +186,37 @@ namespace std
|
|||
# endif
|
||||
|
||||
// debug
|
||||
# if _GLIBCXX_NAMESPACE_ASSOCIATION_DEBUG && !_GLIBCXX_NAMESPACE_ASSOCIATION_PARALLEL && !_GLIBCXX_NAMESPACE_ASSOCIATION_PROFILE
|
||||
# if _GLIBCXX_INLINE_DEBUG && !_GLIBCXX_INLINE_PARALLEL && !_GLIBCXX_INLINE_PROFILE
|
||||
# define _GLIBCXX_STD_D __norm
|
||||
# define _GLIBCXX_STD_P _GLIBCXX_STD
|
||||
# define _GLIBCXX_STD __cxx1998
|
||||
# define _GLIBCXX_BEGIN_NAMESPACE(X) namespace X _GLIBCXX_VISIBILITY_ATTR(default) {
|
||||
# define _GLIBCXX_BEGIN_NAMESPACE(X) namespace X _GLIBCXX_VISIBILITY_ATTR(default) {
|
||||
# define _GLIBCXX_END_NAMESPACE }
|
||||
# define _GLIBCXX_EXTERN_TEMPLATE -1
|
||||
# endif
|
||||
|
||||
// parallel
|
||||
# if _GLIBCXX_NAMESPACE_ASSOCIATION_PARALLEL && !_GLIBCXX_NAMESPACE_ASSOCIATION_DEBUG && !_GLIBCXX_NAMESPACE_ASSOCIATION_PROFILE
|
||||
# if _GLIBCXX_INLINE_PARALLEL && !_GLIBCXX_INLINE_DEBUG && !_GLIBCXX_INLINE_PROFILE
|
||||
# define _GLIBCXX_STD_D _GLIBCXX_STD
|
||||
# define _GLIBCXX_STD_P __norm
|
||||
# define _GLIBCXX_STD __cxx1998
|
||||
# define _GLIBCXX_BEGIN_NAMESPACE(X) namespace X _GLIBCXX_VISIBILITY_ATTR(default) {
|
||||
# define _GLIBCXX_BEGIN_NAMESPACE(X) namespace X _GLIBCXX_VISIBILITY_ATTR(default) {
|
||||
# define _GLIBCXX_END_NAMESPACE }
|
||||
# endif
|
||||
|
||||
// debug + parallel
|
||||
# if _GLIBCXX_NAMESPACE_ASSOCIATION_PARALLEL && _GLIBCXX_NAMESPACE_ASSOCIATION_DEBUG && !_GLIBCXX_NAMESPACE_ASSOCIATION_PROFILE
|
||||
# if _GLIBCXX_INLINE_PARALLEL && _GLIBCXX_INLINE_DEBUG && !_GLIBCXX_INLINE_PROFILE
|
||||
# define _GLIBCXX_STD_D __norm
|
||||
# define _GLIBCXX_STD_P __norm
|
||||
# define _GLIBCXX_STD __cxx1998
|
||||
# define _GLIBCXX_BEGIN_NAMESPACE(X) namespace X _GLIBCXX_VISIBILITY_ATTR(default) {
|
||||
# define _GLIBCXX_BEGIN_NAMESPACE(X) namespace X _GLIBCXX_VISIBILITY_ATTR(default) {
|
||||
# define _GLIBCXX_END_NAMESPACE }
|
||||
# define _GLIBCXX_EXTERN_TEMPLATE -1
|
||||
# endif
|
||||
|
||||
// profile
|
||||
# if _GLIBCXX_NAMESPACE_ASSOCIATION_PROFILE
|
||||
# if _GLIBCXX_NAMESPACE_ASSOCIATION_PARALLEL || _GLIBCXX_NAMESPACE_ASSOCIATION_DEBUG
|
||||
# if _GLIBCXX_INLINE_PROFILE
|
||||
# if _GLIBCXX_INLINE_PARALLEL || _GLIBCXX_INLINE_DEBUG
|
||||
# error Cannot use -D_GLIBCXX_PROFILE with -D_GLIBCXX_DEBUG or \
|
||||
-D_GLIBCXX_PARALLEL
|
||||
# endif
|
||||
|
@ -227,12 +224,12 @@ namespace std
|
|||
# define _GLIBCXX_STD_P _GLIBCXX_STD
|
||||
# define _GLIBCXX_STD_PR __norm
|
||||
# define _GLIBCXX_STD __cxx1998
|
||||
# define _GLIBCXX_BEGIN_NAMESPACE(X) namespace X _GLIBCXX_VISIBILITY_ATTR(default) {
|
||||
# define _GLIBCXX_BEGIN_NAMESPACE(X) namespace X _GLIBCXX_VISIBILITY_ATTR(default) {
|
||||
# define _GLIBCXX_END_NAMESPACE }
|
||||
# endif
|
||||
|
||||
# if __NO_INLINE__ && !__GXX_WEAK__
|
||||
# warning currently using namespace associated mode which may fail \
|
||||
# warning currently using inlined namespace mode which may fail \
|
||||
without inlining due to lack of weak symbols
|
||||
# endif
|
||||
|
||||
|
@ -240,52 +237,52 @@ namespace std
|
|||
# define _GLIBCXX_END_NESTED_NAMESPACE } }
|
||||
#endif
|
||||
|
||||
// Namespace associations for debug mode.
|
||||
#if _GLIBCXX_NAMESPACE_ASSOCIATION_DEBUG && !_GLIBCXX_NAMESPACE_ASSOCIATION_PROFILE
|
||||
// Inline namespaces for debug mode.
|
||||
#if _GLIBCXX_INLINE_DEBUG && !_GLIBCXX_INLINE_PROFILE
|
||||
namespace std
|
||||
{
|
||||
namespace __norm { }
|
||||
{
|
||||
namespace __norm { }
|
||||
inline namespace __debug { }
|
||||
inline namespace __cxx1998 { }
|
||||
}
|
||||
#endif
|
||||
|
||||
// Namespace associations for parallel mode.
|
||||
#if _GLIBCXX_NAMESPACE_ASSOCIATION_PARALLEL
|
||||
// Inline namespaces for parallel mode.
|
||||
#if _GLIBCXX_INLINE_PARALLEL
|
||||
namespace std
|
||||
{
|
||||
namespace __norm { }
|
||||
{
|
||||
namespace __norm { }
|
||||
inline namespace __parallel { }
|
||||
inline namespace __cxx1998 { }
|
||||
}
|
||||
#endif
|
||||
|
||||
// Namespace associations for profile mode
|
||||
#if _GLIBCXX_NAMESPACE_ASSOCIATION_PROFILE
|
||||
// Inline namespaces for profile mode
|
||||
#if _GLIBCXX_INLINE_PROFILE
|
||||
namespace std
|
||||
{
|
||||
namespace __norm { }
|
||||
{
|
||||
namespace __norm { }
|
||||
inline namespace __profile { }
|
||||
inline namespace __cxx1998 { }
|
||||
}
|
||||
#endif
|
||||
|
||||
// Namespace associations for versioning mode.
|
||||
#if _GLIBCXX_NAMESPACE_ASSOCIATION_VERSION
|
||||
// Inline namespaces for versioning mode.
|
||||
#if _GLIBCXX_INLINE_VERSION
|
||||
namespace std
|
||||
{
|
||||
inline namespace _6 { }
|
||||
}
|
||||
|
||||
namespace __gnu_cxx
|
||||
{
|
||||
namespace __gnu_cxx
|
||||
{
|
||||
inline namespace _6 { }
|
||||
}
|
||||
|
||||
namespace std
|
||||
{
|
||||
namespace tr1
|
||||
{
|
||||
namespace tr1
|
||||
{
|
||||
inline namespace _6 { }
|
||||
}
|
||||
}
|
||||
|
@ -295,8 +292,8 @@ namespace std
|
|||
// Define if compatibility should be provided for -mlong-double-64
|
||||
#undef _GLIBCXX_LONG_DOUBLE_COMPAT
|
||||
|
||||
// Namespace associations for long double 128 mode.
|
||||
#if defined _GLIBCXX_LONG_DOUBLE_COMPAT && defined __LONG_DOUBLE_128__
|
||||
// Inline namespaces for long double 128 mode.
|
||||
#if defined _GLIBCXX_LONG_DOUBLE_COMPAT && defined __LONG_DOUBLE_128__
|
||||
namespace std
|
||||
{
|
||||
inline namespace __gnu_cxx_ldbl128 { }
|
||||
|
@ -341,11 +338,11 @@ namespace std
|
|||
|
||||
#else // !__cplusplus
|
||||
# define _GLIBCXX_BEGIN_EXTERN_C
|
||||
# define _GLIBCXX_END_EXTERN_C
|
||||
# define _GLIBCXX_END_EXTERN_C
|
||||
# undef _GLIBCXX_BEGIN_NAMESPACE
|
||||
# undef _GLIBCXX_END_NAMESPACE
|
||||
# define _GLIBCXX_BEGIN_NAMESPACE(X)
|
||||
# define _GLIBCXX_END_NAMESPACE
|
||||
# define _GLIBCXX_BEGIN_NAMESPACE(X)
|
||||
# define _GLIBCXX_END_NAMESPACE
|
||||
#endif
|
||||
|
||||
// First includes.
|
||||
|
@ -397,7 +394,7 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
|
|||
// Avoid the use of assert, because we're trying to keep the <cassert>
|
||||
// include out of the mix.
|
||||
inline void
|
||||
__replacement_assert(const char* __file, int __line,
|
||||
__replacement_assert(const char* __file, int __line,
|
||||
const char* __function, const char* __condition)
|
||||
{
|
||||
__builtin_printf("%s:%d: %s: Assertion '%s' failed.\n", __file, __line,
|
||||
|
@ -406,8 +403,8 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
|
|||
}
|
||||
_GLIBCXX_END_NAMESPACE
|
||||
|
||||
#define __glibcxx_assert(_Condition) \
|
||||
do \
|
||||
#define __glibcxx_assert(_Condition) \
|
||||
do \
|
||||
{ \
|
||||
if (! (_Condition)) \
|
||||
std::__replacement_assert(__FILE__, __LINE__, \
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
// File based streams -*- C++ -*-
|
||||
|
||||
// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
|
||||
// 2007, 2008, 2009, 2010
|
||||
// 2007, 2008, 2009, 2010, 2011
|
||||
// Free Software Foundation, Inc.
|
||||
//
|
||||
// This file is part of the GNU ISO C++ Library. This library is free
|
||||
|
@ -38,7 +38,7 @@
|
|||
|
||||
#pragma GCC system_header
|
||||
|
||||
#include <cxxabi-forced.h>
|
||||
#include <bits/cxxabi_forced.h>
|
||||
|
||||
_GLIBCXX_BEGIN_NAMESPACE(std)
|
||||
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
// Function-Based Exception Support -*- C++ -*-
|
||||
|
||||
// Copyright (C) 2001, 2004, 2005, 2008, 2009, 2010
|
||||
// Copyright (C) 2001, 2004, 2005, 2008, 2009, 2010, 2011
|
||||
// Free Software Foundation, Inc.
|
||||
//
|
||||
// This file is part of the GNU ISO C++ Library. This library is free
|
||||
|
@ -38,7 +38,7 @@
|
|||
#define _FUNCTEXCEPT_H 1
|
||||
|
||||
#include <bits/c++config.h>
|
||||
#include <exception_defines.h>
|
||||
#include <bits/exception_defines.h>
|
||||
|
||||
_GLIBCXX_BEGIN_NAMESPACE(std)
|
||||
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
// functional_hash.h header -*- C++ -*-
|
||||
|
||||
// Copyright (C) 2007, 2008, 2009, 2010 Free Software Foundation, Inc.
|
||||
// Copyright (C) 2007, 2008, 2009, 2010, 2011 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
|
||||
|
@ -32,10 +32,10 @@
|
|||
|
||||
#pragma GCC system_header
|
||||
|
||||
#include <bits/c++config.h>
|
||||
#include <bits/hash_bytes.h>
|
||||
|
||||
_GLIBCXX_BEGIN_NAMESPACE(std)
|
||||
|
||||
namespace std
|
||||
{
|
||||
/** @defgroup hashes Hashes
|
||||
* @ingroup functors
|
||||
*
|
||||
|
@ -122,20 +122,6 @@ namespace std
|
|||
|
||||
#undef _Cxx_hashtable_define_trivial_hash
|
||||
|
||||
// Hash function implementation for the nontrivial specialization.
|
||||
// All of them are based on a primitive that hashes a pointer to
|
||||
// a byte array. The actual hash algorithm is not guaranteed to
|
||||
// stay the same from release to release -- it may be updated or
|
||||
// tuned to improve hash quality or speed.
|
||||
size_t
|
||||
_Hash_bytes(const void* __ptr, size_t __len, size_t __seed);
|
||||
|
||||
// A similar hash primitive, using the FNV hash algorithm. This
|
||||
// algorithm is guaranteed to stay the same from release to release.
|
||||
// (although it might not produce the same values on different machines.)
|
||||
size_t
|
||||
_Fnv_hash_bytes(const void* __ptr, size_t __len, size_t __seed);
|
||||
|
||||
struct _Hash_impl
|
||||
{
|
||||
static size_t
|
||||
|
@ -158,7 +144,7 @@ namespace std
|
|||
{
|
||||
static size_t
|
||||
hash(const void* __ptr, size_t __clength,
|
||||
size_t __seed = static_cast<size_t>(2166136261UL))
|
||||
size_t __seed = static_cast<size_t>(2166136261UL))
|
||||
{ return _Fnv_hash_bytes(__ptr, __clength, __seed); }
|
||||
|
||||
template<typename _Tp>
|
||||
|
@ -196,6 +182,7 @@ namespace std
|
|||
hash<long double>::operator()(long double __val) const;
|
||||
|
||||
// @} group hashes
|
||||
}
|
||||
|
||||
_GLIBCXX_END_NAMESPACE
|
||||
|
||||
#endif // _FUNCTIONAL_HASH_H
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
// hashtable.h header -*- C++ -*-
|
||||
|
||||
// Copyright (C) 2007, 2008, 2009, 2010 Free Software Foundation, Inc.
|
||||
// Copyright (C) 2007, 2008, 2009, 2010, 2011 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
|
||||
|
@ -35,39 +35,39 @@
|
|||
|
||||
#include <bits/hashtable_policy.h>
|
||||
|
||||
namespace std
|
||||
{
|
||||
_GLIBCXX_BEGIN_NESTED_NAMESPACE(std, _GLIBCXX_STD_D)
|
||||
|
||||
// Class template _Hashtable, class definition.
|
||||
|
||||
|
||||
// Meaning of class template _Hashtable's template parameters
|
||||
|
||||
|
||||
// _Key and _Value: arbitrary CopyConstructible types.
|
||||
|
||||
|
||||
// _Allocator: an allocator type ([lib.allocator.requirements]) whose
|
||||
// value type is Value. As a conforming extension, we allow for
|
||||
// value type != Value.
|
||||
|
||||
// _ExtractKey: function object that takes a object of type Value
|
||||
// and returns a value of type _Key.
|
||||
|
||||
|
||||
// _Equal: function object that takes two objects of type k and returns
|
||||
// a bool-like value that is true if the two objects are considered equal.
|
||||
|
||||
|
||||
// _H1: the hash function. A unary function object with argument type
|
||||
// Key and result type size_t. Return values should be distributed
|
||||
// over the entire range [0, numeric_limits<size_t>:::max()].
|
||||
|
||||
|
||||
// _H2: the range-hashing function (in the terminology of Tavori and
|
||||
// Dreizin). A binary function object whose argument types and result
|
||||
// type are all size_t. Given arguments r and N, the return value is
|
||||
// in the range [0, N).
|
||||
|
||||
|
||||
// _Hash: the ranged hash function (Tavori and Dreizin). A binary function
|
||||
// whose argument types are _Key and size_t and whose result type is
|
||||
// size_t. Given arguments k and N, the return value is in the range
|
||||
// [0, N). Default: hash(k, N) = h2(h1(k), N). If _Hash is anything other
|
||||
// than the default, _H1 and _H2 are ignored.
|
||||
|
||||
|
||||
// _RehashPolicy: Policy class with three members, all of which govern
|
||||
// the bucket count. _M_next_bkt(n) returns a bucket count no smaller
|
||||
// than n. _M_bkt_for_elements(n) returns a bucket count appropriate
|
||||
|
@ -76,27 +76,27 @@ namespace std
|
|||
// current element count is n_elt, we need to increase the bucket
|
||||
// count. If so, returns make_pair(true, n), where n is the new
|
||||
// bucket count. If not, returns make_pair(false, <anything>).
|
||||
|
||||
|
||||
// ??? Right now it is hard-wired that the number of buckets never
|
||||
// shrinks. Should we allow _RehashPolicy to change that?
|
||||
|
||||
|
||||
// __cache_hash_code: bool. true if we store the value of the hash
|
||||
// function along with the value. This is a time-space tradeoff.
|
||||
// Storing it may improve lookup speed by reducing the number of times
|
||||
// we need to call the Equal function.
|
||||
|
||||
|
||||
// __constant_iterators: bool. true if iterator and const_iterator are
|
||||
// both constant iterator types. This is true for unordered_set and
|
||||
// unordered_multiset, false for unordered_map and unordered_multimap.
|
||||
|
||||
|
||||
// __unique_keys: bool. true if the return value of _Hashtable::count(k)
|
||||
// is always at most one, false if it may be an arbitrary number. This
|
||||
// true for unordered_set and unordered_map, false for unordered_multiset
|
||||
// and unordered_multimap.
|
||||
|
||||
|
||||
template<typename _Key, typename _Value, typename _Allocator,
|
||||
typename _ExtractKey, typename _Equal,
|
||||
typename _H1, typename _H2, typename _Hash,
|
||||
typename _H1, typename _H2, typename _Hash,
|
||||
typename _RehashPolicy,
|
||||
bool __cache_hash_code,
|
||||
bool __constant_iterators,
|
||||
|
@ -145,33 +145,33 @@ namespace std
|
|||
typedef std::ptrdiff_t difference_type;
|
||||
typedef __detail::_Node_iterator<value_type, __constant_iterators,
|
||||
__cache_hash_code>
|
||||
local_iterator;
|
||||
local_iterator;
|
||||
typedef __detail::_Node_const_iterator<value_type,
|
||||
__constant_iterators,
|
||||
__cache_hash_code>
|
||||
const_local_iterator;
|
||||
const_local_iterator;
|
||||
|
||||
typedef __detail::_Hashtable_iterator<value_type, __constant_iterators,
|
||||
__cache_hash_code>
|
||||
iterator;
|
||||
iterator;
|
||||
typedef __detail::_Hashtable_const_iterator<value_type,
|
||||
__constant_iterators,
|
||||
__cache_hash_code>
|
||||
const_iterator;
|
||||
const_iterator;
|
||||
|
||||
template<typename _Key2, typename _Value2, typename _Ex2, bool __unique2,
|
||||
typename _Hashtable2>
|
||||
friend struct __detail::_Map_base;
|
||||
friend struct __detail::_Map_base;
|
||||
|
||||
private:
|
||||
typedef __detail::_Hash_node<_Value, __cache_hash_code> _Node;
|
||||
typedef typename _Allocator::template rebind<_Node>::other
|
||||
_Node_allocator_type;
|
||||
_Node_allocator_type;
|
||||
typedef typename _Allocator::template rebind<_Node*>::other
|
||||
_Bucket_allocator_type;
|
||||
_Bucket_allocator_type;
|
||||
|
||||
typedef typename _Allocator::template rebind<_Value>::other
|
||||
_Value_allocator_type;
|
||||
_Value_allocator_type;
|
||||
|
||||
_Node_allocator_type _M_node_allocator;
|
||||
_Node** _M_buckets;
|
||||
|
@ -181,39 +181,39 @@ namespace std
|
|||
_RehashPolicy _M_rehash_policy;
|
||||
|
||||
template<typename... _Args>
|
||||
_Node*
|
||||
_M_allocate_node(_Args&&... __args);
|
||||
|
||||
_Node*
|
||||
_M_allocate_node(_Args&&... __args);
|
||||
|
||||
void
|
||||
_M_deallocate_node(_Node* __n);
|
||||
|
||||
|
||||
void
|
||||
_M_deallocate_nodes(_Node**, size_type);
|
||||
|
||||
_Node**
|
||||
_M_allocate_buckets(size_type __n);
|
||||
|
||||
|
||||
void
|
||||
_M_deallocate_buckets(_Node**, size_type __n);
|
||||
|
||||
public:
|
||||
public:
|
||||
// Constructor, destructor, assignment, swap
|
||||
_Hashtable(size_type __bucket_hint,
|
||||
const _H1&, const _H2&, const _Hash&,
|
||||
const _Equal&, const _ExtractKey&,
|
||||
const allocator_type&);
|
||||
|
||||
|
||||
template<typename _InputIterator>
|
||||
_Hashtable(_InputIterator __first, _InputIterator __last,
|
||||
_Hashtable(_InputIterator __first, _InputIterator __last,
|
||||
size_type __bucket_hint,
|
||||
const _H1&, const _H2&, const _Hash&,
|
||||
const _H1&, const _H2&, const _Hash&,
|
||||
const _Equal&, const _ExtractKey&,
|
||||
const allocator_type&);
|
||||
|
||||
|
||||
_Hashtable(const _Hashtable&);
|
||||
|
||||
_Hashtable(_Hashtable&&);
|
||||
|
||||
|
||||
_Hashtable&
|
||||
operator=(const _Hashtable& __ht)
|
||||
{
|
||||
|
@ -264,7 +264,7 @@ namespace std
|
|||
size_type
|
||||
size() const
|
||||
{ return _M_element_count; }
|
||||
|
||||
|
||||
bool
|
||||
empty() const
|
||||
{ return size() == 0; }
|
||||
|
@ -288,18 +288,18 @@ namespace std
|
|||
size_type
|
||||
bucket_count() const
|
||||
{ return _M_bucket_count; }
|
||||
|
||||
|
||||
size_type
|
||||
max_bucket_count() const
|
||||
{ return max_size(); }
|
||||
|
||||
|
||||
size_type
|
||||
bucket_size(size_type __n) const
|
||||
{ return std::distance(begin(__n), end(__n)); }
|
||||
|
||||
|
||||
size_type
|
||||
bucket(const key_type& __k) const
|
||||
{
|
||||
{
|
||||
return this->_M_bucket_index(__k, this->_M_hash_code(__k),
|
||||
bucket_count());
|
||||
}
|
||||
|
@ -331,7 +331,7 @@ namespace std
|
|||
|
||||
float
|
||||
load_factor() const
|
||||
{
|
||||
{
|
||||
return static_cast<float>(size()) / static_cast<float>(bucket_count());
|
||||
}
|
||||
|
||||
|
@ -342,8 +342,8 @@ namespace std
|
|||
const _RehashPolicy&
|
||||
__rehash_policy() const
|
||||
{ return _M_rehash_policy; }
|
||||
|
||||
void
|
||||
|
||||
void
|
||||
__rehash_policy(const _RehashPolicy&);
|
||||
|
||||
// Lookup.
|
||||
|
@ -369,28 +369,28 @@ namespace std
|
|||
typename _Hashtable::_Hash_code_type) const;
|
||||
|
||||
template<typename _Arg>
|
||||
iterator
|
||||
_M_insert_bucket(_Arg&&, size_type,
|
||||
iterator
|
||||
_M_insert_bucket(_Arg&&, size_type,
|
||||
typename _Hashtable::_Hash_code_type);
|
||||
|
||||
template<typename _Arg>
|
||||
std::pair<iterator, bool>
|
||||
_M_insert(_Arg&&, std::true_type);
|
||||
std::pair<iterator, bool>
|
||||
_M_insert(_Arg&&, std::true_type);
|
||||
|
||||
template<typename _Arg>
|
||||
iterator
|
||||
_M_insert(_Arg&&, std::false_type);
|
||||
iterator
|
||||
_M_insert(_Arg&&, std::false_type);
|
||||
|
||||
typedef typename std::conditional<__unique_keys,
|
||||
std::pair<iterator, bool>,
|
||||
iterator>::type
|
||||
_Insert_Return_Type;
|
||||
_Insert_Return_Type;
|
||||
|
||||
typedef typename std::conditional<__unique_keys,
|
||||
std::_Select1st<_Insert_Return_Type>,
|
||||
std::_Identity<_Insert_Return_Type>
|
||||
>::type
|
||||
_Insert_Conv_Type;
|
||||
>::type
|
||||
_Insert_Conv_Type;
|
||||
|
||||
public:
|
||||
// Insert and erase
|
||||
|
@ -415,22 +415,22 @@ namespace std
|
|||
std::enable_if<!__constant_iterators
|
||||
&& std::is_convertible<_Pair,
|
||||
value_type>::value>::type>
|
||||
_Insert_Return_Type
|
||||
insert(_Pair&& __v)
|
||||
{ return _M_insert(std::forward<_Pair>(__v),
|
||||
_Insert_Return_Type
|
||||
insert(_Pair&& __v)
|
||||
{ return _M_insert(std::forward<_Pair>(__v),
|
||||
std::integral_constant<bool, __unique_keys>()); }
|
||||
|
||||
template<typename _Pair, typename = typename
|
||||
std::enable_if<!__constant_iterators
|
||||
&& std::is_convertible<_Pair,
|
||||
value_type>::value>::type>
|
||||
iterator
|
||||
insert(const_iterator, _Pair&& __v)
|
||||
{ return _Insert_Conv_Type()(insert(std::forward<_Pair>(__v))); }
|
||||
iterator
|
||||
insert(const_iterator, _Pair&& __v)
|
||||
{ return _Insert_Conv_Type()(insert(std::forward<_Pair>(__v))); }
|
||||
|
||||
template<typename _InputIterator>
|
||||
void
|
||||
insert(_InputIterator __first, _InputIterator __last);
|
||||
void
|
||||
insert(_InputIterator __first, _InputIterator __last);
|
||||
|
||||
void
|
||||
insert(initializer_list<value_type> __l)
|
||||
|
@ -461,7 +461,7 @@ namespace std
|
|||
|
||||
|
||||
// Definitions of class template _Hashtable's out-of-line member functions.
|
||||
template<typename _Key, typename _Value,
|
||||
template<typename _Key, typename _Value,
|
||||
typename _Allocator, typename _ExtractKey, typename _Equal,
|
||||
typename _H1, typename _H2, typename _Hash, typename _RehashPolicy,
|
||||
bool __chc, bool __cit, bool __uk>
|
||||
|
@ -487,7 +487,7 @@ namespace std
|
|||
}
|
||||
}
|
||||
|
||||
template<typename _Key, typename _Value,
|
||||
template<typename _Key, typename _Value,
|
||||
typename _Allocator, typename _ExtractKey, typename _Equal,
|
||||
typename _H1, typename _H2, typename _Hash, typename _RehashPolicy,
|
||||
bool __chc, bool __cit, bool __uk>
|
||||
|
@ -500,7 +500,7 @@ namespace std
|
|||
_M_node_allocator.deallocate(__n, 1);
|
||||
}
|
||||
|
||||
template<typename _Key, typename _Value,
|
||||
template<typename _Key, typename _Value,
|
||||
typename _Allocator, typename _ExtractKey, typename _Equal,
|
||||
typename _H1, typename _H2, typename _Hash, typename _RehashPolicy,
|
||||
bool __chc, bool __cit, bool __uk>
|
||||
|
@ -522,7 +522,7 @@ namespace std
|
|||
}
|
||||
}
|
||||
|
||||
template<typename _Key, typename _Value,
|
||||
template<typename _Key, typename _Value,
|
||||
typename _Allocator, typename _ExtractKey, typename _Equal,
|
||||
typename _H1, typename _H2, typename _Hash, typename _RehashPolicy,
|
||||
bool __chc, bool __cit, bool __uk>
|
||||
|
@ -543,7 +543,7 @@ namespace std
|
|||
return __p;
|
||||
}
|
||||
|
||||
template<typename _Key, typename _Value,
|
||||
template<typename _Key, typename _Value,
|
||||
typename _Allocator, typename _ExtractKey, typename _Equal,
|
||||
typename _H1, typename _H2, typename _Hash, typename _RehashPolicy,
|
||||
bool __chc, bool __cit, bool __uk>
|
||||
|
@ -556,7 +556,7 @@ namespace std
|
|||
__alloc.deallocate(__p, __n + 1);
|
||||
}
|
||||
|
||||
template<typename _Key, typename _Value,
|
||||
template<typename _Key, typename _Value,
|
||||
typename _Allocator, typename _ExtractKey, typename _Equal,
|
||||
typename _H1, typename _H2, typename _Hash, typename _RehashPolicy,
|
||||
bool __chc, bool __cit, bool __uk>
|
||||
|
@ -581,7 +581,7 @@ namespace std
|
|||
_M_begin_bucket_index = _M_bucket_count;
|
||||
}
|
||||
|
||||
template<typename _Key, typename _Value,
|
||||
template<typename _Key, typename _Value,
|
||||
typename _Allocator, typename _ExtractKey, typename _Equal,
|
||||
typename _H1, typename _H2, typename _Hash, typename _RehashPolicy,
|
||||
bool __chc, bool __cit, bool __uk>
|
||||
|
@ -622,8 +622,8 @@ namespace std
|
|||
__throw_exception_again;
|
||||
}
|
||||
}
|
||||
|
||||
template<typename _Key, typename _Value,
|
||||
|
||||
template<typename _Key, typename _Value,
|
||||
typename _Allocator, typename _ExtractKey, typename _Equal,
|
||||
typename _H1, typename _H2, typename _Hash, typename _RehashPolicy,
|
||||
bool __chc, bool __cit, bool __uk>
|
||||
|
@ -664,7 +664,7 @@ namespace std
|
|||
}
|
||||
}
|
||||
|
||||
template<typename _Key, typename _Value,
|
||||
template<typename _Key, typename _Value,
|
||||
typename _Allocator, typename _ExtractKey, typename _Equal,
|
||||
typename _H1, typename _H2, typename _Hash, typename _RehashPolicy,
|
||||
bool __chc, bool __cit, bool __uk>
|
||||
|
@ -690,7 +690,7 @@ namespace std
|
|||
__ht._M_rehash_policy = _RehashPolicy();
|
||||
}
|
||||
|
||||
template<typename _Key, typename _Value,
|
||||
template<typename _Key, typename _Value,
|
||||
typename _Allocator, typename _ExtractKey, typename _Equal,
|
||||
typename _H1, typename _H2, typename _Hash, typename _RehashPolicy,
|
||||
bool __chc, bool __cit, bool __uk>
|
||||
|
@ -702,7 +702,7 @@ namespace std
|
|||
_M_deallocate_buckets(_M_buckets, _M_bucket_count);
|
||||
}
|
||||
|
||||
template<typename _Key, typename _Value,
|
||||
template<typename _Key, typename _Value,
|
||||
typename _Allocator, typename _ExtractKey, typename _Equal,
|
||||
typename _H1, typename _H2, typename _Hash, typename _RehashPolicy,
|
||||
bool __chc, bool __cit, bool __uk>
|
||||
|
@ -729,7 +729,7 @@ namespace std
|
|||
std::swap(_M_element_count, __x._M_element_count);
|
||||
}
|
||||
|
||||
template<typename _Key, typename _Value,
|
||||
template<typename _Key, typename _Value,
|
||||
typename _Allocator, typename _ExtractKey, typename _Equal,
|
||||
typename _H1, typename _H2, typename _Hash, typename _RehashPolicy,
|
||||
bool __chc, bool __cit, bool __uk>
|
||||
|
@ -744,7 +744,7 @@ namespace std
|
|||
_M_rehash(__n_bkt);
|
||||
}
|
||||
|
||||
template<typename _Key, typename _Value,
|
||||
template<typename _Key, typename _Value,
|
||||
typename _Allocator, typename _ExtractKey, typename _Equal,
|
||||
typename _H1, typename _H2, typename _Hash, typename _RehashPolicy,
|
||||
bool __chc, bool __cit, bool __uk>
|
||||
|
@ -761,7 +761,7 @@ namespace std
|
|||
return __p ? iterator(__p, _M_buckets + __n) : this->end();
|
||||
}
|
||||
|
||||
template<typename _Key, typename _Value,
|
||||
template<typename _Key, typename _Value,
|
||||
typename _Allocator, typename _ExtractKey, typename _Equal,
|
||||
typename _H1, typename _H2, typename _Hash, typename _RehashPolicy,
|
||||
bool __chc, bool __cit, bool __uk>
|
||||
|
@ -778,7 +778,7 @@ namespace std
|
|||
return __p ? const_iterator(__p, _M_buckets + __n) : this->end();
|
||||
}
|
||||
|
||||
template<typename _Key, typename _Value,
|
||||
template<typename _Key, typename _Value,
|
||||
typename _Allocator, typename _ExtractKey, typename _Equal,
|
||||
typename _H1, typename _H2, typename _Hash, typename _RehashPolicy,
|
||||
bool __chc, bool __cit, bool __uk>
|
||||
|
@ -798,7 +798,7 @@ namespace std
|
|||
return __result;
|
||||
}
|
||||
|
||||
template<typename _Key, typename _Value,
|
||||
template<typename _Key, typename _Value,
|
||||
typename _Allocator, typename _ExtractKey, typename _Equal,
|
||||
typename _H1, typename _H2, typename _Hash, typename _RehashPolicy,
|
||||
bool __chc, bool __cit, bool __uk>
|
||||
|
@ -818,7 +818,7 @@ namespace std
|
|||
std::size_t __n = this->_M_bucket_index(__k, __code, _M_bucket_count);
|
||||
_Node** __head = _M_buckets + __n;
|
||||
_Node* __p = _M_find_node(*__head, __k, __code);
|
||||
|
||||
|
||||
if (__p)
|
||||
{
|
||||
_Node* __p1 = __p->_M_next;
|
||||
|
@ -836,7 +836,7 @@ namespace std
|
|||
return std::make_pair(this->end(), this->end());
|
||||
}
|
||||
|
||||
template<typename _Key, typename _Value,
|
||||
template<typename _Key, typename _Value,
|
||||
typename _Allocator, typename _ExtractKey, typename _Equal,
|
||||
typename _H1, typename _H2, typename _Hash, typename _RehashPolicy,
|
||||
bool __chc, bool __cit, bool __uk>
|
||||
|
@ -876,13 +876,13 @@ namespace std
|
|||
|
||||
// Find the node whose key compares equal to k, beginning the search
|
||||
// at p (usually the head of a bucket). Return nil if no node is found.
|
||||
template<typename _Key, typename _Value,
|
||||
template<typename _Key, typename _Value,
|
||||
typename _Allocator, typename _ExtractKey, typename _Equal,
|
||||
typename _H1, typename _H2, typename _Hash, typename _RehashPolicy,
|
||||
bool __chc, bool __cit, bool __uk>
|
||||
typename _Hashtable<_Key, _Value, _Allocator, _ExtractKey,
|
||||
_Equal, _H1, _H2, _Hash, _RehashPolicy,
|
||||
__chc, __cit, __uk>::_Node*
|
||||
__chc, __cit, __uk>::_Node*
|
||||
_Hashtable<_Key, _Value, _Allocator, _ExtractKey, _Equal,
|
||||
_H1, _H2, _Hash, _RehashPolicy, __chc, __cit, __uk>::
|
||||
_M_find_node(_Node* __p, const key_type& __k,
|
||||
|
@ -895,7 +895,7 @@ namespace std
|
|||
}
|
||||
|
||||
// Insert v in bucket n (assumes no element with its key already present).
|
||||
template<typename _Key, typename _Value,
|
||||
template<typename _Key, typename _Value,
|
||||
typename _Allocator, typename _ExtractKey, typename _Equal,
|
||||
typename _H1, typename _H2, typename _Hash, typename _RehashPolicy,
|
||||
bool __chc, bool __cit, bool __uk>
|
||||
|
@ -943,7 +943,7 @@ namespace std
|
|||
}
|
||||
|
||||
// Insert v if no element with its key is already present.
|
||||
template<typename _Key, typename _Value,
|
||||
template<typename _Key, typename _Value,
|
||||
typename _Allocator, typename _ExtractKey, typename _Equal,
|
||||
typename _H1, typename _H2, typename _Hash, typename _RehashPolicy,
|
||||
bool __chc, bool __cit, bool __uk>
|
||||
|
@ -967,7 +967,7 @@ namespace std
|
|||
}
|
||||
|
||||
// Insert v unconditionally.
|
||||
template<typename _Key, typename _Value,
|
||||
template<typename _Key, typename _Value,
|
||||
typename _Allocator, typename _ExtractKey, typename _Equal,
|
||||
typename _H1, typename _H2, typename _Hash, typename _RehashPolicy,
|
||||
bool __chc, bool __cit, bool __uk>
|
||||
|
@ -984,7 +984,7 @@ namespace std
|
|||
_M_element_count, 1);
|
||||
if (__do_rehash.first)
|
||||
_M_rehash(__do_rehash.second);
|
||||
|
||||
|
||||
const key_type& __k = this->_M_extract(__v);
|
||||
typename _Hashtable::_Hash_code_type __code = this->_M_hash_code(__k);
|
||||
size_type __n = this->_M_bucket_index(__k, __code, _M_bucket_count);
|
||||
|
@ -993,7 +993,7 @@ namespace std
|
|||
_Node* __prev = _M_find_node(_M_buckets[__n], __k, __code);
|
||||
_Node* __new_node = _M_allocate_node(std::forward<_Arg>(__v));
|
||||
|
||||
if (__prev)
|
||||
if (__prev)
|
||||
{
|
||||
__new_node->_M_next = __prev->_M_next;
|
||||
__prev->_M_next = __new_node;
|
||||
|
@ -1005,18 +1005,18 @@ namespace std
|
|||
if (__n < _M_begin_bucket_index)
|
||||
_M_begin_bucket_index = __n;
|
||||
}
|
||||
this->_M_store_code(__new_node, __code);
|
||||
this->_M_store_code(__new_node, __code);
|
||||
|
||||
++_M_element_count;
|
||||
return iterator(__new_node, _M_buckets + __n);
|
||||
++_M_element_count;
|
||||
return iterator(__new_node, _M_buckets + __n);
|
||||
}
|
||||
|
||||
template<typename _Key, typename _Value,
|
||||
template<typename _Key, typename _Value,
|
||||
typename _Allocator, typename _ExtractKey, typename _Equal,
|
||||
typename _H1, typename _H2, typename _Hash, typename _RehashPolicy,
|
||||
bool __chc, bool __cit, bool __uk>
|
||||
template<typename _InputIterator>
|
||||
void
|
||||
void
|
||||
_Hashtable<_Key, _Value, _Allocator, _ExtractKey, _Equal,
|
||||
_H1, _H2, _Hash, _RehashPolicy, __chc, __cit, __uk>::
|
||||
insert(_InputIterator __first, _InputIterator __last)
|
||||
|
@ -1032,7 +1032,7 @@ namespace std
|
|||
this->insert(*__first);
|
||||
}
|
||||
|
||||
template<typename _Key, typename _Value,
|
||||
template<typename _Key, typename _Value,
|
||||
typename _Allocator, typename _ExtractKey, typename _Equal,
|
||||
typename _H1, typename _H2, typename _Hash, typename _RehashPolicy,
|
||||
bool __chc, bool __cit, bool __uk>
|
||||
|
@ -1073,7 +1073,7 @@ namespace std
|
|||
return __result;
|
||||
}
|
||||
|
||||
template<typename _Key, typename _Value,
|
||||
template<typename _Key, typename _Value,
|
||||
typename _Allocator, typename _ExtractKey, typename _Equal,
|
||||
typename _H1, typename _H2, typename _Hash, typename _RehashPolicy,
|
||||
bool __chc, bool __cit, bool __uk>
|
||||
|
@ -1087,7 +1087,7 @@ namespace std
|
|||
typename _Hashtable::_Hash_code_type __code = this->_M_hash_code(__k);
|
||||
std::size_t __n = this->_M_bucket_index(__k, __code, _M_bucket_count);
|
||||
size_type __result = 0;
|
||||
|
||||
|
||||
_Node** __slot = _M_buckets + __n;
|
||||
while (*__slot && !this->_M_compare(__k, __code, *__slot))
|
||||
__slot = &((*__slot)->_M_next);
|
||||
|
@ -1101,8 +1101,8 @@ namespace std
|
|||
if (std::__addressof(this->_M_extract((*__slot)->_M_v))
|
||||
!= std::__addressof(__k))
|
||||
{
|
||||
_Node* __p = *__slot;
|
||||
*__slot = __p->_M_next;
|
||||
_Node* __p = *__slot;
|
||||
*__slot = __p->_M_next;
|
||||
_M_deallocate_node(__p);
|
||||
--_M_element_count;
|
||||
++__result;
|
||||
|
@ -1143,7 +1143,7 @@ namespace std
|
|||
// ??? This could be optimized by taking advantage of the bucket
|
||||
// structure, but it's not clear that it's worth doing. It probably
|
||||
// wouldn't even be an optimization unless the load factor is large.
|
||||
template<typename _Key, typename _Value,
|
||||
template<typename _Key, typename _Value,
|
||||
typename _Allocator, typename _ExtractKey, typename _Equal,
|
||||
typename _H1, typename _H2, typename _Hash, typename _RehashPolicy,
|
||||
bool __chc, bool __cit, bool __uk>
|
||||
|
@ -1159,7 +1159,7 @@ namespace std
|
|||
return iterator(__last._M_cur_node, __last._M_cur_bucket);
|
||||
}
|
||||
|
||||
template<typename _Key, typename _Value,
|
||||
template<typename _Key, typename _Value,
|
||||
typename _Allocator, typename _ExtractKey, typename _Equal,
|
||||
typename _H1, typename _H2, typename _Hash, typename _RehashPolicy,
|
||||
bool __chc, bool __cit, bool __uk>
|
||||
|
@ -1172,8 +1172,8 @@ namespace std
|
|||
_M_element_count = 0;
|
||||
_M_begin_bucket_index = _M_bucket_count;
|
||||
}
|
||||
|
||||
template<typename _Key, typename _Value,
|
||||
|
||||
template<typename _Key, typename _Value,
|
||||
typename _Allocator, typename _ExtractKey, typename _Equal,
|
||||
typename _H1, typename _H2, typename _Hash, typename _RehashPolicy,
|
||||
bool __chc, bool __cit, bool __uk>
|
||||
|
@ -1187,7 +1187,7 @@ namespace std
|
|||
+ 1)));
|
||||
}
|
||||
|
||||
template<typename _Key, typename _Value,
|
||||
template<typename _Key, typename _Value,
|
||||
typename _Allocator, typename _ExtractKey, typename _Equal,
|
||||
typename _H1, typename _H2, typename _Hash, typename _RehashPolicy,
|
||||
bool __chc, bool __cit, bool __uk>
|
||||
|
@ -1228,6 +1228,7 @@ namespace std
|
|||
__throw_exception_again;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
_GLIBCXX_END_NESTED_NAMESPACE // namespace std
|
||||
|
||||
#endif // _HASHTABLE_H
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
// Internal policy header for unordered_set and unordered_map -*- C++ -*-
|
||||
|
||||
// Copyright (C) 2010 Free Software Foundation, Inc.
|
||||
// Copyright (C) 2010, 2011 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
|
||||
|
@ -24,15 +24,15 @@
|
|||
|
||||
/** @file bits/hashtable_policy.h
|
||||
* This is an internal header file, included by other library headers.
|
||||
* Do not attempt to use it directly.
|
||||
* Do not attempt to use it directly.
|
||||
* @headername{unordered_map,unordered_set}
|
||||
*/
|
||||
|
||||
#ifndef _HASHTABLE_POLICY_H
|
||||
#define _HASHTABLE_POLICY_H 1
|
||||
|
||||
namespace std
|
||||
{
|
||||
_GLIBCXX_BEGIN_NESTED_NAMESPACE(std, _GLIBCXX_STD_D)
|
||||
|
||||
namespace __detail
|
||||
{
|
||||
// Helper function: return distance(first, last) for forward
|
||||
|
@ -59,7 +59,7 @@ namespace __detail
|
|||
|
||||
// Auxiliary types used for all instantiations of _Hashtable: nodes
|
||||
// and iterators.
|
||||
|
||||
|
||||
// Nodes, used to wrap elements stored in the hash table. A policy
|
||||
// template parameter of class template _Hashtable controls whether
|
||||
// nodes also store a hash code. In some cases (e.g. strings) this
|
||||
|
@ -75,7 +75,7 @@ namespace __detail
|
|||
_Hash_node* _M_next;
|
||||
|
||||
template<typename... _Args>
|
||||
_Hash_node(_Args&&... __args)
|
||||
_Hash_node(_Args&&... __args)
|
||||
: _M_v(std::forward<_Args>(__args)...),
|
||||
_M_hash_code(), _M_next() { }
|
||||
};
|
||||
|
@ -87,7 +87,7 @@ namespace __detail
|
|||
_Hash_node* _M_next;
|
||||
|
||||
template<typename... _Args>
|
||||
_Hash_node(_Args&&... __args)
|
||||
_Hash_node(_Args&&... __args)
|
||||
: _M_v(std::forward<_Args>(__args)...),
|
||||
_M_next() { }
|
||||
};
|
||||
|
@ -99,7 +99,7 @@ namespace __detail
|
|||
{
|
||||
_Node_iterator_base(_Hash_node<_Value, __cache>* __p)
|
||||
: _M_cur(__p) { }
|
||||
|
||||
|
||||
void
|
||||
_M_incr()
|
||||
{ _M_cur = _M_cur->_M_next; }
|
||||
|
@ -126,10 +126,10 @@ namespace __detail
|
|||
typedef _Value value_type;
|
||||
typedef typename std::conditional<__constant_iterators,
|
||||
const _Value*, _Value*>::type
|
||||
pointer;
|
||||
pointer;
|
||||
typedef typename std::conditional<__constant_iterators,
|
||||
const _Value&, _Value&>::type
|
||||
reference;
|
||||
reference;
|
||||
typedef std::ptrdiff_t difference_type;
|
||||
typedef std::forward_iterator_tag iterator_category;
|
||||
|
||||
|
@ -143,21 +143,21 @@ namespace __detail
|
|||
reference
|
||||
operator*() const
|
||||
{ return this->_M_cur->_M_v; }
|
||||
|
||||
|
||||
pointer
|
||||
operator->() const
|
||||
{ return std::__addressof(this->_M_cur->_M_v); }
|
||||
|
||||
_Node_iterator&
|
||||
operator++()
|
||||
{
|
||||
{
|
||||
this->_M_incr();
|
||||
return *this;
|
||||
return *this;
|
||||
}
|
||||
|
||||
|
||||
_Node_iterator
|
||||
operator++(int)
|
||||
{
|
||||
{
|
||||
_Node_iterator __tmp(*this);
|
||||
this->_M_incr();
|
||||
return __tmp;
|
||||
|
@ -188,21 +188,21 @@ namespace __detail
|
|||
reference
|
||||
operator*() const
|
||||
{ return this->_M_cur->_M_v; }
|
||||
|
||||
|
||||
pointer
|
||||
operator->() const
|
||||
{ return std::__addressof(this->_M_cur->_M_v); }
|
||||
|
||||
_Node_const_iterator&
|
||||
operator++()
|
||||
{
|
||||
{
|
||||
this->_M_incr();
|
||||
return *this;
|
||||
return *this;
|
||||
}
|
||||
|
||||
|
||||
_Node_const_iterator
|
||||
operator++(int)
|
||||
{
|
||||
{
|
||||
_Node_const_iterator __tmp(*this);
|
||||
this->_M_incr();
|
||||
return __tmp;
|
||||
|
@ -265,10 +265,10 @@ namespace __detail
|
|||
typedef _Value value_type;
|
||||
typedef typename std::conditional<__constant_iterators,
|
||||
const _Value*, _Value*>::type
|
||||
pointer;
|
||||
pointer;
|
||||
typedef typename std::conditional<__constant_iterators,
|
||||
const _Value&, _Value&>::type
|
||||
reference;
|
||||
reference;
|
||||
typedef std::ptrdiff_t difference_type;
|
||||
typedef std::forward_iterator_tag iterator_category;
|
||||
|
||||
|
@ -286,21 +286,21 @@ namespace __detail
|
|||
reference
|
||||
operator*() const
|
||||
{ return this->_M_cur_node->_M_v; }
|
||||
|
||||
|
||||
pointer
|
||||
operator->() const
|
||||
{ return std::__addressof(this->_M_cur_node->_M_v); }
|
||||
|
||||
_Hashtable_iterator&
|
||||
operator++()
|
||||
{
|
||||
{
|
||||
this->_M_incr();
|
||||
return *this;
|
||||
}
|
||||
|
||||
|
||||
_Hashtable_iterator
|
||||
operator++(int)
|
||||
{
|
||||
{
|
||||
_Hashtable_iterator __tmp(*this);
|
||||
this->_M_incr();
|
||||
return __tmp;
|
||||
|
@ -336,21 +336,21 @@ namespace __detail
|
|||
reference
|
||||
operator*() const
|
||||
{ return this->_M_cur_node->_M_v; }
|
||||
|
||||
|
||||
pointer
|
||||
operator->() const
|
||||
{ return std::__addressof(this->_M_cur_node->_M_v); }
|
||||
|
||||
_Hashtable_const_iterator&
|
||||
operator++()
|
||||
{
|
||||
{
|
||||
this->_M_incr();
|
||||
return *this;
|
||||
}
|
||||
|
||||
|
||||
_Hashtable_const_iterator
|
||||
operator++(int)
|
||||
{
|
||||
{
|
||||
_Hashtable_const_iterator __tmp(*this);
|
||||
this->_M_incr();
|
||||
return __tmp;
|
||||
|
@ -390,16 +390,16 @@ namespace __detail
|
|||
|
||||
float
|
||||
max_load_factor() const
|
||||
{ return _M_max_load_factor; }
|
||||
{ return _M_max_load_factor; }
|
||||
|
||||
// Return a bucket size no smaller than n.
|
||||
std::size_t
|
||||
_M_next_bkt(std::size_t __n) const;
|
||||
|
||||
|
||||
// Return a bucket count appropriate for n elements
|
||||
std::size_t
|
||||
_M_bkt_for_elements(std::size_t __n) const;
|
||||
|
||||
|
||||
// __n_bkt is current bucket count, __n_elt is current element count,
|
||||
// and __n_ins is number of elements to be inserted. Do we need to
|
||||
// increase bucket count? If so, return make_pair(true, n), where n
|
||||
|
@ -418,7 +418,7 @@ namespace __detail
|
|||
extern const unsigned long __prime_list[];
|
||||
|
||||
// XXX This is a hack. There's no good reason for any of
|
||||
// _Prime_rehash_policy's member functions to be inline.
|
||||
// _Prime_rehash_policy's member functions to be inline.
|
||||
|
||||
// Return a prime no smaller than n.
|
||||
inline std::size_t
|
||||
|
@ -427,7 +427,7 @@ namespace __detail
|
|||
{
|
||||
const unsigned long* __p = std::lower_bound(__prime_list, __prime_list
|
||||
+ _S_n_primes, __n);
|
||||
_M_next_resize =
|
||||
_M_next_resize =
|
||||
static_cast<std::size_t>(__builtin_ceil(*__p * _M_max_load_factor));
|
||||
return *__p;
|
||||
}
|
||||
|
@ -448,7 +448,7 @@ namespace __detail
|
|||
|
||||
// Finds the smallest prime p such that alpha p > __n_elt + __n_ins.
|
||||
// If p > __n_bkt, return make_pair(true, p); otherwise return
|
||||
// make_pair(false, 0). In principle this isn't very different from
|
||||
// make_pair(false, 0). In principle this isn't very different from
|
||||
// _M_bkt_for_elements.
|
||||
|
||||
// The only tricky part is that we're caching the element count at
|
||||
|
@ -474,7 +474,7 @@ namespace __detail
|
|||
(__builtin_ceil(*__p * _M_max_load_factor));
|
||||
return std::make_pair(true, *__p);
|
||||
}
|
||||
else
|
||||
else
|
||||
{
|
||||
_M_next_resize = static_cast<std::size_t>
|
||||
(__builtin_ceil(__n_bkt * _M_max_load_factor));
|
||||
|
@ -642,10 +642,10 @@ namespace __detail
|
|||
// we have a dummy type as placeholder.
|
||||
// (2) Whether or not we cache hash codes. Caching hash codes is
|
||||
// meaningless if we have a ranged hash function.
|
||||
// We also put the key extraction and equality comparison function
|
||||
// We also put the key extraction and equality comparison function
|
||||
// objects here, for convenience.
|
||||
|
||||
// Primary template: unused except as a hook for specializations.
|
||||
|
||||
// Primary template: unused except as a hook for specializations.
|
||||
template<typename _Key, typename _Value,
|
||||
typename _ExtractKey, typename _Equal,
|
||||
typename _H1, typename _H2, typename _Hash,
|
||||
|
@ -666,11 +666,11 @@ namespace __detail
|
|||
: _M_extract(__ex), _M_eq(__eq), _M_ranged_hash(__h) { }
|
||||
|
||||
typedef void* _Hash_code_type;
|
||||
|
||||
|
||||
_Hash_code_type
|
||||
_M_hash_code(const _Key& __key) const
|
||||
{ return 0; }
|
||||
|
||||
|
||||
std::size_t
|
||||
_M_bucket_index(const _Key& __k, _Hash_code_type,
|
||||
std::size_t __n) const
|
||||
|
@ -680,7 +680,7 @@ namespace __detail
|
|||
_M_bucket_index(const _Hash_node<_Value, false>* __p,
|
||||
std::size_t __n) const
|
||||
{ return _M_ranged_hash(_M_extract(__p->_M_v), __n); }
|
||||
|
||||
|
||||
bool
|
||||
_M_compare(const _Key& __k, _Hash_code_type,
|
||||
_Hash_node<_Value, false>* __n) const
|
||||
|
@ -694,7 +694,7 @@ namespace __detail
|
|||
_M_copy_code(_Hash_node<_Value, false>*,
|
||||
const _Hash_node<_Value, false>*) const
|
||||
{ }
|
||||
|
||||
|
||||
void
|
||||
_M_swap(_Hash_code_base& __x)
|
||||
{
|
||||
|
@ -712,11 +712,11 @@ namespace __detail
|
|||
|
||||
// No specialization for ranged hash function while caching hash codes.
|
||||
// That combination is meaningless, and trying to do it is an error.
|
||||
|
||||
|
||||
|
||||
|
||||
// Specialization: ranged hash function, cache hash codes. This
|
||||
// combination is meaningless, so we provide only a declaration
|
||||
// and no definition.
|
||||
// and no definition.
|
||||
template<typename _Key, typename _Value,
|
||||
typename _ExtractKey, typename _Equal,
|
||||
typename _H1, typename _H2, typename _Hash>
|
||||
|
@ -725,7 +725,7 @@ namespace __detail
|
|||
|
||||
// Specialization: hash function and range-hashing function, no
|
||||
// caching of hash codes. H is provided but ignored. Provides
|
||||
// typedef and accessor required by TR1.
|
||||
// typedef and accessor required by TR1.
|
||||
template<typename _Key, typename _Value,
|
||||
typename _ExtractKey, typename _Equal,
|
||||
typename _H1, typename _H2>
|
||||
|
@ -749,7 +749,7 @@ namespace __detail
|
|||
_Hash_code_type
|
||||
_M_hash_code(const _Key& __k) const
|
||||
{ return _M_h1(__k); }
|
||||
|
||||
|
||||
std::size_t
|
||||
_M_bucket_index(const _Key&, _Hash_code_type __c,
|
||||
std::size_t __n) const
|
||||
|
@ -790,7 +790,7 @@ namespace __detail
|
|||
_H2 _M_h2;
|
||||
};
|
||||
|
||||
// Specialization: hash function and range-hashing function,
|
||||
// Specialization: hash function and range-hashing function,
|
||||
// caching hash codes. H is provided but ignored. Provides
|
||||
// typedef and accessor required by TR1.
|
||||
template<typename _Key, typename _Value,
|
||||
|
@ -800,7 +800,7 @@ namespace __detail
|
|||
_Default_ranged_hash, true>
|
||||
{
|
||||
typedef _H1 hasher;
|
||||
|
||||
|
||||
hasher
|
||||
hash_function() const
|
||||
{ return _M_h1; }
|
||||
|
@ -812,11 +812,11 @@ namespace __detail
|
|||
: _M_extract(__ex), _M_eq(__eq), _M_h1(__h1), _M_h2(__h2) { }
|
||||
|
||||
typedef std::size_t _Hash_code_type;
|
||||
|
||||
|
||||
_Hash_code_type
|
||||
_M_hash_code(const _Key& __k) const
|
||||
{ return _M_h1(__k); }
|
||||
|
||||
|
||||
std::size_t
|
||||
_M_bucket_index(const _Key&, _Hash_code_type __c,
|
||||
std::size_t __n) const
|
||||
|
@ -849,7 +849,7 @@ namespace __detail
|
|||
std::swap(_M_h1, __x._M_h1);
|
||||
std::swap(_M_h2, __x._M_h2);
|
||||
}
|
||||
|
||||
|
||||
protected:
|
||||
_ExtractKey _M_extract;
|
||||
_Equal _M_eq;
|
||||
|
@ -898,8 +898,8 @@ namespace __detail
|
|||
|
||||
private:
|
||||
template<typename _Uiterator>
|
||||
static bool
|
||||
_S_is_permutation(_Uiterator, _Uiterator, _Uiterator);
|
||||
static bool
|
||||
_S_is_permutation(_Uiterator, _Uiterator, _Uiterator);
|
||||
};
|
||||
|
||||
// See std::is_permutation in N3068.
|
||||
|
@ -978,6 +978,7 @@ namespace __detail
|
|||
return true;
|
||||
}
|
||||
} // namespace __detail
|
||||
}
|
||||
|
||||
_GLIBCXX_END_NESTED_NAMESPACE // namespace std
|
||||
|
||||
#endif // _HASHTABLE_POLICY_H
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
// istream classes -*- C++ -*-
|
||||
|
||||
// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,
|
||||
// 2006, 2007, 2008, 2009, 2010
|
||||
// 2006, 2007, 2008, 2009, 2010, 2011
|
||||
// Free Software Foundation, Inc.
|
||||
//
|
||||
// This file is part of the GNU ISO C++ Library. This library is free
|
||||
|
@ -38,7 +38,7 @@
|
|||
|
||||
#pragma GCC system_header
|
||||
|
||||
#include <cxxabi-forced.h>
|
||||
#include <bits/cxxabi_forced.h>
|
||||
|
||||
_GLIBCXX_BEGIN_NAMESPACE(std)
|
||||
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
// ostream classes -*- C++ -*-
|
||||
|
||||
// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,
|
||||
// 2006, 2007, 2008, 2009, 2010
|
||||
// 2006, 2007, 2008, 2009, 2010, 2011
|
||||
// Free Software Foundation, Inc.
|
||||
//
|
||||
// This file is part of the GNU ISO C++ Library. This library is free
|
||||
|
@ -38,7 +38,7 @@
|
|||
|
||||
#pragma GCC system_header
|
||||
|
||||
#include <cxxabi-forced.h>
|
||||
#include <bits/cxxabi_forced.h>
|
||||
|
||||
_GLIBCXX_BEGIN_NAMESPACE(std)
|
||||
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
// Helpers for ostream inserters -*- C++ -*-
|
||||
|
||||
// Copyright (C) 2007, 2008, 2009, 2010 Free Software Foundation, Inc.
|
||||
// Copyright (C) 2007, 2008, 2009, 2010, 2011 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
|
||||
|
@ -33,7 +33,7 @@
|
|||
#pragma GCC system_header
|
||||
|
||||
#include <iosfwd>
|
||||
#include <cxxabi-forced.h>
|
||||
#include <bits/cxxabi_forced.h>
|
||||
|
||||
_GLIBCXX_BEGIN_NAMESPACE(std)
|
||||
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
// Versatile string -*- C++ -*-
|
||||
|
||||
// Copyright (C) 2005, 2006, 2007, 2008, 2009, 2010
|
||||
// Copyright (C) 2005, 2006, 2007, 2008, 2009, 2010, 2011
|
||||
// Free Software Foundation, Inc.
|
||||
//
|
||||
// This file is part of the GNU ISO C++ Library. This library is free
|
||||
|
@ -33,7 +33,7 @@
|
|||
|
||||
#pragma GCC system_header
|
||||
|
||||
#include <cxxabi-forced.h>
|
||||
#include <bits/cxxabi_forced.h>
|
||||
|
||||
_GLIBCXX_BEGIN_NAMESPACE(__gnu_cxx)
|
||||
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
// <bitset> -*- C++ -*-
|
||||
|
||||
// Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010
|
||||
// Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010,
|
||||
// 2011
|
||||
// Free Software Foundation, Inc.
|
||||
//
|
||||
// This file is part of the GNU ISO C++ Library. This library is free
|
||||
|
@ -49,7 +50,7 @@
|
|||
#include <bits/functexcept.h> // For invalid_argument, out_of_range,
|
||||
// overflow_error
|
||||
#include <iosfwd>
|
||||
#include <cxxabi-forced.h>
|
||||
#include <bits/cxxabi_forced.h>
|
||||
|
||||
#define _GLIBCXX_BITSET_BITS_PER_WORD (__CHAR_BIT__ * sizeof(unsigned long))
|
||||
#define _GLIBCXX_BITSET_WORDS(__n) \
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
## Makefile for the GNU C++ Support library.
|
||||
##
|
||||
## Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008,
|
||||
## 2009, 2010
|
||||
## 2009, 2010, 2011
|
||||
## Free Software Foundation, Inc.
|
||||
##
|
||||
## Process this file with automake to produce Makefile.in.
|
||||
|
@ -31,10 +31,14 @@ toolexeclib_LTLIBRARIES = libsupc++.la
|
|||
# 2) integrated libsupc++convenience.la that is to be a part of libstdc++.a
|
||||
noinst_LTLIBRARIES = libsupc++convenience.la
|
||||
|
||||
std_HEADERS = \
|
||||
cxxabi.h exception initializer_list new typeinfo
|
||||
|
||||
headers = \
|
||||
exception new typeinfo cxxabi.h cxxabi-forced.h exception_defines.h \
|
||||
initializer_list exception_ptr.h nested_exception.h
|
||||
bits_HEADERS = \
|
||||
cxxabi_forced.h hash_bytes.h \
|
||||
exception_defines.h exception_ptr.h nested_exception.h
|
||||
|
||||
headers = $(std_HEADERS) $(bits_HEADERS)
|
||||
|
||||
if GLIBCXX_HOSTED
|
||||
c_sources = \
|
||||
|
@ -88,12 +92,9 @@ sources = \
|
|||
vmi_class_type_info.cc \
|
||||
vterminate.cc
|
||||
|
||||
libsupc___la_SOURCES = $(sources) $(c_sources)
|
||||
libsupc___la_SOURCES = $(sources) $(c_sources)
|
||||
libsupc__convenience_la_SOURCES = $(sources) $(c_sources)
|
||||
|
||||
glibcxxinstalldir = $(gxx_include_dir)
|
||||
glibcxxinstall_HEADERS = $(headers)
|
||||
|
||||
# AM_CXXFLAGS needs to be in each subdirectory so that it can be
|
||||
# modified in a per-library or per-sub-library way. Need to manually
|
||||
# set this option because CONFIG_CXXFLAGS has to be after
|
||||
|
@ -132,7 +133,7 @@ cp-demangle.o: cp-demangle.c
|
|||
$(C_COMPILE) -DIN_GLIBCPP_V3 -Wno-error -c $<
|
||||
|
||||
|
||||
# libstdc++ libtool notes
|
||||
# Libtool notes
|
||||
|
||||
# 1) Need to explicitly set LTCXXCOMPILE so that AM_CXXFLAGS is
|
||||
# last. (That way, things like -O2 passed down from the toplevel can
|
||||
|
@ -169,21 +170,43 @@ CXXLINK = $(LIBTOOL) --tag CXX --tag disable-shared $(LIBTOOLFLAGS) \
|
|||
--mode=link $(CXX) \
|
||||
$(OPT_LDFLAGS) $(SECTION_LDFLAGS) $(AM_CXXFLAGS) $(LTLDFLAGS) -o $@
|
||||
|
||||
|
||||
# Install notes
|
||||
# We have to have rules modified from the default to counteract SUN make
|
||||
# prepending each of $(glibcxxinstall_HEADERS) with VPATH below.
|
||||
install-glibcxxinstallHEADERS: $(glibcxxinstall_HEADERS)
|
||||
# prepending each of $(*_HEADERS) with VPATH below.
|
||||
stddir = $(gxx_include_dir)
|
||||
bitsdir = $(gxx_include_dir)/bits
|
||||
|
||||
install-stdHEADERS: $(std_HEADERS)
|
||||
@$(NORMAL_INSTALL)
|
||||
$(mkinstalldirs) $(DESTDIR)$(glibcxxinstalldir)
|
||||
@list='$(glibcxxinstall_HEADERS)'; for p in $$list; do \
|
||||
$(mkinstalldirs) $(DESTDIR)$(stddir)
|
||||
@list='$(std_HEADERS)'; for p in $$list; do \
|
||||
q=`echo $$p | sed -e 's,.*/,,'`; \
|
||||
if test -f "$$p"; then d= ; else d="$(srcdir)/"; fi; \
|
||||
echo " $(INSTALL_DATA) $$d$$p $(DESTDIR)$(glibcxxinstalldir)/$$q"; \
|
||||
$(INSTALL_DATA) $$d$$p $(DESTDIR)$(glibcxxinstalldir)/$$q; \
|
||||
echo " $(INSTALL_DATA) $$d$$p $(DESTDIR)$(stddir)/$$q"; \
|
||||
$(INSTALL_DATA) $$d$$p $(DESTDIR)$(stddir)/$$q; \
|
||||
done
|
||||
|
||||
uninstall-glibcxxinstallHEADERS:
|
||||
@$(NORMAL_UNINSTALL)
|
||||
list='$(glibcxxinstall_HEADERS)'; for p in $$list; do \
|
||||
install-bitsHEADERS: $(bits_HEADERS)
|
||||
@$(NORMAL_INSTALL)
|
||||
$(mkinstalldirs) $(DESTDIR)$(bitsdir)
|
||||
@list='$(bits_HEADERS)'; for p in $$list; do \
|
||||
q=`echo $$p | sed -e 's,.*/,,'`; \
|
||||
rm -f $(DESTDIR)$(glibcxxinstalldir)/$$q; \
|
||||
if test -f "$$p"; then d= ; else d="$(srcdir)/"; fi; \
|
||||
echo " $(INSTALL_DATA) $$d$$p $(DESTDIR)$(bitsdir)/$$q"; \
|
||||
$(INSTALL_DATA) $$d$$p $(DESTDIR)$(bitsdir)/$$q; \
|
||||
done
|
||||
|
||||
uninstall-stdHEADERS:
|
||||
@$(NORMAL_UNINSTALL)
|
||||
list='$(std_HEADERS)'; for p in $$list; do \
|
||||
q=`echo $$p | sed -e 's,.*/,,'`; \
|
||||
rm -f $(DESTDIR)$(stddir)/$$q; \
|
||||
done
|
||||
|
||||
uninstall-bitsHEADERS:
|
||||
@$(NORMAL_UNINSTALL)
|
||||
list='$(bits_HEADERS)'; for p in $$list; do \
|
||||
q=`echo $$p | sed -e 's,.*/,,'`; \
|
||||
rm -f $(DESTDIR)$(bitsdir)/$$q; \
|
||||
done
|
||||
|
|
|
@ -37,7 +37,7 @@ build_triplet = @build@
|
|||
host_triplet = @host@
|
||||
target_triplet = @target@
|
||||
DIST_COMMON = $(top_srcdir)/fragment.am $(srcdir)/Makefile.in \
|
||||
$(srcdir)/Makefile.am $(glibcxxinstall_HEADERS)
|
||||
$(srcdir)/Makefile.am $(bits_HEADERS) $(std_HEADERS)
|
||||
subdir = libsupc++
|
||||
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
|
||||
am__aclocal_m4_deps = $(top_srcdir)/../config/acx.m4 \
|
||||
|
@ -86,8 +86,8 @@ am__nobase_list = $(am__nobase_strip_setup); \
|
|||
am__base_list = \
|
||||
sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
|
||||
sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
|
||||
am__installdirs = "$(DESTDIR)$(toolexeclibdir)" \
|
||||
"$(DESTDIR)$(glibcxxinstalldir)"
|
||||
am__installdirs = "$(DESTDIR)$(toolexeclibdir)" "$(DESTDIR)$(bitsdir)" \
|
||||
"$(DESTDIR)$(stddir)"
|
||||
LTLIBRARIES = $(noinst_LTLIBRARIES) $(toolexeclib_LTLIBRARIES)
|
||||
libsupc___la_LIBADD =
|
||||
am__objects_1 = array_type_info.lo atexit_arm.lo bad_alloc.lo \
|
||||
|
@ -122,7 +122,7 @@ CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
|
|||
$(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS)
|
||||
CXXLD = $(CXX)
|
||||
SOURCES = $(libsupc___la_SOURCES) $(libsupc__convenience_la_SOURCES)
|
||||
HEADERS = $(glibcxxinstall_HEADERS)
|
||||
HEADERS = $(bits_HEADERS) $(std_HEADERS)
|
||||
ETAGS = etags
|
||||
CTAGS = ctags
|
||||
ABI_TWEAKS_SRCDIR = @ABI_TWEAKS_SRCDIR@
|
||||
|
@ -339,10 +339,14 @@ AM_CPPFLAGS = $(GLIBCXX_INCLUDES)
|
|||
toolexeclib_LTLIBRARIES = libsupc++.la
|
||||
# 2) integrated libsupc++convenience.la that is to be a part of libstdc++.a
|
||||
noinst_LTLIBRARIES = libsupc++convenience.la
|
||||
headers = \
|
||||
exception new typeinfo cxxabi.h cxxabi-forced.h exception_defines.h \
|
||||
initializer_list exception_ptr.h nested_exception.h
|
||||
std_HEADERS = \
|
||||
cxxabi.h exception initializer_list new typeinfo
|
||||
|
||||
bits_HEADERS = \
|
||||
cxxabi_forced.h hash_bytes.h \
|
||||
exception_defines.h exception_ptr.h nested_exception.h
|
||||
|
||||
headers = $(std_HEADERS) $(bits_HEADERS)
|
||||
@GLIBCXX_HOSTED_TRUE@c_sources = \
|
||||
@GLIBCXX_HOSTED_TRUE@ cp-demangle.c
|
||||
|
||||
|
@ -393,10 +397,8 @@ sources = \
|
|||
vmi_class_type_info.cc \
|
||||
vterminate.cc
|
||||
|
||||
libsupc___la_SOURCES = $(sources) $(c_sources)
|
||||
libsupc___la_SOURCES = $(sources) $(c_sources)
|
||||
libsupc__convenience_la_SOURCES = $(sources) $(c_sources)
|
||||
glibcxxinstalldir = $(gxx_include_dir)
|
||||
glibcxxinstall_HEADERS = $(headers)
|
||||
|
||||
# AM_CXXFLAGS needs to be in each subdirectory so that it can be
|
||||
# modified in a per-library or per-sub-library way. Need to manually
|
||||
|
@ -429,7 +431,7 @@ LTCOMPILE = $(LIBTOOL) --tag CC --tag disable-shared $(LIBTOOLFLAGS) --mode=comp
|
|||
$(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
|
||||
|
||||
|
||||
# libstdc++ libtool notes
|
||||
# Libtool notes
|
||||
|
||||
# 1) Need to explicitly set LTCXXCOMPILE so that AM_CXXFLAGS is
|
||||
# last. (That way, things like -O2 passed down from the toplevel can
|
||||
|
@ -466,6 +468,12 @@ CXXLINK = $(LIBTOOL) --tag CXX --tag disable-shared $(LIBTOOLFLAGS) \
|
|||
--mode=link $(CXX) \
|
||||
$(OPT_LDFLAGS) $(SECTION_LDFLAGS) $(AM_CXXFLAGS) $(LTLDFLAGS) -o $@
|
||||
|
||||
|
||||
# Install notes
|
||||
# We have to have rules modified from the default to counteract SUN make
|
||||
# prepending each of $(*_HEADERS) with VPATH below.
|
||||
stddir = $(gxx_include_dir)
|
||||
bitsdir = $(gxx_include_dir)/bits
|
||||
all: all-am
|
||||
|
||||
.SUFFIXES:
|
||||
|
@ -630,7 +638,7 @@ check-am: all-am
|
|||
check: check-am
|
||||
all-am: Makefile $(LTLIBRARIES) $(HEADERS)
|
||||
installdirs:
|
||||
for dir in "$(DESTDIR)$(toolexeclibdir)" "$(DESTDIR)$(glibcxxinstalldir)"; do \
|
||||
for dir in "$(DESTDIR)$(toolexeclibdir)" "$(DESTDIR)$(bitsdir)" "$(DESTDIR)$(stddir)"; do \
|
||||
test -z "$$dir" || $(MKDIR_P) "$$dir"; \
|
||||
done
|
||||
install: install-am
|
||||
|
@ -680,7 +688,7 @@ info: info-am
|
|||
|
||||
info-am:
|
||||
|
||||
install-data-am: install-glibcxxinstallHEADERS
|
||||
install-data-am: install-bitsHEADERS install-stdHEADERS
|
||||
|
||||
install-dvi: install-dvi-am
|
||||
|
||||
|
@ -725,7 +733,7 @@ ps: ps-am
|
|||
|
||||
ps-am:
|
||||
|
||||
uninstall-am: uninstall-glibcxxinstallHEADERS \
|
||||
uninstall-am: uninstall-bitsHEADERS uninstall-stdHEADERS \
|
||||
uninstall-toolexeclibLTLIBRARIES
|
||||
|
||||
.MAKE: install-am install-strip
|
||||
|
@ -734,16 +742,17 @@ uninstall-am: uninstall-glibcxxinstallHEADERS \
|
|||
clean-libtool clean-noinstLTLIBRARIES \
|
||||
clean-toolexeclibLTLIBRARIES ctags distclean distclean-compile \
|
||||
distclean-generic distclean-libtool distclean-tags dvi dvi-am \
|
||||
html html-am info info-am install install-am install-data \
|
||||
install-data-am install-dvi install-dvi-am install-exec \
|
||||
install-exec-am install-glibcxxinstallHEADERS install-html \
|
||||
html html-am info info-am install install-am \
|
||||
install-bitsHEADERS install-data install-data-am install-dvi \
|
||||
install-dvi-am install-exec install-exec-am install-html \
|
||||
install-html-am install-info install-info-am install-man \
|
||||
install-pdf install-pdf-am install-ps install-ps-am \
|
||||
install-strip install-toolexeclibLTLIBRARIES installcheck \
|
||||
installcheck-am installdirs maintainer-clean \
|
||||
maintainer-clean-generic mostlyclean mostlyclean-compile \
|
||||
mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
|
||||
tags uninstall uninstall-am uninstall-glibcxxinstallHEADERS \
|
||||
install-stdHEADERS install-strip \
|
||||
install-toolexeclibLTLIBRARIES installcheck installcheck-am \
|
||||
installdirs maintainer-clean maintainer-clean-generic \
|
||||
mostlyclean mostlyclean-compile mostlyclean-generic \
|
||||
mostlyclean-libtool pdf pdf-am ps ps-am tags uninstall \
|
||||
uninstall-am uninstall-bitsHEADERS uninstall-stdHEADERS \
|
||||
uninstall-toolexeclibLTLIBRARIES
|
||||
|
||||
|
||||
|
@ -755,23 +764,38 @@ cp-demangle.lo: cp-demangle.c
|
|||
cp-demangle.o: cp-demangle.c
|
||||
$(C_COMPILE) -DIN_GLIBCPP_V3 -Wno-error -c $<
|
||||
|
||||
# We have to have rules modified from the default to counteract SUN make
|
||||
# prepending each of $(glibcxxinstall_HEADERS) with VPATH below.
|
||||
install-glibcxxinstallHEADERS: $(glibcxxinstall_HEADERS)
|
||||
install-stdHEADERS: $(std_HEADERS)
|
||||
@$(NORMAL_INSTALL)
|
||||
$(mkinstalldirs) $(DESTDIR)$(glibcxxinstalldir)
|
||||
@list='$(glibcxxinstall_HEADERS)'; for p in $$list; do \
|
||||
$(mkinstalldirs) $(DESTDIR)$(stddir)
|
||||
@list='$(std_HEADERS)'; for p in $$list; do \
|
||||
q=`echo $$p | sed -e 's,.*/,,'`; \
|
||||
if test -f "$$p"; then d= ; else d="$(srcdir)/"; fi; \
|
||||
echo " $(INSTALL_DATA) $$d$$p $(DESTDIR)$(glibcxxinstalldir)/$$q"; \
|
||||
$(INSTALL_DATA) $$d$$p $(DESTDIR)$(glibcxxinstalldir)/$$q; \
|
||||
echo " $(INSTALL_DATA) $$d$$p $(DESTDIR)$(stddir)/$$q"; \
|
||||
$(INSTALL_DATA) $$d$$p $(DESTDIR)$(stddir)/$$q; \
|
||||
done
|
||||
|
||||
uninstall-glibcxxinstallHEADERS:
|
||||
@$(NORMAL_UNINSTALL)
|
||||
list='$(glibcxxinstall_HEADERS)'; for p in $$list; do \
|
||||
install-bitsHEADERS: $(bits_HEADERS)
|
||||
@$(NORMAL_INSTALL)
|
||||
$(mkinstalldirs) $(DESTDIR)$(bitsdir)
|
||||
@list='$(bits_HEADERS)'; for p in $$list; do \
|
||||
q=`echo $$p | sed -e 's,.*/,,'`; \
|
||||
rm -f $(DESTDIR)$(glibcxxinstalldir)/$$q; \
|
||||
if test -f "$$p"; then d= ; else d="$(srcdir)/"; fi; \
|
||||
echo " $(INSTALL_DATA) $$d$$p $(DESTDIR)$(bitsdir)/$$q"; \
|
||||
$(INSTALL_DATA) $$d$$p $(DESTDIR)$(bitsdir)/$$q; \
|
||||
done
|
||||
|
||||
uninstall-stdHEADERS:
|
||||
@$(NORMAL_UNINSTALL)
|
||||
list='$(std_HEADERS)'; for p in $$list; do \
|
||||
q=`echo $$p | sed -e 's,.*/,,'`; \
|
||||
rm -f $(DESTDIR)$(stddir)/$$q; \
|
||||
done
|
||||
|
||||
uninstall-bitsHEADERS:
|
||||
@$(NORMAL_UNINSTALL)
|
||||
list='$(bits_HEADERS)'; for p in $$list; do \
|
||||
q=`echo $$p | sed -e 's,.*/,,'`; \
|
||||
rm -f $(DESTDIR)$(bitsdir)/$$q; \
|
||||
done
|
||||
|
||||
# Tell versions [3.59,3.63) of GNU make to not export all variables.
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
// new abi support -*- C++ -*-
|
||||
|
||||
// Copyright (C) 2000, 2002, 2003, 2004, 2006, 2007, 2009, 2010
|
||||
// ABI Support -*- C++ -*-
|
||||
|
||||
// Copyright (C) 2000, 2002, 2003, 2004, 2006, 2007, 2009, 2010, 2011
|
||||
// Free Software Foundation, Inc.
|
||||
//
|
||||
// This file is part of GCC.
|
||||
|
@ -9,12 +9,12 @@
|
|||
// it under the terms of the GNU General Public License as published by
|
||||
// the Free Software Foundation; either version 3, or (at your option)
|
||||
// any later version.
|
||||
//
|
||||
//
|
||||
// GCC 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.
|
||||
//
|
||||
//
|
||||
// Under Section 7 of GPL version 3, you are granted additional
|
||||
// permissions described in the GCC Runtime Library Exception, version
|
||||
// 3.1, as published by the Free Software Foundation.
|
||||
|
@ -25,12 +25,12 @@
|
|||
// <http://www.gnu.org/licenses/>.
|
||||
|
||||
// Written by Nathan Sidwell, Codesourcery LLC, <nathan@codesourcery.com>
|
||||
|
||||
|
||||
/* This file declares the new abi entry points into the runtime. It is not
|
||||
normally necessary for user programs to include this header, or use the
|
||||
entry points directly. However, this header is available should that be
|
||||
needed.
|
||||
|
||||
|
||||
Some of the entry points are intended for both C and C++, thus this header
|
||||
is includable from both C and C++. Though the C++ specific parts are not
|
||||
available in C, naturally enough. */
|
||||
|
@ -47,40 +47,35 @@
|
|||
#pragma GCC visibility push(default)
|
||||
|
||||
#include <stddef.h>
|
||||
#include <bits/c++config.h>
|
||||
#include <bits/cxxabi_tweaks.h>
|
||||
#include <cxxabi-forced.h>
|
||||
|
||||
#ifdef __cplusplus
|
||||
#define _GLIBCXX_NOTHROW throw()
|
||||
#else
|
||||
#define _GLIBCXX_NOTHROW __attribute__((__nothrow__))
|
||||
#endif
|
||||
#include <bits/cxxabi_forced.h>
|
||||
|
||||
#ifdef __cplusplus
|
||||
namespace __cxxabiv1
|
||||
{
|
||||
extern "C"
|
||||
{
|
||||
extern "C"
|
||||
{
|
||||
#endif
|
||||
|
||||
typedef __cxa_cdtor_return_type (*__cxa_cdtor_type)(void *);
|
||||
|
||||
// Allocate array.
|
||||
void*
|
||||
__cxa_vec_new(size_t __element_count, size_t __element_size,
|
||||
void*
|
||||
__cxa_vec_new(size_t __element_count, size_t __element_size,
|
||||
size_t __padding_size, __cxa_cdtor_type __constructor,
|
||||
__cxa_cdtor_type __destructor);
|
||||
|
||||
void*
|
||||
__cxa_vec_new2(size_t __element_count, size_t __element_size,
|
||||
size_t __padding_size, __cxa_cdtor_type __constructor,
|
||||
__cxa_cdtor_type __destructor, void *(*__alloc) (size_t),
|
||||
__cxa_cdtor_type __destructor, void *(*__alloc) (size_t),
|
||||
void (*__dealloc) (void*));
|
||||
|
||||
void*
|
||||
__cxa_vec_new3(size_t __element_count, size_t __element_size,
|
||||
size_t __padding_size, __cxa_cdtor_type __constructor,
|
||||
__cxa_cdtor_type __destructor, void *(*__alloc) (size_t),
|
||||
__cxa_cdtor_type __destructor, void *(*__alloc) (size_t),
|
||||
void (*__dealloc) (void*, size_t));
|
||||
|
||||
// Construct array.
|
||||
|
@ -91,41 +86,41 @@ namespace __cxxabiv1
|
|||
|
||||
__cxa_vec_ctor_return_type
|
||||
__cxa_vec_cctor(void* __dest_array, void* __src_array,
|
||||
size_t __element_count, size_t __element_size,
|
||||
__cxa_cdtor_return_type (*__constructor) (void*, void*),
|
||||
size_t __element_count, size_t __element_size,
|
||||
__cxa_cdtor_return_type (*__constructor) (void*, void*),
|
||||
__cxa_cdtor_type __destructor);
|
||||
|
||||
|
||||
// Destruct array.
|
||||
void
|
||||
void
|
||||
__cxa_vec_dtor(void* __array_address, size_t __element_count,
|
||||
size_t __element_size, __cxa_cdtor_type __destructor);
|
||||
|
||||
void
|
||||
|
||||
void
|
||||
__cxa_vec_cleanup(void* __array_address, size_t __element_count, size_t __s,
|
||||
__cxa_cdtor_type __destructor) _GLIBCXX_NOTHROW;
|
||||
|
||||
|
||||
// Destruct and release array.
|
||||
void
|
||||
void
|
||||
__cxa_vec_delete(void* __array_address, size_t __element_size,
|
||||
size_t __padding_size, __cxa_cdtor_type __destructor);
|
||||
|
||||
void
|
||||
void
|
||||
__cxa_vec_delete2(void* __array_address, size_t __element_size,
|
||||
size_t __padding_size, __cxa_cdtor_type __destructor,
|
||||
void (*__dealloc) (void*));
|
||||
|
||||
void
|
||||
|
||||
void
|
||||
__cxa_vec_delete3(void* __array_address, size_t __element_size,
|
||||
size_t __padding_size, __cxa_cdtor_type __destructor,
|
||||
void (*__dealloc) (void*, size_t));
|
||||
|
||||
int
|
||||
int
|
||||
__cxa_guard_acquire(__guard*);
|
||||
|
||||
void
|
||||
void
|
||||
__cxa_guard_release(__guard*) _GLIBCXX_NOTHROW;
|
||||
|
||||
void
|
||||
void
|
||||
__cxa_guard_abort(__guard*) _GLIBCXX_NOTHROW;
|
||||
|
||||
// Pure virtual functions.
|
||||
|
@ -148,7 +143,7 @@ namespace __cxxabiv1
|
|||
|
||||
|
||||
/**
|
||||
* @brief Demangling routine.
|
||||
* @brief Demangling routine.
|
||||
* ABI-mandated entry point in the C++ runtime library for demangling.
|
||||
*
|
||||
* @param __mangled_name A NUL-terminated character string
|
||||
|
@ -177,7 +172,7 @@ namespace __cxxabiv1
|
|||
* The demangling is performed using the C++ ABI mangling rules,
|
||||
* with GNU extensions. For example, this function is used in
|
||||
* __gnu_cxx::__verbose_terminate_handler.
|
||||
*
|
||||
*
|
||||
* See http://gcc.gnu.org/onlinedocs/libstdc++/manual/bk01pt12ch39.html
|
||||
* for other examples of use.
|
||||
*
|
||||
|
@ -205,10 +200,10 @@ namespace __cxxabiv1
|
|||
class __fundamental_type_info : public std::type_info
|
||||
{
|
||||
public:
|
||||
explicit
|
||||
explicit
|
||||
__fundamental_type_info(const char* __n) : std::type_info(__n) { }
|
||||
|
||||
virtual
|
||||
virtual
|
||||
~__fundamental_type_info();
|
||||
};
|
||||
|
||||
|
@ -216,10 +211,10 @@ namespace __cxxabiv1
|
|||
class __array_type_info : public std::type_info
|
||||
{
|
||||
public:
|
||||
explicit
|
||||
explicit
|
||||
__array_type_info(const char* __n) : std::type_info(__n) { }
|
||||
|
||||
virtual
|
||||
virtual
|
||||
~__array_type_info();
|
||||
};
|
||||
|
||||
|
@ -227,15 +222,15 @@ namespace __cxxabiv1
|
|||
class __function_type_info : public std::type_info
|
||||
{
|
||||
public:
|
||||
explicit
|
||||
explicit
|
||||
__function_type_info(const char* __n) : std::type_info(__n) { }
|
||||
|
||||
virtual
|
||||
virtual
|
||||
~__function_type_info();
|
||||
|
||||
protected:
|
||||
// Implementation defined member function.
|
||||
virtual bool
|
||||
virtual bool
|
||||
__is_function_p() const;
|
||||
};
|
||||
|
||||
|
@ -243,10 +238,10 @@ namespace __cxxabiv1
|
|||
class __enum_type_info : public std::type_info
|
||||
{
|
||||
public:
|
||||
explicit
|
||||
explicit
|
||||
__enum_type_info(const char* __n) : std::type_info(__n) { }
|
||||
|
||||
virtual
|
||||
virtual
|
||||
~__enum_type_info();
|
||||
};
|
||||
|
||||
|
@ -257,17 +252,17 @@ namespace __cxxabiv1
|
|||
unsigned int __flags; // Qualification of the target object.
|
||||
const std::type_info* __pointee; // Type of pointed to object.
|
||||
|
||||
explicit
|
||||
__pbase_type_info(const char* __n, int __quals,
|
||||
explicit
|
||||
__pbase_type_info(const char* __n, int __quals,
|
||||
const std::type_info* __type)
|
||||
: std::type_info(__n), __flags(__quals), __pointee(__type)
|
||||
{ }
|
||||
|
||||
virtual
|
||||
|
||||
virtual
|
||||
~__pbase_type_info();
|
||||
|
||||
// Implementation defined type.
|
||||
enum __masks
|
||||
enum __masks
|
||||
{
|
||||
__const_mask = 0x1,
|
||||
__volatile_mask = 0x2,
|
||||
|
@ -283,11 +278,11 @@ namespace __cxxabiv1
|
|||
operator=(const __pbase_type_info&);
|
||||
|
||||
// Implementation defined member functions.
|
||||
virtual bool
|
||||
__do_catch(const std::type_info* __thr_type, void** __thr_obj,
|
||||
virtual bool
|
||||
__do_catch(const std::type_info* __thr_type, void** __thr_obj,
|
||||
unsigned int __outer) const;
|
||||
|
||||
inline virtual bool
|
||||
inline virtual bool
|
||||
__pointer_catch(const __pbase_type_info* __thr_type, void** __thr_obj,
|
||||
unsigned __outer) const;
|
||||
};
|
||||
|
@ -296,22 +291,22 @@ namespace __cxxabiv1
|
|||
class __pointer_type_info : public __pbase_type_info
|
||||
{
|
||||
public:
|
||||
explicit
|
||||
__pointer_type_info(const char* __n, int __quals,
|
||||
explicit
|
||||
__pointer_type_info(const char* __n, int __quals,
|
||||
const std::type_info* __type)
|
||||
: __pbase_type_info (__n, __quals, __type) { }
|
||||
|
||||
|
||||
virtual
|
||||
virtual
|
||||
~__pointer_type_info();
|
||||
|
||||
protected:
|
||||
// Implementation defined member functions.
|
||||
virtual bool
|
||||
virtual bool
|
||||
__is_pointer_p() const;
|
||||
|
||||
virtual bool
|
||||
__pointer_catch(const __pbase_type_info* __thr_type, void** __thr_obj,
|
||||
virtual bool
|
||||
__pointer_catch(const __pbase_type_info* __thr_type, void** __thr_obj,
|
||||
unsigned __outer) const;
|
||||
};
|
||||
|
||||
|
@ -323,13 +318,13 @@ namespace __cxxabiv1
|
|||
public:
|
||||
__class_type_info* __context; // Class of the member.
|
||||
|
||||
explicit
|
||||
explicit
|
||||
__pointer_to_member_type_info(const char* __n, int __quals,
|
||||
const std::type_info* __type,
|
||||
const std::type_info* __type,
|
||||
__class_type_info* __klass)
|
||||
: __pbase_type_info(__n, __quals, __type), __context(__klass) { }
|
||||
|
||||
virtual
|
||||
virtual
|
||||
~__pointer_to_member_type_info();
|
||||
|
||||
protected:
|
||||
|
@ -339,7 +334,7 @@ namespace __cxxabiv1
|
|||
operator=(const __pointer_to_member_type_info&);
|
||||
|
||||
// Implementation defined member function.
|
||||
virtual bool
|
||||
virtual bool
|
||||
__pointer_catch(const __pbase_type_info* __thr_type, void** __thr_obj,
|
||||
unsigned __outer) const;
|
||||
};
|
||||
|
@ -351,26 +346,26 @@ namespace __cxxabiv1
|
|||
const __class_type_info* __base_type; // Base class type.
|
||||
long __offset_flags; // Offset and info.
|
||||
|
||||
enum __offset_flags_masks
|
||||
enum __offset_flags_masks
|
||||
{
|
||||
__virtual_mask = 0x1,
|
||||
__public_mask = 0x2,
|
||||
__hwm_bit = 2,
|
||||
__offset_shift = 8 // Bits to shift offset.
|
||||
};
|
||||
|
||||
|
||||
// Implementation defined member functions.
|
||||
bool
|
||||
bool
|
||||
__is_virtual_p() const
|
||||
{ return __offset_flags & __virtual_mask; }
|
||||
|
||||
bool
|
||||
bool
|
||||
__is_public_p() const
|
||||
{ return __offset_flags & __public_mask; }
|
||||
|
||||
ptrdiff_t
|
||||
ptrdiff_t
|
||||
__offset() const
|
||||
{
|
||||
{
|
||||
// This shift, being of a signed type, is implementation
|
||||
// defined. GCC implements such shifts as arithmetic, which is
|
||||
// what we want.
|
||||
|
@ -382,10 +377,10 @@ namespace __cxxabiv1
|
|||
class __class_type_info : public std::type_info
|
||||
{
|
||||
public:
|
||||
explicit
|
||||
explicit
|
||||
__class_type_info (const char *__n) : type_info(__n) { }
|
||||
|
||||
virtual
|
||||
virtual
|
||||
~__class_type_info ();
|
||||
|
||||
// Implementation defined types.
|
||||
|
@ -396,24 +391,24 @@ namespace __cxxabiv1
|
|||
enum __sub_kind
|
||||
{
|
||||
// We have no idea.
|
||||
__unknown = 0,
|
||||
__unknown = 0,
|
||||
|
||||
// Not contained within us (in some circumstances this might
|
||||
// mean not contained publicly)
|
||||
__not_contained,
|
||||
__not_contained,
|
||||
|
||||
// Contained ambiguously.
|
||||
__contained_ambig,
|
||||
|
||||
__contained_ambig,
|
||||
|
||||
// Via a virtual path.
|
||||
__contained_virtual_mask = __base_class_type_info::__virtual_mask,
|
||||
__contained_virtual_mask = __base_class_type_info::__virtual_mask,
|
||||
|
||||
// Via a public path.
|
||||
__contained_public_mask = __base_class_type_info::__public_mask,
|
||||
__contained_public_mask = __base_class_type_info::__public_mask,
|
||||
|
||||
// Contained within us.
|
||||
__contained_mask = 1 << __base_class_type_info::__hwm_bit,
|
||||
|
||||
|
||||
__contained_private = __contained_mask,
|
||||
__contained_public = __contained_mask | __contained_public_mask
|
||||
};
|
||||
|
@ -423,17 +418,17 @@ namespace __cxxabiv1
|
|||
|
||||
protected:
|
||||
// Implementation defined member functions.
|
||||
virtual bool
|
||||
virtual bool
|
||||
__do_upcast(const __class_type_info* __dst_type, void**__obj_ptr) const;
|
||||
|
||||
virtual bool
|
||||
__do_catch(const type_info* __thr_type, void** __thr_obj,
|
||||
virtual bool
|
||||
__do_catch(const type_info* __thr_type, void** __thr_obj,
|
||||
unsigned __outer) const;
|
||||
|
||||
public:
|
||||
// Helper for upcast. See if DST is us, or one of our bases.
|
||||
// Return false if not found, true if found.
|
||||
virtual bool
|
||||
// Helper for upcast. See if DST is us, or one of our bases.
|
||||
// Return false if not found, true if found.
|
||||
virtual bool
|
||||
__do_upcast(const __class_type_info* __dst, const void* __obj,
|
||||
__upcast_result& __restrict __result) const;
|
||||
|
||||
|
@ -443,9 +438,9 @@ namespace __cxxabiv1
|
|||
// objects might be contained within this type. If SRC_PTR is one
|
||||
// of our SRC_TYPE bases, indicate the virtuality. Returns
|
||||
// not_contained for non containment or private containment.
|
||||
inline __sub_kind
|
||||
inline __sub_kind
|
||||
__find_public_src(ptrdiff_t __src2dst, const void* __obj_ptr,
|
||||
const __class_type_info* __src_type,
|
||||
const __class_type_info* __src_type,
|
||||
const void* __src_ptr) const;
|
||||
|
||||
// Helper for dynamic cast. ACCESS_PATH gives the access from the
|
||||
|
@ -455,17 +450,17 @@ namespace __cxxabiv1
|
|||
// started from and SRC_PTR points to that base within the most
|
||||
// derived object. Fill in RESULT with what we find. Return true
|
||||
// if we have located an ambiguous match.
|
||||
virtual bool
|
||||
virtual bool
|
||||
__do_dyncast(ptrdiff_t __src2dst, __sub_kind __access_path,
|
||||
const __class_type_info* __dst_type, const void* __obj_ptr,
|
||||
const __class_type_info* __src_type, const void* __src_ptr,
|
||||
const __class_type_info* __dst_type, const void* __obj_ptr,
|
||||
const __class_type_info* __src_type, const void* __src_ptr,
|
||||
__dyncast_result& __result) const;
|
||||
|
||||
|
||||
// Helper for find_public_subobj. SRC2DST indicates how SRC_TYPE
|
||||
// bases are inherited by the type started from -- which is not
|
||||
// necessarily the current type. The current type will be a base
|
||||
// of the destination type. OBJ_PTR points to the current base.
|
||||
virtual __sub_kind
|
||||
virtual __sub_kind
|
||||
__do_find_public_src(ptrdiff_t __src2dst, const void* __obj_ptr,
|
||||
const __class_type_info* __src_type,
|
||||
const void* __src_ptr) const;
|
||||
|
@ -477,11 +472,11 @@ namespace __cxxabiv1
|
|||
public:
|
||||
const __class_type_info* __base_type;
|
||||
|
||||
explicit
|
||||
explicit
|
||||
__si_class_type_info(const char *__n, const __class_type_info *__base)
|
||||
: __class_type_info(__n), __base_type(__base) { }
|
||||
|
||||
virtual
|
||||
virtual
|
||||
~__si_class_type_info();
|
||||
|
||||
protected:
|
||||
|
@ -491,24 +486,24 @@ namespace __cxxabiv1
|
|||
operator=(const __si_class_type_info&);
|
||||
|
||||
// Implementation defined member functions.
|
||||
virtual bool
|
||||
virtual bool
|
||||
__do_dyncast(ptrdiff_t __src2dst, __sub_kind __access_path,
|
||||
const __class_type_info* __dst_type, const void* __obj_ptr,
|
||||
const __class_type_info* __src_type, const void* __src_ptr,
|
||||
__dyncast_result& __result) const;
|
||||
|
||||
virtual __sub_kind
|
||||
virtual __sub_kind
|
||||
__do_find_public_src(ptrdiff_t __src2dst, const void* __obj_ptr,
|
||||
const __class_type_info* __src_type,
|
||||
const void* __sub_ptr) const;
|
||||
|
||||
virtual bool
|
||||
virtual bool
|
||||
__do_upcast(const __class_type_info*__dst, const void*__obj,
|
||||
__upcast_result& __restrict __result) const;
|
||||
};
|
||||
|
||||
// Type information for a class with multiple and/or virtual bases.
|
||||
class __vmi_class_type_info : public __class_type_info
|
||||
class __vmi_class_type_info : public __class_type_info
|
||||
{
|
||||
public:
|
||||
unsigned int __flags; // Details about the class hierarchy.
|
||||
|
@ -519,15 +514,15 @@ namespace __cxxabiv1
|
|||
// internally generated by the compiler.
|
||||
__base_class_type_info __base_info[1]; // Array of bases.
|
||||
|
||||
explicit
|
||||
explicit
|
||||
__vmi_class_type_info(const char* __n, int ___flags)
|
||||
: __class_type_info(__n), __flags(___flags), __base_count(0) { }
|
||||
|
||||
virtual
|
||||
virtual
|
||||
~__vmi_class_type_info();
|
||||
|
||||
// Implementation defined types.
|
||||
enum __flags_masks
|
||||
enum __flags_masks
|
||||
{
|
||||
__non_diamond_repeat_mask = 0x1, // Distinct instance of repeated base.
|
||||
__diamond_shaped_mask = 0x2, // Diamond shaped multiple inheritance.
|
||||
|
@ -536,18 +531,18 @@ namespace __cxxabiv1
|
|||
|
||||
protected:
|
||||
// Implementation defined member functions.
|
||||
virtual bool
|
||||
virtual bool
|
||||
__do_dyncast(ptrdiff_t __src2dst, __sub_kind __access_path,
|
||||
const __class_type_info* __dst_type, const void* __obj_ptr,
|
||||
const __class_type_info* __src_type, const void* __src_ptr,
|
||||
__dyncast_result& __result) const;
|
||||
|
||||
virtual __sub_kind
|
||||
__do_find_public_src(ptrdiff_t __src2dst, const void* __obj_ptr,
|
||||
virtual __sub_kind
|
||||
__do_find_public_src(ptrdiff_t __src2dst, const void* __obj_ptr,
|
||||
const __class_type_info* __src_type,
|
||||
const void* __src_ptr) const;
|
||||
|
||||
virtual bool
|
||||
|
||||
virtual bool
|
||||
__do_upcast(const __class_type_info* __dst, const void* __obj,
|
||||
__upcast_result& __restrict __result) const;
|
||||
};
|
||||
|
@ -628,4 +623,4 @@ namespace __gnu_cxx
|
|||
|
||||
#pragma GCC visibility pop
|
||||
|
||||
#endif // __CXXABI_H
|
||||
#endif // __CXXABI_H
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
// cxxabi.h subset for inclusion by other library headers -*- C++ -*-
|
||||
// cxxabi.h subset for cancellation -*- C++ -*-
|
||||
|
||||
// Copyright (C) 2007, 2009, 2010 Free Software Foundation, Inc.
|
||||
// Copyright (C) 2007, 2009, 2010, 2011 Free Software Foundation, Inc.
|
||||
//
|
||||
// This file is part of GCC.
|
||||
//
|
||||
|
@ -23,8 +23,9 @@
|
|||
// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
|
||||
// <http://www.gnu.org/licenses/>.
|
||||
|
||||
/** @file cxxabi-forced.h
|
||||
* The header provides an interface to the C++ ABI.
|
||||
/** @file bits/cxxabi_forced.h
|
||||
* This is an internal header file, included by other library headers.
|
||||
* Do not attempt to use it directly. @headername{cxxabi.h}
|
||||
*/
|
||||
|
||||
#ifndef _CXXABI_FORCED_H
|
|
@ -1,5 +1,5 @@
|
|||
// -*- C++ -*- Common throw conditions.
|
||||
// Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2009
|
||||
// Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2009, 2011
|
||||
// Free Software Foundation
|
||||
//
|
||||
// This file is part of GCC.
|
||||
|
@ -27,7 +27,7 @@
|
|||
#include "exception"
|
||||
#include <cstdlib>
|
||||
#include "unwind-cxx.h"
|
||||
#include "exception_defines.h"
|
||||
#include <bits/exception_defines.h>
|
||||
|
||||
extern "C" void
|
||||
__cxxabiv1::__cxa_bad_cast ()
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
// -*- C++ -*- Helpers for calling unextected and terminate
|
||||
// Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009
|
||||
// Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009,
|
||||
// 2011
|
||||
// Free Software Foundation, Inc.
|
||||
//
|
||||
// This file is part of GCC.
|
||||
|
@ -25,7 +26,7 @@
|
|||
|
||||
#include <bits/c++config.h>
|
||||
#include <cstdlib>
|
||||
#include <exception_defines.h>
|
||||
#include <bits/exception_defines.h>
|
||||
#include "unwind-cxx.h"
|
||||
|
||||
using namespace __cxxabiv1;
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
// -*- C++ -*- The GNU C++ exception personality routine.
|
||||
// Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010
|
||||
// Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010,
|
||||
// 2011
|
||||
// Free Software Foundation, Inc.
|
||||
//
|
||||
// This file is part of GCC.
|
||||
|
@ -25,7 +26,7 @@
|
|||
|
||||
#include <bits/c++config.h>
|
||||
#include <cstdlib>
|
||||
#include <exception_defines.h>
|
||||
#include <bits/exception_defines.h>
|
||||
#include <cxxabi.h>
|
||||
#include "unwind-cxx.h"
|
||||
|
||||
|
|
|
@ -29,7 +29,7 @@
|
|||
#define _GLIBCXX_EH_PTR_COMPAT
|
||||
|
||||
#include <exception>
|
||||
#include <exception_ptr.h>
|
||||
#include <bits/exception_ptr.h>
|
||||
#include "unwind-cxx.h"
|
||||
|
||||
using namespace __cxxabiv1;
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
// -*- C++ -*- std::terminate, std::unexpected and friends.
|
||||
// Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2009
|
||||
// Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2009,
|
||||
// 2011
|
||||
// Free Software Foundation
|
||||
//
|
||||
// This file is part of GCC.
|
||||
|
@ -27,7 +28,7 @@
|
|||
#include "exception"
|
||||
#include <cstdlib>
|
||||
#include "unwind-cxx.h"
|
||||
#include "exception_defines.h"
|
||||
#include <bits/exception_defines.h>
|
||||
|
||||
using namespace __cxxabiv1;
|
||||
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
// Exception Handling support header for -*- C++ -*-
|
||||
|
||||
// Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003,
|
||||
// 2004, 2005, 2006, 2007, 2008, 2009, 2010
|
||||
// 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011
|
||||
// Free Software Foundation
|
||||
//
|
||||
// This file is part of GCC.
|
||||
|
@ -148,8 +148,8 @@ _GLIBCXX_END_NAMESPACE
|
|||
|
||||
#if (defined(__GXX_EXPERIMENTAL_CXX0X__) \
|
||||
&& defined(_GLIBCXX_ATOMIC_BUILTINS_4))
|
||||
#include <exception_ptr.h>
|
||||
#include <nested_exception.h>
|
||||
#include <bits/exception_ptr.h>
|
||||
#include <bits/nested_exception.h>
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
// -fno-exceptions Support -*- C++ -*-
|
||||
|
||||
// Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2006, 2007, 2008, 2009
|
||||
// Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2006, 2007, 2008, 2009,
|
||||
// 2011
|
||||
// Free Software Foundation, Inc.
|
||||
//
|
||||
// This file is part of the GNU ISO C++ Library. This library is free
|
||||
|
@ -23,12 +24,9 @@
|
|||
// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
|
||||
// <http://www.gnu.org/licenses/>.
|
||||
|
||||
//
|
||||
// ISO C++ 14882: 19.1 Exception classes
|
||||
//
|
||||
|
||||
/** @file exception_defines.h
|
||||
* This is a Standard C++ Library header.
|
||||
/** @file bits/exception_defines.h
|
||||
* This is an internal header file, included by other library headers.
|
||||
* Do not attempt to use it directly. @headername{exception}
|
||||
*/
|
||||
|
||||
#ifndef _EXCEPTION_DEFINES_H
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
// Exception Handling support header (exception_ptr class) for -*- C++ -*-
|
||||
|
||||
// Copyright (C) 2008, 2009, 2010 Free Software Foundation
|
||||
// Copyright (C) 2008, 2009, 2010, 2011 Free Software Foundation
|
||||
//
|
||||
// This file is part of GCC.
|
||||
//
|
||||
|
@ -23,7 +23,7 @@
|
|||
// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
|
||||
// <http://www.gnu.org/licenses/>.
|
||||
|
||||
/** @file exception_ptr.h
|
||||
/** @file bits/exception_ptr.h
|
||||
* This is an internal header file, included by other library headers.
|
||||
* Do not attempt to use it directly. @headername{exception}
|
||||
*/
|
||||
|
@ -34,7 +34,7 @@
|
|||
#pragma GCC visibility push(default)
|
||||
|
||||
#include <bits/c++config.h>
|
||||
#include <exception_defines.h>
|
||||
#include <bits/exception_defines.h>
|
||||
|
||||
#if !defined(_GLIBCXX_ATOMIC_BUILTINS_4)
|
||||
# error This platform does not support exception propagation.
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
// Definition of _Hash_bytes. -*- C++ -*-
|
||||
|
||||
// Copyright (C) 2010 Free Software Foundation, Inc.
|
||||
// Copyright (C) 2010, 2011 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
|
||||
|
@ -32,7 +32,7 @@
|
|||
// function apears to be better in both speed and hash quality, and
|
||||
// FNV is provided primarily for backward compatibility.
|
||||
|
||||
#include <bits/c++config.h>
|
||||
#include <bits/hash_bytes.h>
|
||||
|
||||
namespace
|
||||
{
|
||||
|
@ -63,8 +63,8 @@ namespace
|
|||
#endif
|
||||
}
|
||||
|
||||
namespace std
|
||||
{
|
||||
_GLIBCXX_BEGIN_NAMESPACE(std)
|
||||
|
||||
#if __SIZEOF_SIZE_T__ == 4
|
||||
|
||||
// Implementation of Murmur hash for 32-bit size_t.
|
||||
|
@ -97,7 +97,7 @@ namespace std
|
|||
hash ^= static_cast<unsigned char>(buf[1]) << 8;
|
||||
case 1:
|
||||
hash ^= static_cast<unsigned char>(buf[0]);
|
||||
hash *= m;
|
||||
hash *= m;
|
||||
};
|
||||
|
||||
// Do a few final mixes of the hash.
|
||||
|
@ -182,4 +182,5 @@ namespace std
|
|||
{ return _Hash_bytes(ptr, len, seed); }
|
||||
|
||||
#endif /* __SIZEOF_SIZE_T__ */
|
||||
}
|
||||
|
||||
_GLIBCXX_END_NAMESPACE
|
||||
|
|
56
libstdc++-v3/libsupc++/hash_bytes.h
Normal file
56
libstdc++-v3/libsupc++/hash_bytes.h
Normal file
|
@ -0,0 +1,56 @@
|
|||
// Declarations for hash functions. -*- C++ -*-
|
||||
|
||||
// Copyright (C) 2010, 2011 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 3, 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.
|
||||
|
||||
// Under Section 7 of GPL version 3, you are granted additional
|
||||
// permissions described in the GCC Runtime Library Exception, version
|
||||
// 3.1, as published by the Free Software Foundation.
|
||||
|
||||
// You should have received a copy of the GNU General Public License and
|
||||
// a copy of the GCC Runtime Library Exception along with this program;
|
||||
// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
|
||||
// <http://www.gnu.org/licenses/>.
|
||||
|
||||
/** @file bits/hash_bytes.h
|
||||
* This is an internal header file, included by other library headers.
|
||||
* Do not attempt to use it directly. @headername{functional}
|
||||
*/
|
||||
|
||||
#ifndef _HASH_BYTES_H
|
||||
#define _HASH_BYTES_H 1
|
||||
|
||||
#pragma GCC system_header
|
||||
|
||||
#include <bits/c++config.h>
|
||||
|
||||
_GLIBCXX_BEGIN_NAMESPACE(std)
|
||||
|
||||
// Hash function implementation for the nontrivial specialization.
|
||||
// All of them are based on a primitive that hashes a pointer to a
|
||||
// byte array. The actual hash algorithm is not guaranteed to stay
|
||||
// the same from release to release -- it may be updated or tuned to
|
||||
// improve hash quality or speed.
|
||||
size_t
|
||||
_Hash_bytes(const void* __ptr, size_t __len, size_t __seed);
|
||||
|
||||
// A similar hash primitive, using the FNV hash algorithm. This
|
||||
// algorithm is guaranteed to stay the same from release to release.
|
||||
// (although it might not produce the same values on different
|
||||
// machines.)
|
||||
size_t
|
||||
_Fnv_hash_bytes(const void* __ptr, size_t __len, size_t __seed);
|
||||
|
||||
_GLIBCXX_END_NAMESPACE
|
||||
|
||||
#endif
|
|
@ -1,6 +1,6 @@
|
|||
// Nested Exception support header (nested_exception class) for -*- C++ -*-
|
||||
|
||||
// Copyright (C) 2009, 2010 Free Software Foundation, Inc.
|
||||
// Copyright (C) 2009, 2010, 2011 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
|
||||
|
@ -22,7 +22,7 @@
|
|||
// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
|
||||
// <http://www.gnu.org/licenses/>.
|
||||
|
||||
/** @file nested_exception.h
|
||||
/** @file bits/nested_exception.h
|
||||
* This is an internal header file, included by other library headers.
|
||||
* Do not attempt to use it directly. @headername{exception}
|
||||
*/
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
// Support routines for the -*- C++ -*- dynamic memory management.
|
||||
|
||||
// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2004, 2009
|
||||
// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2004, 2009, 2011
|
||||
// Free Software Foundation
|
||||
//
|
||||
// This file is part of GCC.
|
||||
|
@ -26,7 +26,7 @@
|
|||
|
||||
#include <bits/c++config.h>
|
||||
#include <cstdlib>
|
||||
#include <exception_defines.h>
|
||||
#include <bits/exception_defines.h>
|
||||
#include "new"
|
||||
|
||||
using std::new_handler;
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
// Support routines for the -*- C++ -*- dynamic memory management.
|
||||
// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2004, 2009
|
||||
// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2004, 2009, 2011
|
||||
// Free Software Foundation
|
||||
//
|
||||
// This file is part of GCC.
|
||||
|
@ -24,7 +24,7 @@
|
|||
// <http://www.gnu.org/licenses/>.
|
||||
|
||||
#include <bits/c++config.h>
|
||||
#include <exception_defines.h>
|
||||
#include <bits/exception_defines.h>
|
||||
#include "new"
|
||||
|
||||
using std::new_handler;
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
// RTTI support for -*- C++ -*-
|
||||
// Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
|
||||
// 2003, 2004, 2005, 2006, 2007, 2009, 2010
|
||||
// 2003, 2004, 2005, 2006, 2007, 2009, 2010, 2011
|
||||
// Free Software Foundation
|
||||
//
|
||||
// This file is part of GCC.
|
||||
|
@ -34,6 +34,10 @@
|
|||
#pragma GCC system_header
|
||||
|
||||
#include <exception>
|
||||
#ifdef __GXX_EXPERIMENTAL_CXX0X__
|
||||
#include <bits/hash_bytes.h>
|
||||
#endif
|
||||
|
||||
|
||||
#pragma GCC visibility push(default)
|
||||
|
||||
|
@ -78,11 +82,6 @@ namespace __cxxabiv1
|
|||
|
||||
namespace std
|
||||
{
|
||||
#ifdef __GXX_EXPERIMENTAL_CXX0X__
|
||||
size_t
|
||||
_Hash_bytes(const void* __ptr, size_t __len, size_t __seed);
|
||||
#endif
|
||||
|
||||
/**
|
||||
* @brief Part of RTTI.
|
||||
*
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
// New abi Support -*- C++ -*-
|
||||
|
||||
// Copyright (C) 2000, 2001, 2003, 2004, 2009 Free Software Foundation, Inc.
|
||||
// Copyright (C) 2000, 2001, 2003, 2004, 2009, 2011
|
||||
// Free Software Foundation, Inc.
|
||||
//
|
||||
// This file is part of GCC.
|
||||
//
|
||||
|
@ -28,7 +29,7 @@
|
|||
#include <cxxabi.h>
|
||||
#include <new>
|
||||
#include <exception>
|
||||
#include <exception_defines.h>
|
||||
#include <bits/exception_defines.h>
|
||||
#include "unwind-cxx.h"
|
||||
|
||||
namespace __cxxabiv1
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
// Verbose terminate_handler -*- C++ -*-
|
||||
|
||||
// Copyright (C) 2001, 2002, 2004, 2005, 2009 Free Software Foundation
|
||||
// Copyright (C) 2001, 2002, 2004, 2005, 2009, 2011 Free Software Foundation
|
||||
//
|
||||
// This file is part of the GNU ISO C++ Library. This library is free
|
||||
// software; you can redistribute it and/or modify it under the
|
||||
|
@ -27,7 +27,7 @@
|
|||
#if _GLIBCXX_HOSTED
|
||||
#include <cstdlib>
|
||||
#include <exception>
|
||||
#include <exception_defines.h>
|
||||
#include <bits/exception_defines.h>
|
||||
#include <cxxabi.h>
|
||||
# include <cstdio>
|
||||
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
|
||||
// -*- C++ -*-
|
||||
|
||||
// Copyright (C) 2006, 2007, 2009, 2010 Free Software Foundation, Inc.
|
||||
// Copyright (C) 2006, 2007, 2009, 2010, 2011 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
|
||||
|
@ -22,4 +22,4 @@
|
|||
|
||||
#include <vector>
|
||||
|
||||
// { dg-error "Cannot use -D_GLIBCXX_PROFILE with " "" { target *-*-* } 223 }
|
||||
// { dg-error "Cannot use -D_GLIBCXX_PROFILE with " "" { target *-*-* } 220 }
|
||||
|
|
Loading…
Add table
Reference in a new issue