Commit e133ace8 by Paolo Carlini Committed by Paolo Carlini

re PR libstdc++/31426 (TR1 includes do not work with -std=c++0x)

2007-05-31  Paolo Carlini  <pcarlini@suse.de>

	PR libstdc++/31426
	* include/bits/c++config: Remove namespace association bits
	from tr1 to std.

	* include/ext/type_traits.h (__promote, __promote2,
	__promote3, __promote4): Add.

	* include/bits/hashtable.h: New.
	* include/bits/functional_hash.h: Likewise.
	* include/tr1/hashtable.h: Likewise.

	* include/tr1_impl/random: New.
	* include/tr1_impl/cinttypes: Likewise.
	* include/tr1_impl/cstdlib: Likewise.
	* include/tr1_impl/unordered_map: Likewise.
	* include/tr1_impl/cstdio: Likewise.
	* include/tr1_impl/boost_shared_ptr.h: Likewise.
	* include/tr1_impl/cctype: Likewise.
	* include/tr1_impl/random.tcc: Likewise.
	* include/tr1_impl/tuple: Likewise.
	* include/tr1_impl/functional_hash.h: Likewise.
	* include/tr1_impl/hashtable: Likewise.
	* include/tr1_impl/cmath: Likewise.
	* include/tr1_impl/type_traitsfwd.h: Likewise.
	* include/tr1_impl/hashtable_policy.h: Likewise.
	* include/tr1_impl/cfenv: Likewise.
	* include/tr1_impl/unordered_set: Likewise.
	* include/tr1_impl/functional: Likewise.
	* include/tr1_impl/utility: Likewise.
	* include/tr1_impl/complex: Likewise.
	* include/tr1_impl/type_traits: Likewise.
	* include/tr1_impl/cwchar: Likewise.
	* include/tr1_impl/cstdint: Likewise.
	* include/tr1_impl/regex: Likewise.
	* include/tr1_impl/array: Likewise.
	* include/tr1_impl/cwctype: Likewise.

	* include/tr1/type_traitsfwd.h: Remove.
	* include/tr1/boost_shared_ptr.h: Likewise.
	* include/tr1/common.h: Likewise.
	* include/tr1/hashtable: Likewise.
	* include/tr1/hashtable_policy.h: Likewise.
	* include/tr1/random.tcc: Likewise.

	* include/c_global/cinttypes: Include tr1_impl/cinttypes.
	* include/c_global/cstdlib: Likewise for cstdlib.
	* include/c_global/cstdio: Likewise for cstdio.
	* include/c_global/cctype: Likewise for cctype.
	* include/c_global/cmath: Likewise for cmath.
	* include/c_global/cfenv: Likewise for cfenv.
	* include/c_global/cwchar: Likewise for cwchar.
	* include/c_global/cstdint: Likewise for cstdint.
	* include/c_global/cwctype: Likewise for cwctype.
	* include/tr1/cinttypes: Likewise for cinttypes.
	* include/tr1/cstdlib: Likewise for cstdlib.
	* include/tr1/cstdio: Likewise for cstdio.
	* include/tr1/cctype: Likewise for cctype.
	* include/tr1/cmath: Likewise for cmath.
	* include/tr1/cfenv: Likewise for cfenv.
	* include/tr1/cwchar: Likewise for cwchar.
	* include/tr1/cstdint: Likewise for cstdint.
	* include/tr1/cwctype: Likewise for cwctype.
	* include/tr1/functional_hash.h: Likewise for functional_hash.

	* include/std/tuple: Include tr1_impl/tuple.
	* include/std/utility: Likewise for utility.
	* include/std/type_traits: Likewise for type_traits.
	(is_pod): Just forward to __is_pod.
	(has_trivial_default_constructor): Just forward to
	__has_trivial_constructor.
	(has_trivial_copy_constructor): Just forward to __has_trivial_copy.
	(has_trivial_assign): Just forward to __has_trivial_assign.
	(has_trivial_destructor): Just forward to __has_trivial_destructor.
	(has_nothrow_default_constructor): Just forward to
	__has_nothrow_constructor.
	(has_nothrow_copy_constructor): Just forward to __has_nothrow_copy.
	(has_nothrow_assign): Just forward to __has_nothrow_assign.
	(is_base_of): Just forward to __is_base_of.
	(is_signed, is_unsigned): Implement according to the C++0x
	specifications.
	* include/std/memory: Likewise for memory.
	* include/std/regex: Likewise for regex.
	* include/std/random: Likewise for random.
	* include/std/unordered_map: Likewise for unordered_map.
	* include/std/unordered_set: Likewise for unordered_set.
	* include/std/functional: Likewise for functional.
	* include/std/complex: Likewise for complex.
	* include/std/array: Likewise for array.
	* include/tr1/tuple: Likewise for tuple.
	* include/tr1/utility: Likewise for utility.
	* include/tr1/type_traits: Likewise for type_traits
	* include/tr1/memory: Likewise for memory.
	* include/tr1/regex: Likewise for regex.
	* include/tr1/random: Likewise for random.
	* include/tr1/unordered_map: Likewise for unordered_map.
	* include/tr1/unordered_set: Likewise for unordered_set.
	* include/tr1/functional: Likewise for functional.
	* include/tr1/complex: Likewise for complex.
	* include/tr1/array: Likewise for array.

	* include/c_global/ctgmath: Tweak.
	* include/c_global/cstdarg: Likewise.
	* include/c_global/ctime: Likewise.
	* include/c_global/climits: Likewise.
	* include/c_global/cfloat: Likewise.	
	* include/c_global/ccomplex: Likewise.
	* include/c_global/cstdbool: Likewise.

	* include/tr1/poly_laguerre.tcc: Tweak, don't use _GLIBCXX_TR1.
	* include/tr1/riemann_zeta.tcc: Likewise.
	* include/tr1/beta_function.tcc: Likewise.
	* include/tr1/exp_integral.tcc: Likewise.
	* include/tr1/hypergeometric.tcc: Likewise.
	* include/tr1/modified_bessel_func.tcc: Likewise.
	* include/tr1/legendre_function.tcc: Likewise.
	* include/tr1/special_function_util.h: Likewise.
	* include/tr1/bessel_function.tcc: Likewise.
	* include/tr1/poly_hermite.tcc: Likewise.
	* include/tr1/ell_integral.tcc: Likewise.
	* include/tr1/gamma.tcc: Likewise.
	* include/tr1/stdlib.h: Likewise.
	* include/tr1/math.h: Likewise.

	* include/tr1/complex.h: Minor tweaks.
	* include/tr1/wctype.h: Likewise.
	* include/tr1/wchar.h: Likewise.
	* include/tr1/inttypes.h: Likewise.
	* include/tr1/tgmath.h: Likewise.
	* include/tr1/cstdbool: Likewise.
	* include/tr1/cfloat: Likewise.
	* include/tr1/ccomplex: Likewise.
	* include/tr1/ctime: Likewise.
	* include/tr1/climits: Likewise.
	* include/tr1/ctgmath: Likewise.
	* include/tr1/cstdarg: Likewise.

	* testsuite/tr1/headers.cc: Move...
	* testsuite/tr1/headers/all.cc: ... here.
	* testsuite/tr1/using_namespace_std_tr1.cc: Move...
	* testsuite/tr1/headers/c++200x/using_namespace_std_tr1.cc: ... here.
	* testsuite/tr1/headers/using_namespace_std_tr1.cc ... here.
	* testsuite/tr1/headers/c++200x/using_namespace_std_tr1.cc: New.

	* testsuite/20_util/tuple/requirements/explicit_instantiation.cc:
	Adjust namespace.
	* testsuite/20_util/has_nothrow_copy_constructor/value.cc: Adjust to
	the C++0x requirements.
	* testsuite/20_util/has_nothrow_default_constructor/value.cc: Likewise.
	* testsuite/20_util/has_trivial_copy_constructor/value.cc: Likewise.
	* testsuite/20_util/has_trivial_default_constructor/value.cc: Likewise.

	* testsuite/20_util/make_signed/requirements/typedefs_neg.cc: Adjust
	dg-error lines.
	* testsuite/20_util/make_unsigned/requirements/typedefs_neg.cc:
	Likewise.
	* testsuite/20_util/headers/type_traits/types_std_c++0x_neg.cc:
	Un-xfail.

	* testsuite/20_util/is_signed/value.cc: New.
	* testsuite/20_util/is_signed/requirements/typedefs.cc: Likewise.
	* testsuite/20_util/is_signed/requirements/explicit_instantiation.cc:
	Likewise.
	* testsuite/20_util/is_unsigned/value.cc: Likewise..
	* testsuite/20_util/is_unsigned/requirements/typedefs.cc: Likewise.
	* testsuite/20_util/is_unsigned/requirements/explicit_instantiation.cc:
	Likewise.

	* include/Makefile.am: Adjust.	
	* include/Makefile.in: Regenerate.

From-SVN: r125244
parent 9cbff7e7
2007-05-31 Paolo Carlini <pcarlini@suse.de> 2007-05-31 Paolo Carlini <pcarlini@suse.de>
PR libstdc++/31426
* include/bits/c++config: Remove namespace association bits
from tr1 to std.
* include/ext/type_traits.h (__promote, __promote2,
__promote3, __promote4): Add.
* include/bits/hashtable.h: New.
* include/bits/functional_hash.h: Likewise.
* include/tr1/hashtable.h: Likewise.
* include/tr1_impl/random: New.
* include/tr1_impl/cinttypes: Likewise.
* include/tr1_impl/cstdlib: Likewise.
* include/tr1_impl/unordered_map: Likewise.
* include/tr1_impl/cstdio: Likewise.
* include/tr1_impl/boost_shared_ptr.h: Likewise.
* include/tr1_impl/cctype: Likewise.
* include/tr1_impl/random.tcc: Likewise.
* include/tr1_impl/tuple: Likewise.
* include/tr1_impl/functional_hash.h: Likewise.
* include/tr1_impl/hashtable: Likewise.
* include/tr1_impl/cmath: Likewise.
* include/tr1_impl/type_traitsfwd.h: Likewise.
* include/tr1_impl/hashtable_policy.h: Likewise.
* include/tr1_impl/cfenv: Likewise.
* include/tr1_impl/unordered_set: Likewise.
* include/tr1_impl/functional: Likewise.
* include/tr1_impl/utility: Likewise.
* include/tr1_impl/complex: Likewise.
* include/tr1_impl/type_traits: Likewise.
* include/tr1_impl/cwchar: Likewise.
* include/tr1_impl/cstdint: Likewise.
* include/tr1_impl/regex: Likewise.
* include/tr1_impl/array: Likewise.
* include/tr1_impl/cwctype: Likewise.
* include/tr1/type_traitsfwd.h: Remove.
* include/tr1/boost_shared_ptr.h: Likewise.
* include/tr1/common.h: Likewise.
* include/tr1/hashtable: Likewise.
* include/tr1/hashtable_policy.h: Likewise.
* include/tr1/random.tcc: Likewise.
* include/c_global/cinttypes: Include tr1_impl/cinttypes.
* include/c_global/cstdlib: Likewise for cstdlib.
* include/c_global/cstdio: Likewise for cstdio.
* include/c_global/cctype: Likewise for cctype.
* include/c_global/cmath: Likewise for cmath.
* include/c_global/cfenv: Likewise for cfenv.
* include/c_global/cwchar: Likewise for cwchar.
* include/c_global/cstdint: Likewise for cstdint.
* include/c_global/cwctype: Likewise for cwctype.
* include/tr1/cinttypes: Likewise for cinttypes.
* include/tr1/cstdlib: Likewise for cstdlib.
* include/tr1/cstdio: Likewise for cstdio.
* include/tr1/cctype: Likewise for cctype.
* include/tr1/cmath: Likewise for cmath.
* include/tr1/cfenv: Likewise for cfenv.
* include/tr1/cwchar: Likewise for cwchar.
* include/tr1/cstdint: Likewise for cstdint.
* include/tr1/cwctype: Likewise for cwctype.
* include/tr1/functional_hash.h: Likewise for functional_hash.
* include/std/tuple: Include tr1_impl/tuple.
* include/std/utility: Likewise for utility.
* include/std/type_traits: Likewise for type_traits.
(is_pod): Just forward to __is_pod.
(has_trivial_default_constructor): Just forward to
__has_trivial_constructor.
(has_trivial_copy_constructor): Just forward to __has_trivial_copy.
(has_trivial_assign): Just forward to __has_trivial_assign.
(has_trivial_destructor): Just forward to __has_trivial_destructor.
(has_nothrow_default_constructor): Just forward to
__has_nothrow_constructor.
(has_nothrow_copy_constructor): Just forward to __has_nothrow_copy.
(has_nothrow_assign): Just forward to __has_nothrow_assign.
(is_base_of): Just forward to __is_base_of.
(is_signed, is_unsigned): Implement according to the C++0x
specifications.
* include/std/memory: Likewise for memory.
* include/std/regex: Likewise for regex.
* include/std/random: Likewise for random.
* include/std/unordered_map: Likewise for unordered_map.
* include/std/unordered_set: Likewise for unordered_set.
* include/std/functional: Likewise for functional.
* include/std/complex: Likewise for complex.
* include/std/array: Likewise for array.
* include/tr1/tuple: Likewise for tuple.
* include/tr1/utility: Likewise for utility.
* include/tr1/type_traits: Likewise for type_traits
* include/tr1/memory: Likewise for memory.
* include/tr1/regex: Likewise for regex.
* include/tr1/random: Likewise for random.
* include/tr1/unordered_map: Likewise for unordered_map.
* include/tr1/unordered_set: Likewise for unordered_set.
* include/tr1/functional: Likewise for functional.
* include/tr1/complex: Likewise for complex.
* include/tr1/array: Likewise for array.
* include/c_global/ctgmath: Tweak.
* include/c_global/cstdarg: Likewise.
* include/c_global/ctime: Likewise.
* include/c_global/climits: Likewise.
* include/c_global/cfloat: Likewise.
* include/c_global/ccomplex: Likewise.
* include/c_global/cstdbool: Likewise.
* include/tr1/poly_laguerre.tcc: Tweak, don't use _GLIBCXX_TR1.
* include/tr1/riemann_zeta.tcc: Likewise.
* include/tr1/beta_function.tcc: Likewise.
* include/tr1/exp_integral.tcc: Likewise.
* include/tr1/hypergeometric.tcc: Likewise.
* include/tr1/modified_bessel_func.tcc: Likewise.
* include/tr1/legendre_function.tcc: Likewise.
* include/tr1/special_function_util.h: Likewise.
* include/tr1/bessel_function.tcc: Likewise.
* include/tr1/poly_hermite.tcc: Likewise.
* include/tr1/ell_integral.tcc: Likewise.
* include/tr1/gamma.tcc: Likewise.
* include/tr1/stdlib.h: Likewise.
* include/tr1/math.h: Likewise.
* include/tr1/complex.h: Minor tweaks.
* include/tr1/wctype.h: Likewise.
* include/tr1/wchar.h: Likewise.
* include/tr1/inttypes.h: Likewise.
* include/tr1/tgmath.h: Likewise.
* include/tr1/cstdbool: Likewise.
* include/tr1/cfloat: Likewise.
* include/tr1/ccomplex: Likewise.
* include/tr1/ctime: Likewise.
* include/tr1/climits: Likewise.
* include/tr1/ctgmath: Likewise.
* include/tr1/cstdarg: Likewise.
* testsuite/tr1/headers.cc: Move...
* testsuite/tr1/headers/all.cc: ... here.
* testsuite/tr1/using_namespace_std_tr1.cc: Move...
* testsuite/tr1/headers/c++200x/using_namespace_std_tr1.cc: ... here.
* testsuite/tr1/headers/using_namespace_std_tr1.cc ... here.
* testsuite/tr1/headers/c++200x/using_namespace_std_tr1.cc: New.
* testsuite/20_util/tuple/requirements/explicit_instantiation.cc:
Adjust namespace.
* testsuite/20_util/has_nothrow_copy_constructor/value.cc: Adjust to
the C++0x requirements.
* testsuite/20_util/has_nothrow_default_constructor/value.cc: Likewise.
* testsuite/20_util/has_trivial_copy_constructor/value.cc: Likewise.
* testsuite/20_util/has_trivial_default_constructor/value.cc: Likewise.
* testsuite/20_util/make_signed/requirements/typedefs_neg.cc: Adjust
dg-error lines.
* testsuite/20_util/make_unsigned/requirements/typedefs_neg.cc:
Likewise.
* testsuite/20_util/headers/type_traits/types_std_c++0x_neg.cc:
Un-xfail.
* testsuite/20_util/is_signed/value.cc: New.
* testsuite/20_util/is_signed/requirements/typedefs.cc: Likewise.
* testsuite/20_util/is_signed/requirements/explicit_instantiation.cc:
Likewise.
* testsuite/20_util/is_unsigned/value.cc: Likewise..
* testsuite/20_util/is_unsigned/requirements/typedefs.cc: Likewise.
* testsuite/20_util/is_unsigned/requirements/explicit_instantiation.cc:
Likewise.
* include/Makefile.am: Adjust.
* include/Makefile.in: Regenerate.
2007-05-31 Paolo Carlini <pcarlini@suse.de>
PR c++/32158 (libstdc++ bits) PR c++/32158 (libstdc++ bits)
* include/bits/stl_uninitialized.h (__uninitialized_copy_aux, * include/bits/stl_uninitialized.h (__uninitialized_copy_aux,
__uninitialized_fill_aux, __uninitialized_fill_n_aux): __uninitialized_fill_aux, __uninitialized_fill_n_aux):
......
...@@ -82,8 +82,10 @@ bits_headers = \ ...@@ -82,8 +82,10 @@ bits_headers = \
${bits_srcdir}/deque.tcc \ ${bits_srcdir}/deque.tcc \
${bits_srcdir}/fstream.tcc \ ${bits_srcdir}/fstream.tcc \
${bits_srcdir}/functexcept.h \ ${bits_srcdir}/functexcept.h \
${bits_srcdir}/functional_hash.h \
${bits_srcdir}/gslice.h \ ${bits_srcdir}/gslice.h \
${bits_srcdir}/gslice_array.h \ ${bits_srcdir}/gslice_array.h \
${bits_srcdir}/hashtable.h \
${bits_srcdir}/indirect_array.h \ ${bits_srcdir}/indirect_array.h \
${bits_srcdir}/ios_base.h \ ${bits_srcdir}/ios_base.h \
${bits_srcdir}/istream.tcc \ ${bits_srcdir}/istream.tcc \
...@@ -540,7 +542,6 @@ tr1_headers = \ ...@@ -540,7 +542,6 @@ tr1_headers = \
${tr1_srcdir}/array \ ${tr1_srcdir}/array \
${tr1_srcdir}/bessel_function.tcc \ ${tr1_srcdir}/bessel_function.tcc \
${tr1_srcdir}/beta_function.tcc \ ${tr1_srcdir}/beta_function.tcc \
${tr1_srcdir}/boost_shared_ptr.h \
${tr1_srcdir}/ccomplex \ ${tr1_srcdir}/ccomplex \
${tr1_srcdir}/cctype \ ${tr1_srcdir}/cctype \
${tr1_srcdir}/cfenv \ ${tr1_srcdir}/cfenv \
...@@ -548,7 +549,6 @@ tr1_headers = \ ...@@ -548,7 +549,6 @@ tr1_headers = \
${tr1_srcdir}/cinttypes \ ${tr1_srcdir}/cinttypes \
${tr1_srcdir}/climits \ ${tr1_srcdir}/climits \
${tr1_srcdir}/cmath \ ${tr1_srcdir}/cmath \
${tr1_srcdir}/common.h \
${tr1_srcdir}/complex \ ${tr1_srcdir}/complex \
${tr1_srcdir}/complex.h \ ${tr1_srcdir}/complex.h \
${tr1_srcdir}/cstdarg \ ${tr1_srcdir}/cstdarg \
...@@ -568,9 +568,8 @@ tr1_headers = \ ...@@ -568,9 +568,8 @@ tr1_headers = \
${tr1_srcdir}/functional \ ${tr1_srcdir}/functional \
${tr1_srcdir}/functional_hash.h \ ${tr1_srcdir}/functional_hash.h \
${tr1_srcdir}/gamma.tcc \ ${tr1_srcdir}/gamma.tcc \
${tr1_srcdir}/hashtable \
${tr1_srcdir}/hypergeometric.tcc \ ${tr1_srcdir}/hypergeometric.tcc \
${tr1_srcdir}/hashtable_policy.h \ ${tr1_srcdir}/hashtable.h \
${tr1_srcdir}/inttypes.h \ ${tr1_srcdir}/inttypes.h \
${tr1_srcdir}/limits.h \ ${tr1_srcdir}/limits.h \
${tr1_srcdir}/math.h \ ${tr1_srcdir}/math.h \
...@@ -580,7 +579,6 @@ tr1_headers = \ ...@@ -580,7 +579,6 @@ tr1_headers = \
${tr1_srcdir}/poly_laguerre.tcc \ ${tr1_srcdir}/poly_laguerre.tcc \
${tr1_srcdir}/legendre_function.tcc \ ${tr1_srcdir}/legendre_function.tcc \
${tr1_srcdir}/random \ ${tr1_srcdir}/random \
${tr1_srcdir}/random.tcc \
${tr1_srcdir}/regex \ ${tr1_srcdir}/regex \
${tr1_srcdir}/riemann_zeta.tcc \ ${tr1_srcdir}/riemann_zeta.tcc \
${tr1_srcdir}/special_function_util.h \ ${tr1_srcdir}/special_function_util.h \
...@@ -592,7 +590,6 @@ tr1_headers = \ ...@@ -592,7 +590,6 @@ tr1_headers = \
${tr1_srcdir}/tgmath.h \ ${tr1_srcdir}/tgmath.h \
${tr1_srcdir}/tuple \ ${tr1_srcdir}/tuple \
${tr1_srcdir}/type_traits \ ${tr1_srcdir}/type_traits \
${tr1_srcdir}/type_traitsfwd.h \
${tr1_srcdir}/unordered_set \ ${tr1_srcdir}/unordered_set \
${tr1_srcdir}/unordered_map \ ${tr1_srcdir}/unordered_map \
${tr1_srcdir}/utility \ ${tr1_srcdir}/utility \
...@@ -600,6 +597,36 @@ tr1_headers = \ ...@@ -600,6 +597,36 @@ tr1_headers = \
${tr1_srcdir}/wctype.h ${tr1_srcdir}/wctype.h
tr1_impl_srcdir = ${glibcxx_srcdir}/include/tr1_impl
tr1_impl_builddir = ./tr1_impl
tr1_impl_headers = \
${tr1_impl_srcdir}/array \
${tr1_impl_srcdir}/boost_shared_ptr.h \
${tr1_impl_srcdir}/cctype \
${tr1_impl_srcdir}/cfenv \
${tr1_impl_srcdir}/cinttypes \
${tr1_impl_srcdir}/cmath \
${tr1_impl_srcdir}/complex \
${tr1_impl_srcdir}/cstdint \
${tr1_impl_srcdir}/cstdio \
${tr1_impl_srcdir}/cstdlib \
${tr1_impl_srcdir}/cwchar \
${tr1_impl_srcdir}/cwctype \
${tr1_impl_srcdir}/functional \
${tr1_impl_srcdir}/functional_hash.h \
${tr1_impl_srcdir}/hashtable \
${tr1_impl_srcdir}/hashtable_policy.h \
${tr1_impl_srcdir}/random \
${tr1_impl_srcdir}/random.tcc \
${tr1_impl_srcdir}/regex \
${tr1_impl_srcdir}/tuple \
${tr1_impl_srcdir}/type_traits \
${tr1_impl_srcdir}/type_traitsfwd.h \
${tr1_impl_srcdir}/unordered_map \
${tr1_impl_srcdir}/unordered_set \
${tr1_impl_srcdir}/utility
# This is the common subset of C++ files that all three "C" header models use. # This is the common subset of C++ files that all three "C" header models use.
c_base_srcdir = $(C_INCLUDE_DIR) c_base_srcdir = $(C_INCLUDE_DIR)
c_base_builddir = . c_base_builddir = .
...@@ -793,7 +820,7 @@ endif ...@@ -793,7 +820,7 @@ endif
allstamped = \ allstamped = \
stamp-std stamp-bits stamp-c_base stamp-c_base_extra \ stamp-std stamp-bits stamp-c_base stamp-c_base_extra \
stamp-c_compatibility stamp-backward stamp-ext stamp-pb \ stamp-c_compatibility stamp-backward stamp-ext stamp-pb \
stamp-tr1 stamp-debug stamp-host stamp-tr1 stamp-tr1-impl stamp-debug stamp-host
# List of all files that are created by explicit building, editing, or # List of all files that are created by explicit building, editing, or
# catenation. # catenation.
...@@ -932,6 +959,15 @@ stamp-tr1: ${tr1_headers} ...@@ -932,6 +959,15 @@ stamp-tr1: ${tr1_headers}
fi ;\ fi ;\
$(STAMP) stamp-tr1 $(STAMP) stamp-tr1
stamp-tr1-impl: ${tr1_impl_headers}
@if [ ! -d "${tr1_impl_builddir}" ]; then \
mkdir -p ${tr1_impl_builddir} ;\
fi ;\
if [ ! -f stamp-tr1-impl ]; then \
(cd ${tr1_impl_builddir} && $(LN_S) $? . || true) ;\
fi ;\
$(STAMP) stamp-tr1-impl
stamp-debug: ${debug_headers} stamp-debug: ${debug_headers}
@if [ ! -d "${debug_builddir}" ]; then \ @if [ ! -d "${debug_builddir}" ]; then \
mkdir -p ${debug_builddir} ;\ mkdir -p ${debug_builddir} ;\
...@@ -1158,6 +1194,9 @@ install-headers: ...@@ -1158,6 +1194,9 @@ install-headers:
$(mkinstalldirs) $(DESTDIR)${gxx_include_dir}/${tr1_builddir} $(mkinstalldirs) $(DESTDIR)${gxx_include_dir}/${tr1_builddir}
for file in ${tr1_headers}; do \ for file in ${tr1_headers}; do \
$(INSTALL_DATA) $${file} $(DESTDIR)${gxx_include_dir}/${tr1_builddir}; done $(INSTALL_DATA) $${file} $(DESTDIR)${gxx_include_dir}/${tr1_builddir}; done
$(mkinstalldirs) $(DESTDIR)${gxx_include_dir}/${tr1_impl_builddir}
for file in ${tr1_impl_headers}; do \
$(INSTALL_DATA) $${file} $(DESTDIR)${gxx_include_dir}/${tr1_impl_builddir}; done
$(mkinstalldirs) $(DESTDIR)${gxx_include_dir}/${c_base_builddir} $(mkinstalldirs) $(DESTDIR)${gxx_include_dir}/${c_base_builddir}
for file in ${c_base_headers}; do \ for file in ${c_base_headers}; do \
$(INSTALL_DATA) $${file} $(DESTDIR)${gxx_include_dir}/${c_base_builddir}; done $(INSTALL_DATA) $${file} $(DESTDIR)${gxx_include_dir}/${c_base_builddir}; done
...@@ -1200,8 +1239,10 @@ clean-local: ...@@ -1200,8 +1239,10 @@ clean-local:
# developer tries to create them via make in the include build # developer tries to create them via make in the include build
# directory. (This is more of an example of how this kind of rule can # directory. (This is more of an example of how this kind of rule can
# be made.) # be made.)
.PRECIOUS: $(std_headers) $(c_base_headers) $(tr1_headers) $(ext_headers) .PRECIOUS: $(std_headers) $(c_base_headers) $(tr1_headers) $(tr1_impl_headers)
$(ext_headers)
$(std_headers): ; @: $(std_headers): ; @:
$(c_base_headers): ; @: $(c_base_headers): ; @:
$(tr1_headers): ; @: $(tr1_headers): ; @:
$(tr1_impl_headers): ; @:
$(ext_headers): ; @: $(ext_headers): ; @:
...@@ -327,8 +327,10 @@ bits_headers = \ ...@@ -327,8 +327,10 @@ bits_headers = \
${bits_srcdir}/deque.tcc \ ${bits_srcdir}/deque.tcc \
${bits_srcdir}/fstream.tcc \ ${bits_srcdir}/fstream.tcc \
${bits_srcdir}/functexcept.h \ ${bits_srcdir}/functexcept.h \
${bits_srcdir}/functional_hash.h \
${bits_srcdir}/gslice.h \ ${bits_srcdir}/gslice.h \
${bits_srcdir}/gslice_array.h \ ${bits_srcdir}/gslice_array.h \
${bits_srcdir}/hashtable.h \
${bits_srcdir}/indirect_array.h \ ${bits_srcdir}/indirect_array.h \
${bits_srcdir}/ios_base.h \ ${bits_srcdir}/ios_base.h \
${bits_srcdir}/istream.tcc \ ${bits_srcdir}/istream.tcc \
...@@ -781,7 +783,6 @@ tr1_headers = \ ...@@ -781,7 +783,6 @@ tr1_headers = \
${tr1_srcdir}/array \ ${tr1_srcdir}/array \
${tr1_srcdir}/bessel_function.tcc \ ${tr1_srcdir}/bessel_function.tcc \
${tr1_srcdir}/beta_function.tcc \ ${tr1_srcdir}/beta_function.tcc \
${tr1_srcdir}/boost_shared_ptr.h \
${tr1_srcdir}/ccomplex \ ${tr1_srcdir}/ccomplex \
${tr1_srcdir}/cctype \ ${tr1_srcdir}/cctype \
${tr1_srcdir}/cfenv \ ${tr1_srcdir}/cfenv \
...@@ -789,7 +790,6 @@ tr1_headers = \ ...@@ -789,7 +790,6 @@ tr1_headers = \
${tr1_srcdir}/cinttypes \ ${tr1_srcdir}/cinttypes \
${tr1_srcdir}/climits \ ${tr1_srcdir}/climits \
${tr1_srcdir}/cmath \ ${tr1_srcdir}/cmath \
${tr1_srcdir}/common.h \
${tr1_srcdir}/complex \ ${tr1_srcdir}/complex \
${tr1_srcdir}/complex.h \ ${tr1_srcdir}/complex.h \
${tr1_srcdir}/cstdarg \ ${tr1_srcdir}/cstdarg \
...@@ -809,9 +809,8 @@ tr1_headers = \ ...@@ -809,9 +809,8 @@ tr1_headers = \
${tr1_srcdir}/functional \ ${tr1_srcdir}/functional \
${tr1_srcdir}/functional_hash.h \ ${tr1_srcdir}/functional_hash.h \
${tr1_srcdir}/gamma.tcc \ ${tr1_srcdir}/gamma.tcc \
${tr1_srcdir}/hashtable \
${tr1_srcdir}/hypergeometric.tcc \ ${tr1_srcdir}/hypergeometric.tcc \
${tr1_srcdir}/hashtable_policy.h \ ${tr1_srcdir}/hashtable.h \
${tr1_srcdir}/inttypes.h \ ${tr1_srcdir}/inttypes.h \
${tr1_srcdir}/limits.h \ ${tr1_srcdir}/limits.h \
${tr1_srcdir}/math.h \ ${tr1_srcdir}/math.h \
...@@ -821,7 +820,6 @@ tr1_headers = \ ...@@ -821,7 +820,6 @@ tr1_headers = \
${tr1_srcdir}/poly_laguerre.tcc \ ${tr1_srcdir}/poly_laguerre.tcc \
${tr1_srcdir}/legendre_function.tcc \ ${tr1_srcdir}/legendre_function.tcc \
${tr1_srcdir}/random \ ${tr1_srcdir}/random \
${tr1_srcdir}/random.tcc \
${tr1_srcdir}/regex \ ${tr1_srcdir}/regex \
${tr1_srcdir}/riemann_zeta.tcc \ ${tr1_srcdir}/riemann_zeta.tcc \
${tr1_srcdir}/special_function_util.h \ ${tr1_srcdir}/special_function_util.h \
...@@ -833,13 +831,41 @@ tr1_headers = \ ...@@ -833,13 +831,41 @@ tr1_headers = \
${tr1_srcdir}/tgmath.h \ ${tr1_srcdir}/tgmath.h \
${tr1_srcdir}/tuple \ ${tr1_srcdir}/tuple \
${tr1_srcdir}/type_traits \ ${tr1_srcdir}/type_traits \
${tr1_srcdir}/type_traitsfwd.h \
${tr1_srcdir}/unordered_set \ ${tr1_srcdir}/unordered_set \
${tr1_srcdir}/unordered_map \ ${tr1_srcdir}/unordered_map \
${tr1_srcdir}/utility \ ${tr1_srcdir}/utility \
${tr1_srcdir}/wchar.h \ ${tr1_srcdir}/wchar.h \
${tr1_srcdir}/wctype.h ${tr1_srcdir}/wctype.h
tr1_impl_srcdir = ${glibcxx_srcdir}/include/tr1_impl
tr1_impl_builddir = ./tr1_impl
tr1_impl_headers = \
${tr1_impl_srcdir}/array \
${tr1_impl_srcdir}/boost_shared_ptr.h \
${tr1_impl_srcdir}/cctype \
${tr1_impl_srcdir}/cfenv \
${tr1_impl_srcdir}/cinttypes \
${tr1_impl_srcdir}/cmath \
${tr1_impl_srcdir}/complex \
${tr1_impl_srcdir}/cstdint \
${tr1_impl_srcdir}/cstdio \
${tr1_impl_srcdir}/cstdlib \
${tr1_impl_srcdir}/cwchar \
${tr1_impl_srcdir}/cwctype \
${tr1_impl_srcdir}/functional \
${tr1_impl_srcdir}/functional_hash.h \
${tr1_impl_srcdir}/hashtable \
${tr1_impl_srcdir}/hashtable_policy.h \
${tr1_impl_srcdir}/random \
${tr1_impl_srcdir}/random.tcc \
${tr1_impl_srcdir}/regex \
${tr1_impl_srcdir}/tuple \
${tr1_impl_srcdir}/type_traits \
${tr1_impl_srcdir}/type_traitsfwd.h \
${tr1_impl_srcdir}/unordered_map \
${tr1_impl_srcdir}/unordered_set \
${tr1_impl_srcdir}/utility
# This is the common subset of C++ files that all three "C" header models use. # This is the common subset of C++ files that all three "C" header models use.
c_base_srcdir = $(C_INCLUDE_DIR) c_base_srcdir = $(C_INCLUDE_DIR)
...@@ -1017,7 +1043,7 @@ PCHFLAGS = -Winvalid-pch -Wno-deprecated -x c++-header $(CXXFLAGS) ...@@ -1017,7 +1043,7 @@ PCHFLAGS = -Winvalid-pch -Wno-deprecated -x c++-header $(CXXFLAGS)
allstamped = \ allstamped = \
stamp-std stamp-bits stamp-c_base stamp-c_base_extra \ stamp-std stamp-bits stamp-c_base stamp-c_base_extra \
stamp-c_compatibility stamp-backward stamp-ext stamp-pb \ stamp-c_compatibility stamp-backward stamp-ext stamp-pb \
stamp-tr1 stamp-debug stamp-host stamp-tr1 stamp-tr1-impl stamp-debug stamp-host
# List of all files that are created by explicit building, editing, or # List of all files that are created by explicit building, editing, or
...@@ -1326,6 +1352,15 @@ stamp-tr1: ${tr1_headers} ...@@ -1326,6 +1352,15 @@ stamp-tr1: ${tr1_headers}
fi ;\ fi ;\
$(STAMP) stamp-tr1 $(STAMP) stamp-tr1
stamp-tr1-impl: ${tr1_impl_headers}
@if [ ! -d "${tr1_impl_builddir}" ]; then \
mkdir -p ${tr1_impl_builddir} ;\
fi ;\
if [ ! -f stamp-tr1-impl ]; then \
(cd ${tr1_impl_builddir} && $(LN_S) $? . || true) ;\
fi ;\
$(STAMP) stamp-tr1-impl
stamp-debug: ${debug_headers} stamp-debug: ${debug_headers}
@if [ ! -d "${debug_builddir}" ]; then \ @if [ ! -d "${debug_builddir}" ]; then \
mkdir -p ${debug_builddir} ;\ mkdir -p ${debug_builddir} ;\
...@@ -1540,6 +1575,9 @@ install-headers: ...@@ -1540,6 +1575,9 @@ install-headers:
$(mkinstalldirs) $(DESTDIR)${gxx_include_dir}/${tr1_builddir} $(mkinstalldirs) $(DESTDIR)${gxx_include_dir}/${tr1_builddir}
for file in ${tr1_headers}; do \ for file in ${tr1_headers}; do \
$(INSTALL_DATA) $${file} $(DESTDIR)${gxx_include_dir}/${tr1_builddir}; done $(INSTALL_DATA) $${file} $(DESTDIR)${gxx_include_dir}/${tr1_builddir}; done
$(mkinstalldirs) $(DESTDIR)${gxx_include_dir}/${tr1_impl_builddir}
for file in ${tr1_impl_headers}; do \
$(INSTALL_DATA) $${file} $(DESTDIR)${gxx_include_dir}/${tr1_impl_builddir}; done
$(mkinstalldirs) $(DESTDIR)${gxx_include_dir}/${c_base_builddir} $(mkinstalldirs) $(DESTDIR)${gxx_include_dir}/${c_base_builddir}
for file in ${c_base_headers}; do \ for file in ${c_base_headers}; do \
$(INSTALL_DATA) $${file} $(DESTDIR)${gxx_include_dir}/${c_base_builddir}; done $(INSTALL_DATA) $${file} $(DESTDIR)${gxx_include_dir}/${c_base_builddir}; done
...@@ -1579,10 +1617,12 @@ clean-local: ...@@ -1579,10 +1617,12 @@ clean-local:
# developer tries to create them via make in the include build # developer tries to create them via make in the include build
# directory. (This is more of an example of how this kind of rule can # directory. (This is more of an example of how this kind of rule can
# be made.) # be made.)
.PRECIOUS: $(std_headers) $(c_base_headers) $(tr1_headers) $(ext_headers) .PRECIOUS: $(std_headers) $(c_base_headers) $(tr1_headers) $(tr1_impl_headers)
$(ext_headers)
$(std_headers): ; @: $(std_headers): ; @:
$(c_base_headers): ; @: $(c_base_headers): ; @:
$(tr1_headers): ; @: $(tr1_headers): ; @:
$(tr1_impl_headers): ; @:
$(ext_headers): ; @: $(ext_headers): ; @:
# Tell versions [3.59,3.63) of GNU make to not export all variables. # Tell versions [3.59,3.63) of GNU make to not export all variables.
# Otherwise a system limit (for SysV at least) may be exceeded. # Otherwise a system limit (for SysV at least) may be exceeded.
......
...@@ -71,10 +71,6 @@ ...@@ -71,10 +71,6 @@
# define _GLIBCXX_NAMESPACE_ASSOCIATION_DEBUG 1 # define _GLIBCXX_NAMESPACE_ASSOCIATION_DEBUG 1
#endif #endif
#ifdef __GXX_EXPERIMENTAL_CXX0X__
# define _GLIBCXX_NAMESPACE_ASSOCIATION_CXX0X 1
#endif
#define _GLIBCXX_NAMESPACE_ASSOCIATION_VERSION #define _GLIBCXX_NAMESPACE_ASSOCIATION_VERSION
// Macros for namespace scope. // Macros for namespace scope.
...@@ -155,18 +151,6 @@ namespace __gnu_cxx ...@@ -155,18 +151,6 @@ namespace __gnu_cxx
#endif #endif
#endif #endif
// Namespace associations for C++0x, TR1 in std.
#if _GLIBCXX_NAMESPACE_ASSOCIATION_CXX0X
namespace std
{
namespace __cxx200x { }
using namespace __cxx200x __attribute__ ((strong));
}
# define _GLIBCXX_TR1 __cxx200x
#else
# define _GLIBCXX_TR1 tr1
#endif
// Define if compatibility should be provided for -mlong-double-64. // Define if compatibility should be provided for -mlong-double-64.
#undef _GLIBCXX_LONG_DOUBLE_COMPAT #undef _GLIBCXX_LONG_DOUBLE_COMPAT
......
// functional_hash.h header -*- C++ -*-
// Copyright (C) 2007 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
// terms of the GNU General Public License as published by the
// Free Software Foundation; either version 2, or (at your option)
// any later version.
// This library is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
// You should have received a copy of the GNU General Public License
// along with this library; see the file COPYING. If not, write to
// the Free Software Foundation, 51 Franklin Street, Fifth Floor,
// Boston, MA 02110-1301, USA.
// As a special exception, you may use this file as part of a free software
// library without restriction. Specifically, if other files instantiate
// templates or use macros or inline functions from this file, or you compile
// this file and link it with other files to produce an executable, this
// file does not by itself cause the resulting executable to be covered by
// the GNU General Public License. This exception does not however
// invalidate any other reasons why the executable file might be covered by
// the GNU General Public License.
/** @file functional_hash.h
* This is an internal header file, included by other library headers.
* You should not attempt to use it directly.
*/
#ifndef _FUNCTIONAL_HASH_H
#define _FUNCTIONAL_HASH_H 1
#pragma GCC system_header
#ifndef __GXX_EXPERIMENTAL_CXX0X__
# include <c++0x_warning.h>
#endif
#if defined(_GLIBCXX_INCLUDE_AS_TR1)
# error C++0x header cannot be included from TR1 header
#endif
#if defined(_GLIBCXX_INCLUDE_AS_CXX0X)
# include <tr1_impl/functional_hash.h>
#else
# define _GLIBCXX_INCLUDE_AS_CXX0X
# define _GLIBCXX_BEGIN_NAMESPACE_TR1
# define _GLIBCXX_END_NAMESPACE_TR1
# define _GLIBCXX_TR1
# include <tr1_impl/functional_hash.h>
# undef _GLIBCXX_TR1
# undef _GLIBCXX_END_NAMESPACE_TR1
# undef _GLIBCXX_BEGIN_NAMESPACE_TR1
# undef _GLIBCXX_INCLUDE_AS_CXX0X
#endif
#endif // _FUNCTIONAL_HASH_H
// hashtable.h header -*- C++ -*-
// Copyright (C) 2007 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
// terms of the GNU General Public License as published by the
// Free Software Foundation; either version 2, or (at your option)
// any later version.
// This library is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
// You should have received a copy of the GNU General Public License
// along with this library; see the file COPYING. If not, write to
// the Free Software Foundation, 51 Franklin Street, Fifth Floor,
// Boston, MA 02110-1301, USA.
// As a special exception, you may use this file as part of a free software
// library without restriction. Specifically, if other files instantiate
// templates or use macros or inline functions from this file, or you compile
// this file and link it with other files to produce an executable, this
// file does not by itself cause the resulting executable to be covered by
// the GNU General Public License. This exception does not however
// invalidate any other reasons why the executable file might be covered by
// the GNU General Public License.
/** @file hashtable.h
* This is an internal header file, included by other library headers.
* You should not attempt to use it directly.
*/
#ifndef _HASHTABLE_H
#define _HASHTABLE_H 1
#pragma GCC system_header
#ifndef __GXX_EXPERIMENTAL_CXX0X__
# include <c++0x_warning.h>
#endif
#if defined(_GLIBCXX_INCLUDE_AS_TR1)
# error C++0x header cannot be included from TR1 header
#endif
#if defined(_GLIBCXX_INCLUDE_AS_CXX0X)
# include <tr1_impl/hashtable>
#else
# define _GLIBCXX_INCLUDE_AS_CXX0X
# define _GLIBCXX_BEGIN_NAMESPACE_TR1
# define _GLIBCXX_END_NAMESPACE_TR1
# define _GLIBCXX_TR1
# include <tr1_impl/hashtable>
# undef _GLIBCXX_TR1
# undef _GLIBCXX_END_NAMESPACE_TR1
# undef _GLIBCXX_END_NAMESPACE_TR1
# undef _GLIBCXX_INCLUDE_AS_CXX0X
#endif
#endif // _HASHTABLE_H
...@@ -36,11 +36,14 @@ ...@@ -36,11 +36,14 @@
#ifndef _GLIBCXX_CCOMPLEX #ifndef _GLIBCXX_CCOMPLEX
#define _GLIBCXX_CCOMPLEX 1 #define _GLIBCXX_CCOMPLEX 1
#ifdef __GXX_EXPERIMENTAL_CXX0X__ #ifndef __GXX_EXPERIMENTAL_CXX0X__
# include <tr1/ccomplex>
#else
# include <c++0x_warning.h> # include <c++0x_warning.h>
#endif #endif
#endif #if defined(_GLIBCXX_INCLUDE_AS_TR1)
# error C++0x header cannot be included from TR1 header
#endif
#include <complex>
#endif
// -*- C++ -*- forwarding header. // -*- C++ -*- forwarding header.
// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006 // Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,
// 2006, 2007
// Free Software Foundation, Inc. // Free Software Foundation, Inc.
// //
// This file is part of the GNU ISO C++ Library. This library is free // This file is part of the GNU ISO C++ Library. This library is free
...@@ -84,7 +85,22 @@ _GLIBCXX_BEGIN_NAMESPACE(std) ...@@ -84,7 +85,22 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
_GLIBCXX_END_NAMESPACE _GLIBCXX_END_NAMESPACE
#ifdef __GXX_EXPERIMENTAL_CXX0X__ #ifdef __GXX_EXPERIMENTAL_CXX0X__
# include <tr1/cctype> # if defined(_GLIBCXX_INCLUDE_AS_TR1)
# error C++0x header cannot be included from TR1 header
# endif
# if defined(_GLIBCXX_INCLUDE_AS_CXX0X)
# include <tr1_impl/cctype>
# else
# define _GLIBCXX_INCLUDE_AS_CXX0X
# define _GLIBCXX_BEGIN_NAMESPACE_TR1
# define _GLIBCXX_END_NAMESPACE_TR1
# define _GLIBCXX_TR1
# include <tr1_impl/cctype>
# undef _GLIBCXX_TR1
# undef _GLIBCXX_END_NAMESPACE_TR1
# undef _GLIBCXX_BEGIN_NAMESPACE_TR1
# undef _GLIBCXX_INCLUDE_AS_CXX0X
# endif
#endif #endif
#endif #endif
...@@ -36,11 +36,28 @@ ...@@ -36,11 +36,28 @@
#ifndef _GLIBCXX_CFENV #ifndef _GLIBCXX_CFENV
#define _GLIBCXX_CFENV 1 #define _GLIBCXX_CFENV 1
#ifdef __GXX_EXPERIMENTAL_CXX0X__ #ifndef __GXX_EXPERIMENTAL_CXX0X__
# include <tr1/cfenv>
#else
# include <c++0x_warning.h> # include <c++0x_warning.h>
#endif #endif
#endif #if defined(_GLIBCXX_INCLUDE_AS_TR1)
# error C++0x header cannot be included from TR1 header
#endif
#include <bits/c++config.h>
#if defined(_GLIBCXX_INCLUDE_AS_CXX0X)
# include <tr1_impl/cfenv>
#else
# define _GLIBCXX_INCLUDE_AS_CXX0X
# define _GLIBCXX_BEGIN_NAMESPACE_TR1
# define _GLIBCXX_END_NAMESPACE_TR1
# define _GLIBCXX_TR1
# include <tr1_impl/cfenv>
# undef _GLIBCXX_TR1
# undef _GLIBCXX_END_NAMESPACE_TR1
# undef _GLIBCXX_BEGIN_NAMESPACE_TR1
# undef _GLIBCXX_INCLUDE_AS_CXX0X
#endif
#endif
...@@ -50,7 +50,15 @@ ...@@ -50,7 +50,15 @@
#define _GLIBCXX_CFLOAT 1 #define _GLIBCXX_CFLOAT 1
#ifdef __GXX_EXPERIMENTAL_CXX0X__ #ifdef __GXX_EXPERIMENTAL_CXX0X__
# include <tr1/cfloat> # if defined(_GLIBCXX_INCLUDE_AS_TR1)
# error C++0x header cannot be included from TR1 header
# endif
# ifndef DECIMAL_DIG
# define DECIMAL_DIG __DECIMAL_DIG__
# endif
# ifndef FLT_EVAL_METHOD
# define FLT_EVAL_METHOD __FLT_EVAL_METHOD__
# endif
#endif #endif
#endif #endif
...@@ -36,11 +36,28 @@ ...@@ -36,11 +36,28 @@
#ifndef _GLIBCXX_CINTTYPES #ifndef _GLIBCXX_CINTTYPES
#define _GLIBCXX_CINTTYPES 1 #define _GLIBCXX_CINTTYPES 1
#ifdef __GXX_EXPERIMENTAL_CXX0X__ #ifndef __GXX_EXPERIMENTAL_CXX0X__
# include <tr1/cinttypes>
#else
# include <c++0x_warning.h> # include <c++0x_warning.h>
#endif #endif
#endif #if defined(_GLIBCXX_INCLUDE_AS_TR1)
# error C++0x header cannot be included from TR1 header
#endif
#include <cstdint>
#if defined(_GLIBCXX_INCLUDE_AS_CXX0X)
# include <tr1_impl/cinttypes>
#else
# define _GLIBCXX_INCLUDE_AS_CXX0X
# define _GLIBCXX_BEGIN_NAMESPACE_TR1
# define _GLIBCXX_END_NAMESPACE_TR1
# define _GLIBCXX_TR1
# include <tr1_impl/cinttypes>
# undef _GLIBCXX_TR1
# undef _GLIBCXX_END_NAMESPACE_TR1
# undef _GLIBCXX_BEGIN_NAMESPACE_TR1
# undef _GLIBCXX_INCLUDE_AS_CXX0X
#endif
#endif
// -*- C++ -*- forwarding header. // -*- C++ -*- forwarding header.
// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006 // Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,
// 2006, 2007
// Free Software Foundation, Inc. // Free Software Foundation, Inc.
// //
// This file is part of the GNU ISO C++ Library. This library is free // This file is part of the GNU ISO C++ Library. This library is free
...@@ -49,8 +50,16 @@ ...@@ -49,8 +50,16 @@
#ifndef _GLIBCXX_CLIMITS #ifndef _GLIBCXX_CLIMITS
#define _GLIBCXX_CLIMITS 1 #define _GLIBCXX_CLIMITS 1
#ifdef __GXX_EXPERIMENTAL_CXX0X__ #ifndef LLONG_MIN
# include <tr1/climits> #define LLONG_MIN -__LONG_LONG_MAX__ - 1
#endif
#ifndef LLONG_MAX
#define LLONG_MAX __LONG_LONG_MAX__
#endif
#ifndef ULLONG_MAX
#define ULLONG_MAX __LONG_LONG_MAX__ * 2ULL + 1
#endif #endif
#endif #endif
// -*- C++ -*- C forwarding header. // -*- C++ -*- C forwarding header.
// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006 // Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,
// 2006, 2007
// Free Software Foundation, Inc. // Free Software Foundation, Inc.
// //
// This file is part of the GNU ISO C++ Library. This library is free // This file is part of the GNU ISO C++ Library. This library is free
...@@ -82,7 +83,17 @@ _GLIBCXX_BEGIN_NAMESPACE(std) ...@@ -82,7 +83,17 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
// Forward declaration of a helper function. This really should be // Forward declaration of a helper function. This really should be
// an `exported' forward declaration. // an `exported' forward declaration.
template<typename _Tp> _Tp __cmath_power(_Tp, unsigned int); template<typename _Tp>
_Tp __cmath_power(_Tp, unsigned int);
template<typename _Tp>
inline _Tp
__pow_helper(_Tp __x, int __n)
{
return __n < 0
? _Tp(1)/__cmath_power(__x, -__n)
: __cmath_power(__x, __n);
}
inline double inline double
abs(double __x) abs(double __x)
...@@ -123,8 +134,8 @@ _GLIBCXX_BEGIN_NAMESPACE(std) ...@@ -123,8 +134,8 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
{ return __builtin_asinl(__x); } { return __builtin_asinl(__x); }
template<typename _Tp> template<typename _Tp>
inline typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, inline typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
double>::__type double>::__type
asin(_Tp __x) asin(_Tp __x)
{ return __builtin_asin(__x); } { return __builtin_asin(__x); }
...@@ -139,8 +150,8 @@ _GLIBCXX_BEGIN_NAMESPACE(std) ...@@ -139,8 +150,8 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
{ return __builtin_atanl(__x); } { return __builtin_atanl(__x); }
template<typename _Tp> template<typename _Tp>
inline typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value, inline typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value,
double>::__type double>::__type
atan(_Tp __x) atan(_Tp __x)
{ return __builtin_atan(__x); } { return __builtin_atan(__x); }
...@@ -155,11 +166,12 @@ _GLIBCXX_BEGIN_NAMESPACE(std) ...@@ -155,11 +166,12 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
{ return __builtin_atan2l(__y, __x); } { return __builtin_atan2l(__y, __x); }
template<typename _Tp, typename _Up> template<typename _Tp, typename _Up>
inline typename __gnu_cxx::__enable_if<__is_integer<_Tp>::__value inline typename __gnu_cxx::__promote_2<_Tp, _Up>::__type
&& __is_integer<_Up>::__value,
double>::__type
atan2(_Tp __y, _Up __x) atan2(_Tp __y, _Up __x)
{ return __builtin_atan2(__y, __x); } {
typedef typename __gnu_cxx::__promote_2<_Tp, _Up>::__type __type;
return atan2(__type(__y), __type(__x));
}
using ::ceil; using ::ceil;
...@@ -341,15 +353,6 @@ _GLIBCXX_BEGIN_NAMESPACE(std) ...@@ -341,15 +353,6 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
modf(long double __x, long double* __iptr) modf(long double __x, long double* __iptr)
{ return __builtin_modfl(__x, __iptr); } { return __builtin_modfl(__x, __iptr); }
template<typename _Tp>
inline _Tp
__pow_helper(_Tp __x, int __n)
{
return __n < 0
? _Tp(1)/__cmath_power(__x, -__n)
: __cmath_power(__x, __n);
}
using ::pow; using ::pow;
inline float inline float
...@@ -360,6 +363,7 @@ _GLIBCXX_BEGIN_NAMESPACE(std) ...@@ -360,6 +363,7 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
pow(long double __x, long double __y) pow(long double __x, long double __y)
{ return __builtin_powl(__x, __y); } { return __builtin_powl(__x, __y); }
// DR 550.
inline double inline double
pow(double __x, int __i) pow(double __x, int __i)
{ return __builtin_powi(__x, __i); } { return __builtin_powi(__x, __i); }
...@@ -372,6 +376,14 @@ _GLIBCXX_BEGIN_NAMESPACE(std) ...@@ -372,6 +376,14 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
pow(long double __x, int __n) pow(long double __x, int __n)
{ return __builtin_powil(__x, __n); } { return __builtin_powil(__x, __n); }
template<typename _Tp, typename _Up>
inline typename __gnu_cxx::__promote_2<_Tp, _Up>::__type
pow(_Tp __x, _Up __y)
{
typedef typename __gnu_cxx::__promote_2<_Tp, _Up>::__type __type;
return pow(__type(__x), __type(__y));
}
using ::sin; using ::sin;
inline float inline float
...@@ -597,7 +609,23 @@ _GLIBCXX_END_NAMESPACE ...@@ -597,7 +609,23 @@ _GLIBCXX_END_NAMESPACE
#endif #endif
#ifdef __GXX_EXPERIMENTAL_CXX0X__ #ifdef __GXX_EXPERIMENTAL_CXX0X__
# include <tr1/cmath> # if defined(_GLIBCXX_INCLUDE_AS_TR1)
# error C++0x header cannot be included from TR1 header
# endif
# include <type_traits>
# if defined(_GLIBCXX_INCLUDE_AS_CXX0X)
# include <tr1_impl/cmath>
# else
# define _GLIBCXX_INCLUDE_AS_CXX0X
# define _GLIBCXX_BEGIN_NAMESPACE_TR1
# define _GLIBCXX_END_NAMESPACE_TR1
# define _GLIBCXX_TR1
# include <tr1_impl/cmath>
# undef _GLIBCXX_TR1
# undef _GLIBCXX_END_NAMESPACE_TR1
# undef _GLIBCXX_BEGIN_NAMESPACE_TR1
# undef _GLIBCXX_INCLUDE_AS_CXX0X
# endif
#endif #endif
#endif #endif
...@@ -61,8 +61,4 @@ _GLIBCXX_BEGIN_NAMESPACE(std) ...@@ -61,8 +61,4 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
_GLIBCXX_END_NAMESPACE _GLIBCXX_END_NAMESPACE
#ifdef __GXX_EXPERIMENTAL_CXX0X__
# include <tr1/cstdarg>
#endif
#endif #endif
...@@ -36,10 +36,13 @@ ...@@ -36,10 +36,13 @@
#ifndef _GLIBCXX_CSTDBOOL #ifndef _GLIBCXX_CSTDBOOL
#define _GLIBCXX_CSTDBOOL 1 #define _GLIBCXX_CSTDBOOL 1
#ifdef __GXX_EXPERIMENTAL_CXX0X__ #ifndef __GXX_EXPERIMENTAL_CXX0X__
# include <tr1/cstdbool> # include <c++0x_warning.h>
#else #else
# include <c++0x_warning.h> # include <bits/c++config.h>
# if _GLIBCXX_HAVE_STDBOOL_H
# include_next <stdbool.h>
# endif
#endif #endif
#endif #endif
......
...@@ -36,11 +36,28 @@ ...@@ -36,11 +36,28 @@
#ifndef _GLIBCXX_CSTDINT #ifndef _GLIBCXX_CSTDINT
#define _GLIBCXX_CSTDINT 1 #define _GLIBCXX_CSTDINT 1
#ifdef __GXX_EXPERIMENTAL_CXX0X__ #ifndef __GXX_EXPERIMENTAL_CXX0X__
# include <tr1/cstdint>
#else
# include <c++0x_warning.h> # include <c++0x_warning.h>
#endif #endif
#endif #if defined(_GLIBCXX_INCLUDE_AS_TR1)
# error C++0x header cannot be included from TR1 header
#endif
#include <bits/c++config.h>
#if defined(_GLIBCXX_INCLUDE_AS_CXX0X)
# include <tr1_impl/cstdint>
#else
# define _GLIBCXX_INCLUDE_AS_CXX0X
# define _GLIBCXX_BEGIN_NAMESPACE_TR1
# define _GLIBCXX_END_NAMESPACE_TR1
# define _GLIBCXX_TR1
# include <tr1_impl/cstdint>
# undef _GLIBCXX_TR1
# undef _GLIBCXX_END_NAMESPACE_TR1
# undef _GLIBCXX_BEGIN_NAMESPACE_TR1
# undef _GLIBCXX_INCLUDE_AS_CXX0X
#endif
#endif
// -*- C++ -*- forwarding header. // -*- C++ -*- forwarding header.
// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006 // Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,
// 2006, 2007
// Free Software Foundation, Inc. // Free Software Foundation, Inc.
// //
// This file is part of the GNU ISO C++ Library. This library is free // This file is part of the GNU ISO C++ Library. This library is free
...@@ -188,7 +189,22 @@ _GLIBCXX_END_NAMESPACE ...@@ -188,7 +189,22 @@ _GLIBCXX_END_NAMESPACE
#endif // _GLIBCXX_USE_C99 #endif // _GLIBCXX_USE_C99
#ifdef __GXX_EXPERIMENTAL_CXX0X__ #ifdef __GXX_EXPERIMENTAL_CXX0X__
# include <tr1/cstdio> # if defined(_GLIBCXX_INCLUDE_AS_TR1)
# error C++0x header cannot be included from TR1 header
# endif
# if defined(_GLIBCXX_INCLUDE_AS_CXX0X)
# include <tr1_impl/cstdio>
# else
# define _GLIBCXX_INCLUDE_AS_CXX0X
# define _GLIBCXX_BEGIN_NAMESPACE_TR1
# define _GLIBCXX_END_NAMESPACE_TR1
# define _GLIBCXX_TR1
# include <tr1_impl/cstdio>
# undef _GLIBCXX_TR1
# undef _GLIBCXX_END_NAMESPACE_TR1
# undef _GLIBCXX_BEGIN_NAMESPACE_TR1
# undef _GLIBCXX_INCLUDE_AS_CXX0X
# endif
#endif #endif
#endif #endif
// -*- C++ -*- forwarding header. // -*- C++ -*- forwarding header.
// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006 // Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,
// 2006, 2007
// Free Software Foundation, Inc. // Free Software Foundation, Inc.
// //
// This file is part of the GNU ISO C++ Library. This library is free // This file is part of the GNU ISO C++ Library. This library is free
...@@ -223,7 +224,22 @@ _GLIBCXX_END_NAMESPACE ...@@ -223,7 +224,22 @@ _GLIBCXX_END_NAMESPACE
#endif // _GLIBCXX_USE_C99 #endif // _GLIBCXX_USE_C99
#ifdef __GXX_EXPERIMENTAL_CXX0X__ #ifdef __GXX_EXPERIMENTAL_CXX0X__
# include <tr1/cstdlib> # if defined(_GLIBCXX_INCLUDE_AS_TR1)
# error C++0x header cannot be included from TR1 header
# endif
# if defined(_GLIBCXX_INCLUDE_AS_CXX0X)
# include <tr1_impl/cstdlib>
# else
# define _GLIBCXX_INCLUDE_AS_CXX0X
# define _GLIBCXX_BEGIN_NAMESPACE_TR1
# define _GLIBCXX_END_NAMESPACE_TR1
# define _GLIBCXX_TR1
# include <tr1_impl/cstdlib>
# undef _GLIBCXX_TR1
# undef _GLIBCXX_END_NAMESPACE_TR1
# undef _GLIBCXX_BEGIN_NAMESPACE_TR1
# undef _GLIBCXX_INCLUDE_AS_CXX0X
# endif
#endif #endif
#endif // !_GLIBCXX_HOSTED #endif // !_GLIBCXX_HOSTED
......
...@@ -36,10 +36,10 @@ ...@@ -36,10 +36,10 @@
#ifndef _GLIBCXX_CTGMATH #ifndef _GLIBCXX_CTGMATH
#define _GLIBCXX_CTGMATH 1 #define _GLIBCXX_CTGMATH 1
#ifdef __GXX_EXPERIMENTAL_CXX0X__ #ifndef __GXX_EXPERIMENTAL_CXX0X__
# include <tr1/ctgmath> # include <c++0x_warning.h>
#else #else
# include <c++0x_warning.h> # include <cmath>
#endif #endif
#endif #endif
......
// -*- C++ -*- forwarding header. // -*- C++ -*- forwarding header.
// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006 // Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,
// 2006, 2007
// Free Software Foundation, Inc. // Free Software Foundation, Inc.
// //
// This file is part of the GNU ISO C++ Library. This library is free // This file is part of the GNU ISO C++ Library. This library is free
...@@ -79,8 +80,4 @@ _GLIBCXX_BEGIN_NAMESPACE(std) ...@@ -79,8 +80,4 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
_GLIBCXX_END_NAMESPACE _GLIBCXX_END_NAMESPACE
#ifdef __GXX_EXPERIMENTAL_CXX0X__
# include <tr1/ctime>
#endif
#endif #endif
...@@ -278,7 +278,22 @@ _GLIBCXX_END_NAMESPACE ...@@ -278,7 +278,22 @@ _GLIBCXX_END_NAMESPACE
#endif //_GLIBCXX_USE_WCHAR_T #endif //_GLIBCXX_USE_WCHAR_T
#ifdef __GXX_EXPERIMENTAL_CXX0X__ #ifdef __GXX_EXPERIMENTAL_CXX0X__
# include <tr1/cwchar> # if defined(_GLIBCXX_INCLUDE_AS_TR1)
# error C++0x header cannot be included from TR1 header
# endif
# if defined(_GLIBCXX_INCLUDE_AS_CXX0X)
# include <tr1_impl/cwchar>
# else
# define _GLIBCXX_INCLUDE_AS_CXX0X
# define _GLIBCXX_BEGIN_NAMESPACE_TR1
# define _GLIBCXX_END_NAMESPACE_TR1
# define _GLIBCXX_TR1
# include <tr1_impl/cwchar>
# undef _GLIBCXX_TR1
# undef _GLIBCXX_END_NAMESPACE_TR1
# undef _GLIBCXX_BEGIN_NAMESPACE_TR1
# undef _GLIBCXX_INCLUDE_AS_CXX0X
# endif
#endif #endif
#endif #endif
// -*- C++ -*- forwarding header. // -*- C++ -*- forwarding header.
// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006 // Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,
// 2006, 2007
// Free Software Foundation, Inc. // Free Software Foundation, Inc.
// //
// This file is part of the GNU ISO C++ Library. This library is free // This file is part of the GNU ISO C++ Library. This library is free
...@@ -109,7 +110,22 @@ _GLIBCXX_END_NAMESPACE ...@@ -109,7 +110,22 @@ _GLIBCXX_END_NAMESPACE
#endif //_GLIBCXX_USE_WCHAR_T #endif //_GLIBCXX_USE_WCHAR_T
#ifdef __GXX_EXPERIMENTAL_CXX0X__ #ifdef __GXX_EXPERIMENTAL_CXX0X__
# include <tr1/cwctype> # if defined(_GLIBCXX_INCLUDE_AS_TR1)
# error C++0x header cannot be included from TR1 header
# endif
# if defined(_GLIBCXX_INCLUDE_AS_CXX0X)
# include <tr1_impl/cwctype>
# else
# define _GLIBCXX_INCLUDE_AS_CXX0X
# define _GLIBCXX_BEGIN_NAMESPACE_TR1
# define _GLIBCXX_END_NAMESPACE_TR1
# define _GLIBCXX_TR1
# include <tr1_impl/cwctype>
# undef _GLIBCXX_TR1
# undef _GLIBCXX_END_NAMESPACE_TR1
# undef _GLIBCXX_BEGIN_NAMESPACE_TR1
# undef _GLIBCXX_INCLUDE_AS_CXX0X
# endif
#endif #endif
#endif #endif
...@@ -159,6 +159,52 @@ _GLIBCXX_BEGIN_NAMESPACE(__gnu_cxx) ...@@ -159,6 +159,52 @@ _GLIBCXX_BEGIN_NAMESPACE(__gnu_cxx)
__is_null_pointer(_Type) __is_null_pointer(_Type)
{ return false; } { return false; }
// For complex and cmath
template<typename _Tp, bool = std::__is_integer<_Tp>::__value>
struct __promote
{ typedef double __type; };
template<typename _Tp>
struct __promote<_Tp, false>
{ typedef _Tp __type; };
template<typename _Tp, typename _Up>
struct __promote_2
{
private:
typedef typename __promote<_Tp>::__type __type1;
typedef typename __promote<_Up>::__type __type2;
public:
typedef __typeof__(__type1() + __type2()) __type;
};
template<typename _Tp, typename _Up, typename _Vp>
struct __promote_3
{
private:
typedef typename __promote<_Tp>::__type __type1;
typedef typename __promote<_Up>::__type __type2;
typedef typename __promote<_Vp>::__type __type3;
public:
typedef __typeof__(__type1() + __type2() + __type3()) __type;
};
template<typename _Tp, typename _Up, typename _Vp, typename _Wp>
struct __promote_4
{
private:
typedef typename __promote<_Tp>::__type __type1;
typedef typename __promote<_Up>::__type __type2;
typedef typename __promote<_Vp>::__type __type3;
typedef typename __promote<_Wp>::__type __type4;
public:
typedef __typeof__(__type1() + __type2() + __type3() + __type4()) __type;
};
_GLIBCXX_END_NAMESPACE _GLIBCXX_END_NAMESPACE
#endif #endif
...@@ -31,16 +31,33 @@ ...@@ -31,16 +31,33 @@
* This is a Standard C++ Library header. * This is a Standard C++ Library header.
*/ */
#ifndef _GLIBCXX_ARRAY #ifndef _GLIBCXX_CXX0X_ARRAY
#define _GLIBCXX_ARRAY 1 #define _GLIBCXX_CXX0X_ARRAY 1
#pragma GCC system_header #pragma GCC system_header
#ifdef __GXX_EXPERIMENTAL_CXX0X__ #ifndef __GXX_EXPERIMENTAL_CXX0X__
# include <tr1/array>
#else
# include <c++0x_warning.h> # include <c++0x_warning.h>
#endif #endif
#endif #if defined(_GLIBCXX_INCLUDE_AS_TR1)
# error C++0x header cannot be included from TR1 header
#endif
#include <bits/stl_algobase.h>
#if defined(_GLIBCXX_INCLUDE_AS_CXX0X)
# include <tr1_impl/array>
#else
# define _GLIBCXX_INCLUDE_AS_CXX0X
# define _GLIBCXX_BEGIN_NAMESPACE_TR1
# define _GLIBCXX_END_NAMESPACE_TR1
# define _GLIBCXX_TR1
# include <tr1_impl/array>
# undef _GLIBCXX_TR1
# undef _GLIBCXX_END_NAMESPACE_TR1
# undef _GLIBCXX_BEGIN_NAMESPACE_TR1
# undef _GLIBCXX_INCLUDE_AS_CXX0X
#endif
#endif // _GLIBCXX_CXX0X_ARRAY
...@@ -47,6 +47,7 @@ ...@@ -47,6 +47,7 @@
#include <bits/c++config.h> #include <bits/c++config.h>
#include <bits/cpp_type_traits.h> #include <bits/cpp_type_traits.h>
#include <ext/type_traits.h>
#include <cmath> #include <cmath>
#include <sstream> #include <sstream>
...@@ -1508,8 +1509,50 @@ _GLIBCXX_BEGIN_NAMESPACE(std) ...@@ -1508,8 +1509,50 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
_GLIBCXX_END_NAMESPACE _GLIBCXX_END_NAMESPACE
_GLIBCXX_BEGIN_NAMESPACE(__gnu_cxx)
// See ext/type_traits.h for the primary template.
template<typename _Tp, typename _Up>
struct __promote_2<std::complex<_Tp>, _Up>
{
public:
typedef std::complex<typename __promote_2<_Tp, _Up>::__type> __type;
};
template<typename _Tp, typename _Up>
struct __promote_2<_Tp, std::complex<_Up> >
{
public:
typedef std::complex<typename __promote_2<_Tp, _Up>::__type> __type;
};
template<typename _Tp, typename _Up>
struct __promote_2<std::complex<_Tp>, std::complex<_Up> >
{
public:
typedef std::complex<typename __promote_2<_Tp, _Up>::__type> __type;
};
_GLIBCXX_END_NAMESPACE
#ifdef __GXX_EXPERIMENTAL_CXX0X__ #ifdef __GXX_EXPERIMENTAL_CXX0X__
# include <tr1/complex> # if defined(_GLIBCXX_INCLUDE_AS_TR1)
# error C++0x header cannot be included from TR1 header
# endif
# include <type_traits>
# if defined(_GLIBCXX_INCLUDE_AS_CXX0X)
# include <tr1_impl/complex>
# else
# define _GLIBCXX_INCLUDE_AS_CXX0X
# define _GLIBCXX_BEGIN_NAMESPACE_TR1
# define _GLIBCXX_END_NAMESPACE_TR1
# define _GLIBCXX_TR1
# include <tr1_impl/complex>
# undef _GLIBCXX_TR1
# undef _GLIBCXX_END_NAMESPACE_TR1
# undef _GLIBCXX_BEGIN_NAMESPACE_TR1
# undef _GLIBCXX_INCLUDE_AS_CXX0X
# endif
#endif #endif
#endif /* _GLIBCXX_COMPLEX */ #endif /* _GLIBCXX_COMPLEX */
...@@ -55,7 +55,29 @@ ...@@ -55,7 +55,29 @@
#include <bits/stl_function.h> #include <bits/stl_function.h>
#ifdef __GXX_EXPERIMENTAL_CXX0X__ #ifdef __GXX_EXPERIMENTAL_CXX0X__
# include <tr1/functional> # if defined(_GLIBCXX_INCLUDE_AS_TR1)
# error C++0x header cannot be included from TR1 header
# endif
# include <cmath>
# include <string>
# include <typeinfo>
# include <ext/type_traits.h>
# include <tuple>
# include <type_traits>
# include <bits/functional_hash.h>
# if defined(_GLIBCXX_INCLUDE_AS_CXX0X)
# include <tr1_impl/functional>
# else
# define _GLIBCXX_INCLUDE_AS_CXX0X
# define _GLIBCXX_BEGIN_NAMESPACE_TR1
# define _GLIBCXX_END_NAMESPACE_TR1
# define _GLIBCXX_TR1
# include <tr1_impl/functional>
# undef _GLIBCXX_TR1
# undef _GLIBCXX_END_NAMESPACE_TR1
# undef _GLIBCXX_BEGIN_NAMESPACE_TR1
# undef _GLIBCXX_INCLUDE_AS_CXX0X
# endif
#endif #endif
#endif /* _GLIBCXX_FUNCTIONAL */ #endif // _GLIBCXX_FUNCTIONAL
...@@ -60,7 +60,33 @@ ...@@ -60,7 +60,33 @@
#include <bits/stl_raw_storage_iter.h> #include <bits/stl_raw_storage_iter.h>
#ifdef __GXX_EXPERIMENTAL_CXX0X__ #ifdef __GXX_EXPERIMENTAL_CXX0X__
# include <tr1/memory> # if defined(_GLIBCXX_INCLUDE_AS_TR1)
# error C++0x header cannot be included from TR1 header
# endif
# include <exception> // std::exception
# include <new> // std::bad_alloc
# include <typeinfo> // std::type_info in get_deleter
# include <bits/stl_algobase.h> // std::swap
# include <iosfwd> // std::basic_ostream
# include <ext/atomicity.h>
# include <ext/concurrence.h>
# include <bits/functexcept.h>
# include <bits/stl_function.h> // std::less
# include <debug/debug.h>
# include <type_traits>
# if defined(_GLIBCXX_INCLUDE_AS_CXX0X)
# include <tr1_impl/boost_shared_ptr.h>
# else
# define _GLIBCXX_INCLUDE_AS_CXX0X
# define _GLIBCXX_BEGIN_NAMESPACE_TR1
# define _GLIBCXX_END_NAMESPACE_TR1
# define _GLIBCXX_TR1
# include <tr1_impl/boost_shared_ptr.h>
# undef _GLIBCXX_TR1
# undef _GLIBCXX_END_NAMESPACE_TR1
# undef _GLIBCXX_BEGIN_NAMESPACE_TR1
# undef _GLIBCXX_INCLUDE_AS_CXX0X
# endif
#endif #endif
#endif /* _GLIBCXX_MEMORY */ #endif /* _GLIBCXX_MEMORY */
...@@ -36,11 +36,38 @@ ...@@ -36,11 +36,38 @@
#pragma GCC system_header #pragma GCC system_header
#ifdef __GXX_EXPERIMENTAL_CXX0X__ #ifndef __GXX_EXPERIMENTAL_CXX0X__
# include <tr1/random>
#else
# include <c++0x_warning.h> # include <c++0x_warning.h>
#endif #endif
#endif #if defined(_GLIBCXX_INCLUDE_AS_TR1)
# error C++0x header cannot be included from TR1 header
#endif
#include <cmath>
#include <cstdio>
#include <cstdlib>
#include <string>
#include <iosfwd>
#include <limits>
#include <ext/type_traits.h>
#include <ext/numeric_traits.h>
#include <bits/concept_check.h>
#include <debug/debug.h>
#include <type_traits>
#if defined(_GLIBCXX_INCLUDE_AS_CXX0X)
# include <tr1_impl/random>
#else
# define _GLIBCXX_INCLUDE_AS_CXX0X
# define _GLIBCXX_BEGIN_NAMESPACE_TR1
# define _GLIBCXX_END_NAMESPACE_TR1
# define _GLIBCXX_TR1
# include <tr1_impl/random>
# undef _GLIBCXX_TR1
# undef _GLIBCXX_END_NAMESPACE_TR1
# undef _GLIBCXX_BEGIN_NAMESPACE_TR1
# undef _GLIBCXX_INCLUDE_AS_CXX0X
#endif
#endif // _GLIBCXX_RANDOM
...@@ -31,16 +31,40 @@ ...@@ -31,16 +31,40 @@
* This is a Standard C++ Library header. * This is a Standard C++ Library header.
*/ */
#ifndef _GLIBCXX_REGEX #ifndef _GLIBCXX_CXX0X_REGEX
#define _GLIBCXX_REGEX 1 #define _GLIBCXX_CXX0X_REGEX 1
#pragma GCC system_header #pragma GCC system_header
#ifdef __GXX_EXPERIMENTAL_CXX0X__ #ifndef __GXX_EXPERIMENTAL_CXX0X__
# include <tr1/regex>
#else
# include <c++0x_warning.h> # include <c++0x_warning.h>
#endif #endif
#endif #if defined(_GLIBCXX_INCLUDE_AS_TR1)
# error C++0x header cannot be included from TR1 header
#endif
#include <algorithm>
#include <bitset>
#include <iterator>
#include <locale>
#include <stdexcept>
#include <string>
#include <vector>
#include <utility>
#if defined(_GLIBCXX_INCLUDE_AS_CXX0X)
# include <tr1_impl/regex>
#else
# define _GLIBCXX_INCLUDE_AS_CXX0X
# define _GLIBCXX_BEGIN_NAMESPACE_TR1
# define _GLIBCXX_END_NAMESPACE_TR1
# define _GLIBCXX_TR1
# include <tr1_impl/regex>
# undef _GLIBCXX_TR1
# undef _GLIBCXX_END_NAMESPACE_TR1
# undef _GLIBCXX_BEGIN_NAMESPACE_TR1
# undef _GLIBCXX_INCLUDE_AS_CXX0X
#endif
#endif // _GLIBCXX_CXX0X_REGEX
...@@ -31,16 +31,33 @@ ...@@ -31,16 +31,33 @@
* This is a Standard C++ Library header. * This is a Standard C++ Library header.
*/ */
#ifndef _GLIBCXX_TUPLE #ifndef _GLIBCXX_CXX0X_TUPLE
#define _GLIBCXX_TUPLE 1 #define _GLIBCXX_CXX0X_TUPLE 1
#pragma GCC system_header #pragma GCC system_header
#ifdef __GXX_EXPERIMENTAL_CXX0X__ #ifndef __GXX_EXPERIMENTAL_CXX0X__
# include <tr1/tuple>
#else
# include <c++0x_warning.h> # include <c++0x_warning.h>
#endif #endif
#endif #if defined(_GLIBCXX_INCLUDE_AS_TR1)
# error C++0x header cannot be included from TR1 header
#endif
#include <utility>
#if defined(_GLIBCXX_INCLUDE_AS_CXX0X)
# include <tr1_impl/tuple>
#else
# define _GLIBCXX_INCLUDE_AS_CXX0X
# define _GLIBCXX_BEGIN_NAMESPACE_TR1
# define _GLIBCXX_END_NAMESPACE_TR1
# define _GLIBCXX_TR1
# include <tr1_impl/tuple>
# undef _GLIBCXX_TR1
# undef _GLIBCXX_END_NAMESPACE_TR1
# undef _GLIBCXX_BEGIN_NAMESPACE_TR1
# undef _GLIBCXX_INCLUDE_AS_CXX0X
#endif
#endif // _GLIBCXX_CXX0X_TUPLE
...@@ -31,18 +31,159 @@ ...@@ -31,18 +31,159 @@
* This is a Standard C++ Library header. * This is a Standard C++ Library header.
*/ */
#ifndef _GLIBCXX_TYPE_TRAITS #ifndef _GLIBCXX_CXX0X_TYPE_TRAITS
#define _GLIBCXX_TYPE_TRAITS 1 #define _GLIBCXX_CXX0X_TYPE_TRAITS 1
#pragma GCC system_header #pragma GCC system_header
#ifdef __GXX_EXPERIMENTAL_CXX0X__ #ifndef __GXX_EXPERIMENTAL_CXX0X__
# include <tr1/type_traits>
#else
# include <c++0x_warning.h> # include <c++0x_warning.h>
#endif #endif
_GLIBCXX_BEGIN_NAMESPACE(std) #if defined(_GLIBCXX_INCLUDE_AS_TR1)
# error C++0x header cannot be included from TR1 header
#endif
#include <cstddef>
#if defined(_GLIBCXX_INCLUDE_AS_CXX0X)
# include <tr1_impl/type_traits>
#else
# define _GLIBCXX_INCLUDE_AS_CXX0X
# define _GLIBCXX_BEGIN_NAMESPACE_TR1
# define _GLIBCXX_END_NAMESPACE_TR1
# define _GLIBCXX_TR1
# include <tr1_impl/type_traits>
# undef _GLIBCXX_TR1
# undef _GLIBCXX_END_NAMESPACE_TR1
# undef _GLIBCXX_BEGIN_NAMESPACE_TR1
# undef _GLIBCXX_INCLUDE_AS_CXX0X
#endif
namespace std
{
template<typename _Tp,
bool = is_integral<_Tp>::value,
bool = is_floating_point<_Tp>::value>
struct __is_signed_helper
: public false_type { };
template<typename _Tp>
struct __is_signed_helper<_Tp, false, true>
: public true_type { };
template<typename _Tp>
struct __is_signed_helper<_Tp, true, false>
: public integral_constant<bool, _Tp(-1) < _Tp(0)>
{ };
template<typename _Tp>
struct is_signed
: public integral_constant<bool, __is_signed_helper<_Tp>::value>
{ };
template<typename _Tp>
struct is_unsigned
: public integral_constant<bool, (is_arithmetic<_Tp>::value
&& !is_signed<_Tp>::value)>
{ };
template<typename _Tp>
struct is_pod
: public integral_constant<bool, __is_pod(_Tp)>
{ };
template<typename _Tp>
struct has_trivial_default_constructor
: public integral_constant<bool, __has_trivial_constructor(_Tp)>
{ };
template<typename _Tp>
struct has_trivial_copy_constructor
: public integral_constant<bool, __has_trivial_copy(_Tp)>
{ };
template<typename _Tp>
struct has_trivial_assign
: public integral_constant<bool, __has_trivial_assign(_Tp)>
{ };
template<typename _Tp>
struct has_trivial_destructor
: public integral_constant<bool, __has_trivial_destructor(_Tp)>
{ };
template<typename _Tp>
struct has_nothrow_default_constructor
: public integral_constant<bool, __has_nothrow_constructor(_Tp)>
{ };
template<typename _Tp>
struct has_nothrow_copy_constructor
: public integral_constant<bool, __has_nothrow_copy(_Tp)>
{ };
template<typename _Tp>
struct has_nothrow_assign
: public integral_constant<bool, __has_nothrow_assign(_Tp)>
{ };
template<typename _Base, typename _Derived>
struct is_base_of
: public integral_constant<bool, __is_base_of(_Base, _Derived)>
{ };
// XXX FIXME
// The C++0x specifications are different, see N2255.
template<typename _From, typename _To>
struct __is_convertible_simple
: public __sfinae_types
{
private:
static __one __test(_To);
static __two __test(...);
static _From __makeFrom();
public:
static const bool __value = sizeof(__test(__makeFrom())) == 1;
};
template<typename _Tp>
struct __is_int_or_cref
{
typedef typename remove_reference<_Tp>::type __rr_Tp;
static const bool __value = (is_integral<_Tp>::value
|| (is_integral<__rr_Tp>::value
&& is_const<__rr_Tp>::value
&& !is_volatile<__rr_Tp>::value));
};
template<typename _From, typename _To,
bool = (is_void<_From>::value || is_void<_To>::value
|| is_function<_To>::value || is_array<_To>::value
// This special case is here only to avoid warnings.
|| (is_floating_point<typename
remove_reference<_From>::type>::value
&& __is_int_or_cref<_To>::__value))>
struct __is_convertible_helper
{
// "An imaginary lvalue of type From...".
static const bool __value = (__is_convertible_simple<typename
add_reference<_From>::type, _To>::__value);
};
template<typename _From, typename _To>
struct __is_convertible_helper<_From, _To, true>
{ static const bool __value = (is_void<_To>::value
|| (__is_int_or_cref<_To>::__value
&& !is_void<_From>::value)); };
template<typename _From, typename _To>
struct is_convertible
: public integral_constant<bool,
__is_convertible_helper<_From, _To>::__value>
{ };
// Define a nested type if some predicate holds. // Define a nested type if some predicate holds.
template<bool, typename _Tp = void> template<bool, typename _Tp = void>
...@@ -131,7 +272,8 @@ _GLIBCXX_BEGIN_NAMESPACE(std) ...@@ -131,7 +272,8 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
// Utility for finding the unsigned versions of signed integral types. // Utility for finding the unsigned versions of signed integral types.
template<typename _Tp> template<typename _Tp>
struct __make_unsigned; struct __make_unsigned
{ typedef _Tp __type; };
template<> template<>
struct __make_unsigned<char> struct __make_unsigned<char>
...@@ -165,16 +307,11 @@ _GLIBCXX_BEGIN_NAMESPACE(std) ...@@ -165,16 +307,11 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
// Select between integral and enum: not possible to be both. // Select between integral and enum: not possible to be both.
template<typename _Tp, template<typename _Tp,
bool _IsInt = is_integral<_Tp>::value, bool _IsInt = is_integral<_Tp>::value,
bool _IsUnsigned = is_unsigned<_Tp>::value,
bool _IsEnum = is_enum<_Tp>::value> bool _IsEnum = is_enum<_Tp>::value>
struct __make_unsigned_selector; struct __make_unsigned_selector;
template<typename _Tp> template<typename _Tp>
struct __make_unsigned_selector<_Tp, true, true, false> struct __make_unsigned_selector<_Tp, true, false>
{ typedef _Tp __type; };
template<typename _Tp>
struct __make_unsigned_selector<_Tp, true, false, false>
{ {
private: private:
typedef __make_unsigned<typename remove_cv<_Tp>::type> __unsignedt; typedef __make_unsigned<typename remove_cv<_Tp>::type> __unsignedt;
...@@ -186,7 +323,7 @@ _GLIBCXX_BEGIN_NAMESPACE(std) ...@@ -186,7 +323,7 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
}; };
template<typename _Tp> template<typename _Tp>
struct __make_unsigned_selector<_Tp, false, false, true> struct __make_unsigned_selector<_Tp, false, true>
{ {
private: private:
// GNU enums start with sizeof short. // GNU enums start with sizeof short.
...@@ -214,7 +351,8 @@ _GLIBCXX_BEGIN_NAMESPACE(std) ...@@ -214,7 +351,8 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
// Utility for finding the signed versions of unsigned integral types. // Utility for finding the signed versions of unsigned integral types.
template<typename _Tp> template<typename _Tp>
struct __make_signed; struct __make_signed
{ typedef _Tp __type; };
template<> template<>
struct __make_signed<char> struct __make_signed<char>
...@@ -248,16 +386,11 @@ _GLIBCXX_BEGIN_NAMESPACE(std) ...@@ -248,16 +386,11 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
// Select between integral and enum: not possible to be both. // Select between integral and enum: not possible to be both.
template<typename _Tp, template<typename _Tp,
bool _IsInt = is_integral<_Tp>::value, bool _IsInt = is_integral<_Tp>::value,
bool _IsSigned = is_signed<_Tp>::value,
bool _IsEnum = is_enum<_Tp>::value> bool _IsEnum = is_enum<_Tp>::value>
struct __make_signed_selector; struct __make_signed_selector;
template<typename _Tp> template<typename _Tp>
struct __make_signed_selector<_Tp, true, true, false> struct __make_signed_selector<_Tp, true, false>
{ typedef _Tp __type; };
template<typename _Tp>
struct __make_signed_selector<_Tp, true, false, false>
{ {
private: private:
typedef __make_signed<typename remove_cv<_Tp>::type> __signedt; typedef __make_signed<typename remove_cv<_Tp>::type> __signedt;
...@@ -269,7 +402,7 @@ _GLIBCXX_BEGIN_NAMESPACE(std) ...@@ -269,7 +402,7 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
}; };
template<typename _Tp> template<typename _Tp>
struct __make_signed_selector<_Tp, false, false, true> struct __make_signed_selector<_Tp, false, true>
{ {
private: private:
// GNU enums start with sizeof short. // GNU enums start with sizeof short.
...@@ -293,25 +426,7 @@ _GLIBCXX_BEGIN_NAMESPACE(std) ...@@ -293,25 +426,7 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
// Integral, but don't define. // Integral, but don't define.
template<> template<>
struct make_signed<bool>; struct make_signed<bool>;
}
#endif // _GLIBCXX_CXX0X_TYPE_TRAITS
template<typename _Tp>
struct has_nothrow_default_constructor
: public integral_constant<bool, is_pod<_Tp>::value> { };
template<typename _Tp>
struct has_nothrow_copy_constructor
: public integral_constant<bool, is_pod<_Tp>::value> { };
template<typename _Tp>
struct has_trivial_default_constructor
: public integral_constant<bool, is_pod<_Tp>::value> { };
template<typename _Tp>
struct has_trivial_copy_constructor
: public integral_constant<bool, is_pod<_Tp>::value> { };
_GLIBCXX_END_NAMESPACE
#endif
...@@ -36,11 +36,36 @@ ...@@ -36,11 +36,36 @@
#pragma GCC system_header #pragma GCC system_header
#ifdef __GXX_EXPERIMENTAL_CXX0X__ #ifndef __GXX_EXPERIMENTAL_CXX0X__
# include <tr1/unordered_map>
#else
# include <c++0x_warning.h> # include <c++0x_warning.h>
#endif #endif
#endif #if defined(_GLIBCXX_INCLUDE_AS_TR1)
# error C++0x header cannot be included from TR1 header
#endif
#include <cmath>
#include <string>
#include <utility>
#include <algorithm> // lower_bound
#include <bits/allocator.h>
#include <bits/stl_function.h> // equal_to, _Identity, _Select1st
#include <type_traits>
#include <bits/functional_hash.h>
#include <bits/hashtable.h>
#if defined(_GLIBCXX_INCLUDE_AS_CXX0X)
# include <tr1_impl/unordered_map>
#else
# define _GLIBCXX_INCLUDE_AS_CXX0X
# define _GLIBCXX_BEGIN_NAMESPACE_TR1
# define _GLIBCXX_END_NAMESPACE_TR1
# define _GLIBCXX_TR1
# include <tr1_impl/unordered_map>
# undef _GLIBCXX_TR1
# undef _GLIBCXX_END_NAMESPACE_TR1
# undef _GLIBCXX_BEGIN_NAMESPACE_TR1
# undef _GLIBCXX_INCLUDE_AS_CXX0X
#endif
#endif // _GLIBCXX_UNORDERED_MAP
...@@ -36,11 +36,36 @@ ...@@ -36,11 +36,36 @@
#pragma GCC system_header #pragma GCC system_header
#ifdef __GXX_EXPERIMENTAL_CXX0X__ #ifndef __GXX_EXPERIMENTAL_CXX0X__
# include <tr1/unordered_set>
#else
# include <c++0x_warning.h> # include <c++0x_warning.h>
#endif #endif
#endif #if defined(_GLIBCXX_INCLUDE_AS_TR1)
# error C++0x header cannot be included from TR1 header
#endif
#include <cmath>
#include <string>
#include <utility>
#include <algorithm> // lower_bound
#include <bits/allocator.h>
#include <bits/stl_function.h> // equal_to, _Identity, _Select1st
#include <type_traits>
#include <bits/functional_hash.h>
#include <bits/hashtable.h>
#if defined(_GLIBCXX_INCLUDE_AS_CXX0X)
# include <tr1_impl/unordered_set>
#else
# define _GLIBCXX_INCLUDE_AS_CXX0X
# define _GLIBCXX_BEGIN_NAMESPACE_TR1
# define _GLIBCXX_END_NAMESPACE_TR1
# define _GLIBCXX_TR1
# include <tr1_impl/unordered_set>
# undef _GLIBCXX_TR1
# undef _GLIBCXX_END_NAMESPACE_TR1
# undef _GLIBCXX_BEGIN_NAMESPACE_TR1
# undef _GLIBCXX_INCLUDE_AS_CXX0X
#endif
#endif // _GLIBCXX_UNORDERED_SET
...@@ -67,7 +67,22 @@ ...@@ -67,7 +67,22 @@
#include <bits/stl_pair.h> #include <bits/stl_pair.h>
#ifdef __GXX_EXPERIMENTAL_CXX0X__ #ifdef __GXX_EXPERIMENTAL_CXX0X__
# include <tr1/utility> # if defined(_GLIBCXX_INCLUDE_AS_TR1)
# error C++0x header cannot be included from TR1 header
# endif
# if defined(_GLIBCXX_INCLUDE_AS_CXX0X)
# include <tr1_impl/utility>
# else
# define _GLIBCXX_INCLUDE_AS_CXX0X
# define _GLIBCXX_BEGIN_NAMESPACE_TR1
# define _GLIBCXX_END_NAMESPACE_TR1
# define _GLIBCXX_TR1
# include <tr1_impl/utility>
# undef _GLIBCXX_TR1
# undef _GLIBCXX_END_NAMESPACE_TR1
# undef _GLIBCXX_BEGIN_NAMESPACE_TR1
# undef _GLIBCXX_INCLUDE_AS_CXX0X
# endif
#endif #endif
#endif /* _GLIBCXX_UTILITY */ #endif /* _GLIBCXX_UTILITY */
...@@ -31,216 +31,29 @@ ...@@ -31,216 +31,29 @@
* This is a TR1 C++ Library header. * This is a TR1 C++ Library header.
*/ */
#ifndef _TR1_ARRAY #ifndef _GLIBCXX_TR1_ARRAY
#define _TR1_ARRAY 1 #define _GLIBCXX_TR1_ARRAY 1
#include <bits/stl_algobase.h> #pragma GCC system_header
//namespace std::tr1
namespace std
{
_GLIBCXX_BEGIN_NAMESPACE(_GLIBCXX_TR1)
/// @brief struct array [6.2.2].
/// NB: Requires complete type _Tp.
template<typename _Tp, std::size_t _Nm>
struct array
{
typedef _Tp value_type;
typedef value_type& reference;
typedef const value_type& const_reference;
typedef value_type* iterator;
typedef const value_type* const_iterator;
typedef std::size_t size_type;
typedef std::ptrdiff_t difference_type;
typedef std::reverse_iterator<iterator> reverse_iterator;
typedef std::reverse_iterator<const_iterator> const_reverse_iterator;
// Support for zero-sized arrays mandatory.
value_type _M_instance[_Nm ? _Nm : 1] __attribute__((__aligned__));
// No explicit construct/copy/destroy for aggregate type.
void
assign(const value_type& __u)
{ std::fill_n(begin(), size(), __u); }
void
swap(array& __other)
{ std::swap_ranges(begin(), end(), __other.begin()); }
// Iterators.
iterator
begin()
{ return iterator(&_M_instance[0]); }
const_iterator
begin() const
{ return const_iterator(&_M_instance[0]); }
iterator
end()
{ return iterator(&_M_instance[_Nm]); }
const_iterator
end() const
{ return const_iterator(&_M_instance[_Nm]); }
reverse_iterator
rbegin()
{ return reverse_iterator(end()); }
const_reverse_iterator
rbegin() const
{ return const_reverse_iterator(end()); }
reverse_iterator
rend()
{ return reverse_iterator(begin()); }
const_reverse_iterator
rend() const
{ return const_reverse_iterator(begin()); }
// Capacity.
size_type
size() const { return _Nm; }
size_type
max_size() const { return _Nm; }
bool
empty() const { return size() == 0; }
// Element access.
reference
operator[](size_type __n)
{ return _M_instance[__n]; }
const_reference
operator[](size_type __n) const
{ return _M_instance[__n]; }
reference
at(size_type __n)
{
_M_check<_Nm>(__n);
return _M_instance[__n];
}
const_reference
at(size_type __n) const
{
_M_check<_Nm>(__n);
return _M_instance[__n];
}
reference
front()
{ return *begin(); }
const_reference #if defined(_GLIBCXX_INCLUDE_AS_CXX0X)
front() const # error TR1 header cannot be included from C++0x header
{ return *begin(); } #endif
reference
back()
{ return _Nm ? *(end() - 1) : *end(); }
const_reference
back() const
{ return _Nm ? *(end() - 1) : *end(); }
_Tp*
data()
{ return &_M_instance[0]; }
const _Tp*
data() const
{ return &_M_instance[0]; }
private:
template<std::size_t _Mm>
typename __gnu_cxx::__enable_if<_Mm, void>::__type
_M_check(size_type __n) const
{
if (__builtin_expect(__n >= _Mm, false))
std::__throw_out_of_range(__N("array::_M_check"));
}
// Avoid "unsigned comparison with zero" warnings.
template<std::size_t _Mm>
typename __gnu_cxx::__enable_if<!_Mm, void>::__type
_M_check(size_type) const
{ std::__throw_out_of_range(__N("array::_M_check")); }
};
// Array comparisons.
template<typename _Tp, std::size_t _Nm>
inline bool
operator==(const array<_Tp, _Nm>& __one, const array<_Tp, _Nm>& __two)
{ return std::equal(__one.begin(), __one.end(), __two.begin()); }
template<typename _Tp, std::size_t _Nm>
inline bool
operator!=(const array<_Tp, _Nm>& __one, const array<_Tp, _Nm>& __two)
{ return !(__one == __two); }
template<typename _Tp, std::size_t _Nm>
inline bool
operator<(const array<_Tp, _Nm>& __a, const array<_Tp, _Nm>& __b)
{
return std::lexicographical_compare(__a.begin(), __a.end(),
__b.begin(), __b.end());
}
template<typename _Tp, std::size_t _Nm>
inline bool
operator>(const array<_Tp, _Nm>& __one, const array<_Tp, _Nm>& __two)
{ return __two < __one; }
template<typename _Tp, std::size_t _Nm>
inline bool
operator<=(const array<_Tp, _Nm>& __one, const array<_Tp, _Nm>& __two)
{ return !(__one > __two); }
template<typename _Tp, std::size_t _Nm>
inline bool
operator>=(const array<_Tp, _Nm>& __one, const array<_Tp, _Nm>& __two)
{ return !(__one < __two); }
// Specialized algorithms [6.2.2.2].
template<typename _Tp, std::size_t _Nm>
inline void
swap(array<_Tp, _Nm>& __one, array<_Tp, _Nm>& __two)
{ std::swap_ranges(__one.begin(), __one.end(), __two.begin()); }
// Tuple interface to class template array [6.2.2.5].
template<typename _Tp> class tuple_size;
template<int _Int, typename _Tp> class tuple_element;
template<typename _Tp, std::size_t _Nm>
struct tuple_size<array<_Tp, _Nm> >
{ static const int value = _Nm; };
template<typename _Tp, std::size_t _Nm>
const int tuple_size<array<_Tp, _Nm> >::value;
template<int _Int, typename _Tp, std::size_t _Nm>
struct tuple_element<_Int, array<_Tp, _Nm> >
{ typedef _Tp type; };
template<int _Int, typename _Tp, std::size_t _Nm>
inline _Tp&
get(array<_Tp, _Nm>& __arr)
{ return __arr[_Int]; }
template<int _Int, typename _Tp, std::size_t _Nm>
inline const _Tp&
get(const array<_Tp, _Nm>& __arr)
{ return __arr[_Int]; }
_GLIBCXX_END_NAMESPACE #include <bits/stl_algobase.h>
}
#if defined(_GLIBCXX_INCLUDE_AS_TR1)
# include <tr1_impl/array>
#else
# define _GLIBCXX_INCLUDE_AS_TR1
# define _GLIBCXX_BEGIN_NAMESPACE_TR1 namespace tr1 {
# define _GLIBCXX_END_NAMESPACE_TR1 }
# define _GLIBCXX_TR1 tr1::
# include <tr1_impl/array>
# undef _GLIBCXX_TR1
# undef _GLIBCXX_END_NAMESPACE_TR1
# undef _GLIBCXX_BEGIN_NAMESPACE_TR1
# undef _GLIBCXX_INCLUDE_AS_TR1
#endif #endif
#endif // _GLIBCXX_TR1_ARRAY
...@@ -49,14 +49,15 @@ ...@@ -49,14 +49,15 @@
// W. T. Vetterling, B. P. Flannery, Cambridge University Press (1992), // W. T. Vetterling, B. P. Flannery, Cambridge University Press (1992),
// 2nd ed, pp. 240-245 // 2nd ed, pp. 240-245
#ifndef _TR1_BESSEL_FUNCTION_TCC #ifndef _GLIBCXX_TR1_BESSEL_FUNCTION_TCC
#define _TR1_BESSEL_FUNCTION_TCC 1 #define _GLIBCXX_TR1_BESSEL_FUNCTION_TCC 1
#include "special_function_util.h" #include "special_function_util.h"
namespace std namespace std
{ {
_GLIBCXX_BEGIN_NAMESPACE(_GLIBCXX_TR1) namespace tr1
{
// [5.2] Special functions // [5.2] Special functions
...@@ -102,8 +103,8 @@ _GLIBCXX_BEGIN_NAMESPACE(_GLIBCXX_TR1) ...@@ -102,8 +103,8 @@ _GLIBCXX_BEGIN_NAMESPACE(_GLIBCXX_TR1)
_Tp & __gam1, _Tp & __gam2, _Tp & __gampl, _Tp & __gammi) _Tp & __gam1, _Tp & __gam2, _Tp & __gampl, _Tp & __gammi)
{ {
#if _GLIBCXX_USE_C99_MATH_TR1 #if _GLIBCXX_USE_C99_MATH_TR1
__gampl = _Tp(1) / std::_GLIBCXX_TR1::tgamma(_Tp(1) + __mu); __gampl = _Tp(1) / std::tr1::tgamma(_Tp(1) + __mu);
__gammi = _Tp(1) / std::_GLIBCXX_TR1::tgamma(_Tp(1) - __mu); __gammi = _Tp(1) / std::tr1::tgamma(_Tp(1) - __mu);
#else #else
__gampl = _Tp(1) / __gamma(_Tp(1) + __mu); __gampl = _Tp(1) / __gamma(_Tp(1) + __mu);
__gammi = _Tp(1) / __gamma(_Tp(1) - __mu); __gammi = _Tp(1) / __gamma(_Tp(1) - __mu);
...@@ -318,7 +319,7 @@ _GLIBCXX_BEGIN_NAMESPACE(_GLIBCXX_TR1) ...@@ -318,7 +319,7 @@ _GLIBCXX_BEGIN_NAMESPACE(_GLIBCXX_TR1)
const _Tp __gam = (__p - __f) / __q; const _Tp __gam = (__p - __f) / __q;
__Jmu = std::sqrt(__w / ((__p - __f) * __gam + __q)); __Jmu = std::sqrt(__w / ((__p - __f) * __gam + __q));
#if _GLIBCXX_USE_C99_MATH_TR1 #if _GLIBCXX_USE_C99_MATH_TR1
__Jmu = std::_GLIBCXX_TR1::copysign(__Jmu, __Jnul); __Jmu = std::tr1::copysign(__Jmu, __Jnul);
#else #else
if (__Jmu * __Jnul < _Tp(0)) if (__Jmu * __Jnul < _Tp(0))
__Jmu = -__Jmu; __Jmu = -__Jmu;
...@@ -425,7 +426,7 @@ _GLIBCXX_BEGIN_NAMESPACE(_GLIBCXX_TR1) ...@@ -425,7 +426,7 @@ _GLIBCXX_BEGIN_NAMESPACE(_GLIBCXX_TR1)
const _Tp __x2 = __x / _Tp(2); const _Tp __x2 = __x / _Tp(2);
_Tp __fact = __nu * std::log(__x2); _Tp __fact = __nu * std::log(__x2);
#if _GLIBCXX_USE_C99_MATH_TR1 #if _GLIBCXX_USE_C99_MATH_TR1
__fact -= std::_GLIBCXX_TR1::lgamma(__nu + _Tp(1)); __fact -= std::tr1::lgamma(__nu + _Tp(1));
#else #else
__fact -= __log_gamma(__nu + _Tp(1)); __fact -= __log_gamma(__nu + _Tp(1));
#endif #endif
...@@ -635,7 +636,7 @@ _GLIBCXX_BEGIN_NAMESPACE(_GLIBCXX_TR1) ...@@ -635,7 +636,7 @@ _GLIBCXX_BEGIN_NAMESPACE(_GLIBCXX_TR1)
/* @} */ // group tr1_math_spec_func /* @} */ // group tr1_math_spec_func
_GLIBCXX_END_NAMESPACE }
} }
#endif // _TR1_BESSEL_FUNCTION_TCC #endif // _GLIBCXX_TR1_BESSEL_FUNCTION_TCC
...@@ -49,12 +49,13 @@ ...@@ -49,12 +49,13 @@
// (4) Gamma, Exploring Euler's Constant, Julian Havil, // (4) Gamma, Exploring Euler's Constant, Julian Havil,
// Princeton, 2003. // Princeton, 2003.
#ifndef _TR1_BETA_FUNCTION_TCC #ifndef _GLIBCXX_TR1_BETA_FUNCTION_TCC
#define _TR1_BETA_FUNCTION_TCC 1 #define _GLIBCXX_TR1_BETA_FUNCTION_TCC 1
namespace std namespace std
{ {
_GLIBCXX_BEGIN_NAMESPACE(_GLIBCXX_TR1) namespace tr1
{
// [5.2] Special functions // [5.2] Special functions
...@@ -90,15 +91,15 @@ _GLIBCXX_BEGIN_NAMESPACE(_GLIBCXX_TR1) ...@@ -90,15 +91,15 @@ _GLIBCXX_BEGIN_NAMESPACE(_GLIBCXX_TR1)
#if _GLIBCXX_USE_C99_MATH_TR1 #if _GLIBCXX_USE_C99_MATH_TR1
if (__x > __y) if (__x > __y)
{ {
__bet = std::_GLIBCXX_TR1::tgamma(__x) __bet = std::tr1::tgamma(__x)
/ std::_GLIBCXX_TR1::tgamma(__x + __y); / std::tr1::tgamma(__x + __y);
__bet *= std::_GLIBCXX_TR1::tgamma(__y); __bet *= std::tr1::tgamma(__y);
} }
else else
{ {
__bet = std::_GLIBCXX_TR1::tgamma(__y) __bet = std::tr1::tgamma(__y)
/ std::_GLIBCXX_TR1::tgamma(__x + __y); / std::tr1::tgamma(__x + __y);
__bet *= std::_GLIBCXX_TR1::tgamma(__x); __bet *= std::tr1::tgamma(__x);
} }
#else #else
if (__x > __y) if (__x > __y)
...@@ -134,9 +135,9 @@ _GLIBCXX_BEGIN_NAMESPACE(_GLIBCXX_TR1) ...@@ -134,9 +135,9 @@ _GLIBCXX_BEGIN_NAMESPACE(_GLIBCXX_TR1)
__beta_lgamma(_Tp __x, _Tp __y) __beta_lgamma(_Tp __x, _Tp __y)
{ {
#if _GLIBCXX_USE_C99_MATH_TR1 #if _GLIBCXX_USE_C99_MATH_TR1
_Tp __bet = std::_GLIBCXX_TR1::lgamma(__x) _Tp __bet = std::tr1::lgamma(__x)
+ std::_GLIBCXX_TR1::lgamma(__y) + std::tr1::lgamma(__y)
- std::_GLIBCXX_TR1::lgamma(__x + __y); - std::tr1::lgamma(__x + __y);
#else #else
_Tp __bet = __log_gamma(__x) _Tp __bet = __log_gamma(__x)
+ __log_gamma(__y) + __log_gamma(__y)
...@@ -205,7 +206,7 @@ _GLIBCXX_BEGIN_NAMESPACE(_GLIBCXX_TR1) ...@@ -205,7 +206,7 @@ _GLIBCXX_BEGIN_NAMESPACE(_GLIBCXX_TR1)
/* @} */ // group tr1_math_spec_func /* @} */ // group tr1_math_spec_func
_GLIBCXX_END_NAMESPACE }
} }
#endif // _TR1_BETA_FUNCTION_TCC #endif // __GLIBCXX_TR1_BETA_FUNCTION_TCC
...@@ -31,9 +31,9 @@ ...@@ -31,9 +31,9 @@
* This is a TR1 C++ Library header. * This is a TR1 C++ Library header.
*/ */
#ifndef _TR1_CCOMPLEX #ifndef _GLIBCXX_TR1_CCOMPLEX
#define _TR1_CCOMPLEX 1 #define _GLIBCXX_TR1_CCOMPLEX 1
#include <tr1/complex> #include <tr1/complex>
#endif #endif // _GLIBCXX_TR1_CCOMPLEX
// TR1 cctype -*- C++ -*- // TR1 cctype -*- C++ -*-
// Copyright (C) 2006 Free Software Foundation, Inc. // Copyright (C) 2006, 2007 Free Software Foundation, Inc.
// //
// This file is part of the GNU ISO C++ Library. This library is free // 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 // software; you can redistribute it and/or modify it under the
...@@ -31,26 +31,24 @@ ...@@ -31,26 +31,24 @@
* This is a TR1 C++ Library header. * This is a TR1 C++ Library header.
*/ */
#ifndef _TR1_CCTYPE #ifndef _GLIBCXX_TR1_CCTYPE
#define _TR1_CCTYPE 1 #define _GLIBCXX_TR1_CCTYPE 1
#include <bits/c++config.h> #include <bits/c++config.h>
#include <cctype> #include <cctype>
#if _GLIBCXX_USE_C99_CTYPE_TR1 #if defined(_GLIBCXX_INCLUDE_AS_TR1)
# include <tr1_impl/cctype>
#undef isblank #else
# define _GLIBCXX_INCLUDE_AS_TR1
// namespace std::tr1 # define _GLIBCXX_BEGIN_NAMESPACE_TR1 namespace tr1 {
namespace std # define _GLIBCXX_END_NAMESPACE_TR1 }
{ # define _GLIBCXX_TR1 tr1::
_GLIBCXX_BEGIN_NAMESPACE(_GLIBCXX_TR1) # include <tr1_impl/cctype>
# undef _GLIBCXX_TR1
using ::isblank; # undef _GLIBCXX_END_NAMESPACE_TR1
# undef _GLIBCXX_BEGIN_NAMESPACE_TR1
_GLIBCXX_END_NAMESPACE # undef _GLIBCXX_INCLUDE_AS_TR1
}
#endif #endif
#endif #endif // _GLIBCXX_TR1_CCTYPE
// TR1 cctype -*- C++ -*- // TR1 cfenv -*- C++ -*-
// Copyright (C) 2006 Free Software Foundation, Inc. // Copyright (C) 2006, 2007 Free Software Foundation, Inc.
// //
// This file is part of the GNU ISO C++ Library. This library is free // 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 // software; you can redistribute it and/or modify it under the
...@@ -31,54 +31,23 @@ ...@@ -31,54 +31,23 @@
* This is a TR1 C++ Library header. * This is a TR1 C++ Library header.
*/ */
#ifndef _TR1_CFENV #ifndef _GLIBCXX_TR1_CFENV
#define _TR1_CFENV 1 #define _GLIBCXX_TR1_CFENV 1
#include <bits/c++config.h> #include <bits/c++config.h>
#if _GLIBCXX_USE_C99_FENV_TR1 #if defined(_GLIBCXX_INCLUDE_AS_TR1)
# include <tr1_impl/cfenv>
#include_next <fenv.h> #else
# define _GLIBCXX_INCLUDE_AS_TR1
#undef feclearexcept # define _GLIBCXX_BEGIN_NAMESPACE_TR1 namespace tr1 {
#undef fegetexceptflag # define _GLIBCXX_END_NAMESPACE_TR1 }
#undef feraiseexcept # define _GLIBCXX_TR1 tr1::
#undef fesetexceptflag # include <tr1_impl/cfenv>
#undef fetestexcept # undef _GLIBCXX_TR1
#undef fegetround # undef _GLIBCXX_END_NAMESPACE_TR1
#undef fesetround # undef _GLIBCXX_BEGIN_NAMESPACE_TR1
#undef fegetenv # undef _GLIBCXX_INCLUDE_AS_TR1
#undef feholdexcept
#undef fesetenv
#undef feupdateenv
// namespace std::tr1
namespace std
{
_GLIBCXX_BEGIN_NAMESPACE(_GLIBCXX_TR1)
// types
using ::fenv_t;
using ::fexcept_t;
// functions
using ::feclearexcept;
using ::fegetexceptflag;
using ::feraiseexcept;
using ::fesetexceptflag;
using ::fetestexcept;
using ::fegetround;
using ::fesetround;
using ::fegetenv;
using ::feholdexcept;
using ::fesetenv;
using ::feupdateenv;
_GLIBCXX_END_NAMESPACE
}
#endif #endif
#endif #endif // _GLIBCXX_TR1_CFENV
// TR1 cfloat -*- C++ -*- // TR1 cfloat -*- C++ -*-
// Copyright (C) 2006 Free Software Foundation, Inc. // Copyright (C) 2006, 2007 Free Software Foundation, Inc.
// //
// This file is part of the GNU ISO C++ Library. This library is free // 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 // software; you can redistribute it and/or modify it under the
...@@ -31,8 +31,8 @@ ...@@ -31,8 +31,8 @@
* This is a TR1 C++ Library header. * This is a TR1 C++ Library header.
*/ */
#ifndef _TR1_CFLOAT #ifndef _GLIBCXX_TR1_CFLOAT
#define _TR1_CFLOAT 1 #define _GLIBCXX_TR1_CFLOAT 1
#include <cfloat> #include <cfloat>
...@@ -44,4 +44,4 @@ ...@@ -44,4 +44,4 @@
#define FLT_EVAL_METHOD __FLT_EVAL_METHOD__ #define FLT_EVAL_METHOD __FLT_EVAL_METHOD__
#endif #endif
#endif #endif //_GLIBCXX_TR1_CFLOAT
...@@ -31,51 +31,23 @@ ...@@ -31,51 +31,23 @@
* This is a TR1 C++ Library header. * This is a TR1 C++ Library header.
*/ */
#ifndef _TR1_CINTTYPES #ifndef _GLIBCXX_TR1_CINTTYPES
#define _TR1_CINTTYPES 1 #define _GLIBCXX_TR1_CINTTYPES 1
#include <bits/c++config.h>
#include <tr1/cstdint> #include <tr1/cstdint>
#if _GLIBCXX_USE_C99_INTTYPES_TR1 #if defined(_GLIBCXX_INCLUDE_AS_TR1)
# include <tr1_impl/cinttypes>
// For 8.11.1/1 (see C99, Note 184) #else
#define __STDC_FORMAT_MACROS # define _GLIBCXX_INCLUDE_AS_TR1
#include_next <inttypes.h> # define _GLIBCXX_BEGIN_NAMESPACE_TR1 namespace tr1 {
# define _GLIBCXX_END_NAMESPACE_TR1 }
// namespace std::tr1 # define _GLIBCXX_TR1 tr1::
namespace std # include <tr1_impl/cinttypes>
{ # undef _GLIBCXX_TR1
_GLIBCXX_BEGIN_NAMESPACE(_GLIBCXX_TR1) # undef _GLIBCXX_END_NAMESPACE_TR1
# undef _GLIBCXX_BEGIN_NAMESPACE_TR1
// types # undef _GLIBCXX_INCLUDE_AS_TR1
using ::imaxdiv_t;
// functions
using ::imaxabs;
// May collide with _Longlong abs(_Longlong), and is not described
// anywhere outside the synopsis. Likely, a defect.
//
// intmax_t abs(intmax_t)
using ::imaxdiv;
// Likewise, with lldiv_t div(_Longlong, _Longlong).
//
// imaxdiv_t div(intmax_t, intmax_t)
using ::strtoimax;
using ::strtoumax;
#ifdef _GLIBCXX_USE_WCHAR_T
using ::wcstoimax;
using ::wcstoumax;
#endif
_GLIBCXX_END_NAMESPACE
}
#endif #endif
#endif #endif // _GLIBCXX_TR1_CINTTYPES
// TR1 climits -*- C++ -*- // TR1 climits -*- C++ -*-
// Copyright (C) 2006 Free Software Foundation, Inc. // Copyright (C) 2006, 2007 Free Software Foundation, Inc.
// //
// This file is part of the GNU ISO C++ Library. This library is free // 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 // software; you can redistribute it and/or modify it under the
...@@ -31,8 +31,8 @@ ...@@ -31,8 +31,8 @@
* This is a TR1 C++ Library header. * This is a TR1 C++ Library header.
*/ */
#ifndef _TR1_CLIMITS #ifndef _GLIBCXX_TR1_CLIMITS
#define _TR1_CLIMITS 1 #define _GLIBCXX_TR1_CLIMITS 1
#include <climits> #include <climits>
...@@ -48,4 +48,4 @@ ...@@ -48,4 +48,4 @@
#define ULLONG_MAX __LONG_LONG_MAX__ * 2ULL + 1 #define ULLONG_MAX __LONG_LONG_MAX__ * 2ULL + 1
#endif #endif
#endif #endif // _GLIBCXX_TR1_CLIMITS
// Internal header for TR1 complex -*- C++ -*-
// Copyright (C) 2006 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
// terms of the GNU General Public License as published by the
// Free Software Foundation; either version 2, or (at your option)
// any later version.
// This library is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
// You should have received a copy of the GNU General Public License along
// with this library; see the file COPYING. If not, write to the Free
// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
// USA.
// As a special exception, you may use this file as part of a free software
// library without restriction. Specifically, if other files instantiate
// templates or use macros or inline functions from this file, or you compile
// this file and link it with other files to produce an executable, this
// file does not by itself cause the resulting executable to be covered by
// the GNU General Public License. This exception does not however
// invalidate any other reasons why the executable file might be covered by
// the GNU General Public License.
/** @file tr1/common.h
* This is a TR1 C++ Library header.
*/
#ifndef _TR1_COMMON_H
#define _TR1_COMMON_H 1
#include <tr1/type_traits>
// namespace std::tr1
namespace std
{
_GLIBCXX_BEGIN_NAMESPACE(_GLIBCXX_TR1)
template<typename _Tp, bool = is_integral<_Tp>::value>
struct __promote
{ typedef double __type; };
template<typename _Tp>
struct __promote<_Tp, false>
{ typedef _Tp __type; };
template<typename _Tp, typename _Up>
struct __promote_2
{
private:
typedef typename __promote<_Tp>::__type __type1;
typedef typename __promote<_Up>::__type __type2;
public:
typedef __typeof__(__type1() + __type2()) __type;
};
template<typename _Tp, typename _Up, typename _Vp>
struct __promote_3
{
private:
typedef typename __promote<_Tp>::__type __type1;
typedef typename __promote<_Up>::__type __type2;
typedef typename __promote<_Vp>::__type __type3;
public:
typedef __typeof__(__type1() + __type2() + __type3()) __type;
};
template<typename _Tp, typename _Up, typename _Vp, typename _Wp>
struct __promote_4
{
private:
typedef typename __promote<_Tp>::__type __type1;
typedef typename __promote<_Up>::__type __type2;
typedef typename __promote<_Vp>::__type __type3;
typedef typename __promote<_Wp>::__type __type4;
public:
typedef __typeof__(__type1() + __type2() + __type3() + __type4()) __type;
};
_GLIBCXX_END_NAMESPACE
} // namespace std
#endif
...@@ -31,9 +31,9 @@ ...@@ -31,9 +31,9 @@
* This is a TR1 C++ Library header. * This is a TR1 C++ Library header.
*/ */
#ifndef _TR1_COMPLEX_H #ifndef _GLIBCXX_TR1_COMPLEX_H
#define _TR1_COMPLEX_H 1 #define _GLIBCXX_TR1_COMPLEX_H 1
#include <tr1/ccomplex> #include <tr1/ccomplex>
#endif #endif // _GLIBCXX_TR1_COMPLEX_H
// TR1 cstdarg -*- C++ -*- // TR1 cstdarg -*- C++ -*-
// Copyright (C) 2006 Free Software Foundation, Inc. // Copyright (C) 2006, 2007 Free Software Foundation, Inc.
// //
// This file is part of the GNU ISO C++ Library. This library is free // 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 // software; you can redistribute it and/or modify it under the
...@@ -31,9 +31,9 @@ ...@@ -31,9 +31,9 @@
* This is a TR1 C++ Library header. * This is a TR1 C++ Library header.
*/ */
#ifndef _TR1_CSTDARG #ifndef _GLIBCXX_TR1_CSTDARG
#define _TR1_CSTDARG 1 #define _GLIBCXX_TR1_CSTDARG 1
#include <cstdarg> #include <cstdarg>
#endif #endif // _GLIBCXX_TR1_CSTDARG
...@@ -31,8 +31,8 @@ ...@@ -31,8 +31,8 @@
* This is a TR1 C++ Library header. * This is a TR1 C++ Library header.
*/ */
#ifndef _TR1_CSTDBOOL #ifndef _GLIBCXX_TR1_CSTDBOOL
#define _TR1_CSTDBOOL 1 #define _GLIBCXX_TR1_CSTDBOOL 1
#include <bits/c++config.h> #include <bits/c++config.h>
...@@ -40,4 +40,4 @@ ...@@ -40,4 +40,4 @@
#include_next <stdbool.h> #include_next <stdbool.h>
#endif #endif
#endif #endif // _GLIBCXX_TR1_CSTDBOOL
...@@ -31,62 +31,30 @@ ...@@ -31,62 +31,30 @@
* This is a TR1 C++ Library header. * This is a TR1 C++ Library header.
*/ */
#ifndef _TR1_CSTDINT #ifndef _GLIBCXX_TR1_CSTDINT
#define _TR1_CSTDINT 1 #define _GLIBCXX_TR1_CSTDINT 1
#include <bits/c++config.h> #pragma GCC system_header
#if _GLIBCXX_USE_C99_STDINT_TR1
// For 8.22.1/1 (see C99, Notes 219, 220, 222)
#define __STDC_LIMIT_MACROS
#define __STDC_CONSTANT_MACROS
#include_next <stdint.h>
// namespace std::tr1
namespace std
{
_GLIBCXX_BEGIN_NAMESPACE(_GLIBCXX_TR1)
using ::int8_t;
using ::int16_t;
using ::int32_t;
using ::int64_t;
using ::int_fast8_t;
using ::int_fast16_t;
using ::int_fast32_t;
using ::int_fast64_t;
using ::int_least8_t;
using ::int_least16_t;
using ::int_least32_t;
using ::int_least64_t;
using ::intmax_t; #if defined(_GLIBCXX_INCLUDE_AS_CXX0X)
using ::intptr_t; # error TR1 header cannot be included from C++0x header
#endif
using ::uint8_t;
using ::uint16_t;
using ::uint32_t;
using ::uint64_t;
using ::uint_fast8_t;
using ::uint_fast16_t;
using ::uint_fast32_t;
using ::uint_fast64_t;
using ::uint_least8_t;
using ::uint_least16_t;
using ::uint_least32_t;
using ::uint_least64_t;
using ::uintmax_t;
using ::uintptr_t;
_GLIBCXX_END_NAMESPACE #include <bits/c++config.h>
}
#if defined(_GLIBCXX_INCLUDE_AS_TR1)
# include <tr1_impl/cstdint>
#else
# define _GLIBCXX_INCLUDE_AS_TR1
# define _GLIBCXX_BEGIN_NAMESPACE_TR1 namespace tr1 {
# define _GLIBCXX_END_NAMESPACE_TR1 }
# define _GLIBCXX_TR1 tr1::
# include <tr1_impl/cstdint>
# undef _GLIBCXX_TR1
# undef _GLIBCXX_END_NAMESPACE_TR1
# undef _GLIBCXX_BEGIN_NAMESPACE_TR1
# undef _GLIBCXX_INCLUDE_AS_TR1
#endif #endif
#endif #endif // _GLIBCXX_TR1_CSTDINT
...@@ -31,27 +31,29 @@ ...@@ -31,27 +31,29 @@
* This is a TR1 C++ Library header. * This is a TR1 C++ Library header.
*/ */
#ifndef _TR1_CSTDIO #ifndef _GLIBCXX_TR1_CSTDIO
#define _TR1_CSTDIO 1 #define _GLIBCXX_TR1_CSTDIO 1
#include <bits/c++config.h> #pragma GCC system_header
#include <cstdio>
// namespace std::tr1
namespace std
{
_GLIBCXX_BEGIN_NAMESPACE(_GLIBCXX_TR1)
#if _GLIBCXX_USE_C99
using std::snprintf;
using std::vsnprintf;
using std::vfscanf; #if defined(_GLIBCXX_INCLUDE_AS_CXX0X)
using std::vscanf; # error TR1 header cannot be included from C++0x header
using std::vsscanf;
#endif #endif
_GLIBCXX_END_NAMESPACE #include <cstdio>
}
#if defined(_GLIBCXX_INCLUDE_AS_TR1)
# include <tr1_impl/cstdio>
#else
# define _GLIBCXX_INCLUDE_AS_TR1
# define _GLIBCXX_BEGIN_NAMESPACE_TR1 namespace tr1 {
# define _GLIBCXX_END_NAMESPACE_TR1 }
# define _GLIBCXX_TR1 tr1::
# include <tr1_impl/cstdio>
# undef _GLIBCXX_TR1
# undef _GLIBCXX_END_NAMESPACE_TR1
# undef _GLIBCXX_BEGIN_NAMESPACE_TR1
# undef _GLIBCXX_INCLUDE_AS_TR1
#endif #endif
#endif // _GLIBCXX_TR1_CSTDIO
...@@ -31,49 +31,29 @@ ...@@ -31,49 +31,29 @@
* This is a TR1 C++ Library header. * This is a TR1 C++ Library header.
*/ */
#ifndef _TR1_CSTDLIB #ifndef _GLIBCXX_TR1_CSTDLIB
#define _TR1_CSTDLIB 1 #define _GLIBCXX_TR1_CSTDLIB 1
#include <bits/c++config.h> #pragma GCC system_header
#if _GLIBCXX_HOSTED #if defined(_GLIBCXX_INCLUDE_AS_CXX0X)
# error TR1 header cannot be included from C++0x header
#include <cstdlib>
// namespace std::tr1
namespace std
{
_GLIBCXX_BEGIN_NAMESPACE(_GLIBCXX_TR1)
#if _GLIBCXX_USE_C99
#if !_GLIBCXX_USE_C99_LONG_LONG_DYNAMIC
// types
using std::lldiv_t;
// functions
using std::llabs;
using std::lldiv;
#endif
using std::atoll;
using std::strtoll;
using std::strtoull;
using std::strtof;
using std::strtold;
// overloads
using std::abs;
#if !_GLIBCXX_USE_C99_LONG_LONG_DYNAMIC
using std::div;
#endif #endif
#endif #include <cstdlib>
_GLIBCXX_END_NAMESPACE
}
#if defined(_GLIBCXX_INCLUDE_AS_TR1)
# include <tr1_impl/cstdlib>
#else
# define _GLIBCXX_INCLUDE_AS_TR1
# define _GLIBCXX_BEGIN_NAMESPACE_TR1 namespace tr1 {
# define _GLIBCXX_END_NAMESPACE_TR1 }
# define _GLIBCXX_TR1 tr1::
# include <tr1_impl/cstdlib>
# undef _GLIBCXX_TR1
# undef _GLIBCXX_END_NAMESPACE_TR1
# undef _GLIBCXX_BEGIN_NAMESPACE_TR1
# undef _GLIBCXX_INCLUDE_AS_TR1
#endif #endif
#endif #endif // _GLIBCXX_TR1_CSTDLIB
// TR1 ctgmath -*- C++ -*- // TR1 ctgmath -*- C++ -*-
// Copyright (C) 2006 Free Software Foundation, Inc. // Copyright (C) 2006, 2007 Free Software Foundation, Inc.
// //
// This file is part of the GNU ISO C++ Library. This library is free // 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 // software; you can redistribute it and/or modify it under the
...@@ -31,9 +31,9 @@ ...@@ -31,9 +31,9 @@
* This is a TR1 C++ Library header. * This is a TR1 C++ Library header.
*/ */
#ifndef _TR1_CTGMATH #ifndef _GLIBCXX_TR1_CTGMATH
#define _TR1_CTGMATH 1 #define _GLIBCXX_TR1_CTGMATH 1
#include <tr1/cmath> #include <tr1/cmath>
#endif #endif // _GLIBCXX_TR1_CTGMATH
// TR1 ctime -*- C++ -*- // TR1 ctime -*- C++ -*-
// Copyright (C) 2006 Free Software Foundation, Inc. // Copyright (C) 2006, 2007 Free Software Foundation, Inc.
// //
// This file is part of the GNU ISO C++ Library. This library is free // 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 // software; you can redistribute it and/or modify it under the
...@@ -31,9 +31,9 @@ ...@@ -31,9 +31,9 @@
* This is a TR1 C++ Library header. * This is a TR1 C++ Library header.
*/ */
#ifndef _TR1_CTIME #ifndef _GLIBCXX_TR1_CTIME
#define _TR1_CTIME 1 #define _GLIBCXX_TR1_CTIME 1
#include <ctime> #include <ctime>
#endif #endif // _GLIBCXX_TR1_CTIME
// TR1 cwchar -*- C++ -*- // TR1 cwchar -*- C++ -*-
// Copyright (C) 2006 Free Software Foundation, Inc. // Copyright (C) 2006, 2007 Free Software Foundation, Inc.
// //
// This file is part of the GNU ISO C++ Library. This library is free // 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 // software; you can redistribute it and/or modify it under the
...@@ -31,42 +31,29 @@ ...@@ -31,42 +31,29 @@
* This is a TR1 C++ Library header. * This is a TR1 C++ Library header.
*/ */
#ifndef _TR1_CWCHAR #ifndef _GLIBCXX_TR1_CWCHAR
#define _TR1_CWCHAR 1 #define _GLIBCXX_TR1_CWCHAR 1
#include <bits/c++config.h> #pragma GCC system_header
#if _GLIBCXX_USE_WCHAR_T #if defined(_GLIBCXX_INCLUDE_AS_CXX0X)
# error TR1 header cannot be included from C++0x header
#include <cwchar>
// namespace std::tr1
namespace std
{
_GLIBCXX_BEGIN_NAMESPACE(_GLIBCXX_TR1)
#if _GLIBCXX_HAVE_WCSTOF
using std::wcstof;
#endif
#if _GLIBCXX_HAVE_VFWSCANF
using std::vfwscanf;
#endif
#if _GLIBCXX_HAVE_VSWSCANF
using std::vswscanf;
#endif
#if _GLIBCXX_HAVE_VWSCANF
using std::vwscanf;
#endif
#if _GLIBCXX_USE_C99
using std::wcstold;
using std::wcstoll;
using std::wcstoull;
#endif #endif
_GLIBCXX_END_NAMESPACE #include <cwchar>
}
#if defined(_GLIBCXX_INCLUDE_AS_TR1)
# include <tr1_impl/cwchar>
#else
# define _GLIBCXX_INCLUDE_AS_TR1
# define _GLIBCXX_BEGIN_NAMESPACE_TR1 namespace tr1 {
# define _GLIBCXX_END_NAMESPACE_TR1 }
# define _GLIBCXX_TR1 tr1::
# include <tr1_impl/cwchar>
# undef _GLIBCXX_TR1
# undef _GLIBCXX_END_NAMESPACE_TR1
# undef _GLIBCXX_BEGIN_NAMESPACE_TR1
# undef _GLIBCXX_INCLUDE_AS_TR1
#endif #endif
#endif #endif // _GLIBCXX_TR1_CWCHAR
// TR1 cwctype -*- C++ -*- // TR1 cwctype -*- C++ -*-
// Copyright (C) 2006 Free Software Foundation, Inc. // Copyright (C) 2006, 2007 Free Software Foundation, Inc.
// //
// This file is part of the GNU ISO C++ Library. This library is free // 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 // software; you can redistribute it and/or modify it under the
...@@ -31,27 +31,29 @@ ...@@ -31,27 +31,29 @@
* This is a TR1 C++ Library header. * This is a TR1 C++ Library header.
*/ */
#ifndef _TR1_CWCTYPE #ifndef _GLIBCXX_TR1_CWCTYPE
#define _TR1_CWCTYPE 1 #define _GLIBCXX_TR1_CWCTYPE 1
#include <bits/c++config.h> #pragma GCC system_header
#if _GLIBCXX_USE_WCHAR_T #if defined(_GLIBCXX_INCLUDE_AS_CXX0X)
# error TR1 header cannot be included from C++0x header
#endif
#include <cwctype> #include <cwctype>
// namespace std::tr1 #if defined(_GLIBCXX_INCLUDE_AS_TR1)
namespace std # include <tr1_impl/cwctype>
{ #else
_GLIBCXX_BEGIN_NAMESPACE(_GLIBCXX_TR1) # define _GLIBCXX_INCLUDE_AS_TR1
# define _GLIBCXX_BEGIN_NAMESPACE_TR1 namespace tr1 {
#if _GLIBCXX_HAVE_ISWBLANK # define _GLIBCXX_END_NAMESPACE_TR1 }
using std::iswblank; # define _GLIBCXX_TR1 tr1::
#endif # include <tr1_impl/cwctype>
# undef _GLIBCXX_TR1
_GLIBCXX_END_NAMESPACE # undef _GLIBCXX_END_NAMESPACE_TR1
} # undef _GLIBCXX_BEGIN_NAMESPACE_TR1
# undef _GLIBCXX_INCLUDE_AS_TR1
#endif #endif
#endif #endif // _GLIBCXX_TR1_CWCTYPE
...@@ -45,12 +45,13 @@ ...@@ -45,12 +45,13 @@
// W. T. Vetterling, B. P. Flannery, Cambridge University Press // W. T. Vetterling, B. P. Flannery, Cambridge University Press
// (1992), pp. 261-269 // (1992), pp. 261-269
#ifndef _TR1_ELL_INTEGRAL_TCC #ifndef _GLIBCXX_TR1_ELL_INTEGRAL_TCC
#define _TR1_ELL_INTEGRAL_TCC 1 #define _GLIBCXX_TR1_ELL_INTEGRAL_TCC 1
namespace std namespace std
{ {
_GLIBCXX_BEGIN_NAMESPACE(_GLIBCXX_TR1) namespace tr1
{
// [5.2] Special functions // [5.2] Special functions
...@@ -755,8 +756,8 @@ _GLIBCXX_BEGIN_NAMESPACE(_GLIBCXX_TR1) ...@@ -755,8 +756,8 @@ _GLIBCXX_BEGIN_NAMESPACE(_GLIBCXX_TR1)
/* @} */ // group tr1_math_spec_func /* @} */ // group tr1_math_spec_func
_GLIBCXX_END_NAMESPACE }
} }
#endif // _TR1_ELL_INTEGRAL_TCC #endif // _GLIBCXX_TR1_ELL_INTEGRAL_TCC
...@@ -48,14 +48,15 @@ ...@@ -48,14 +48,15 @@
// 2nd ed, pp. 222-225. // 2nd ed, pp. 222-225.
// //
#ifndef _TR1_EXP_INTEGRAL_TCC #ifndef _GLIBCXX_TR1_EXP_INTEGRAL_TCC
#define _TR1_EXP_INTEGRAL_TCC 1 #define _GLIBCXX_TR1_EXP_INTEGRAL_TCC 1
#include "special_function_util.h" #include "special_function_util.h"
namespace std namespace std
{ {
_GLIBCXX_BEGIN_NAMESPACE(_GLIBCXX_TR1) namespace tr1
{
// [5.2] Special functions // [5.2] Special functions
...@@ -532,7 +533,7 @@ _GLIBCXX_BEGIN_NAMESPACE(_GLIBCXX_TR1) ...@@ -532,7 +533,7 @@ _GLIBCXX_BEGIN_NAMESPACE(_GLIBCXX_TR1)
/* @} */ // group tr1_math_spec_func /* @} */ // group tr1_math_spec_func
_GLIBCXX_END_NAMESPACE }
} }
#endif // _TR1_EXP_INTEGRAL_TCC #endif // _GLIBCXX_TR1_EXP_INTEGRAL_TCC
// TR1 functional -*- C++ -*- // TR1 functional_hash.h header -*- C++ -*-
// Copyright (C) 2007 Free Software Foundation, Inc. // Copyright (C) 2007 Free Software Foundation, Inc.
// //
...@@ -32,200 +32,27 @@ ...@@ -32,200 +32,27 @@
* You should not attempt to use it directly. * You should not attempt to use it directly.
*/ */
#ifndef _TR1_FUNCTIONAL_HASH_H #ifndef _GLIBCXX_TR1_FUNCTIONAL_HASH_H
#define _TR1_FUNCTIONAL_HASH_H 1 #define _GLIBCXX_TR1_FUNCTIONAL_HASH_H 1
#include <string> #pragma GCC system_header
#include <cmath> // for std::frexp
namespace std #if defined(_GLIBCXX_INCLUDE_AS_CXX0X)
{ # error TR1 header cannot be included from C++0x header
_GLIBCXX_BEGIN_NAMESPACE(_GLIBCXX_TR1)
// Definition of default hash function std::tr1::hash<>. The types for
// which std::tr1::hash<T> is defined is in clause 6.3.3. of the PDTR.
template<typename T>
struct hash;
#define _TR1_hashtable_define_trivial_hash(_Tp) \
template<> \
struct hash<_Tp> \
: public std::unary_function<_Tp, std::size_t> \
{ \
std::size_t \
operator()(_Tp __val) const \
{ return static_cast<std::size_t>(__val); } \
}
_TR1_hashtable_define_trivial_hash(bool);
_TR1_hashtable_define_trivial_hash(char);
_TR1_hashtable_define_trivial_hash(signed char);
_TR1_hashtable_define_trivial_hash(unsigned char);
_TR1_hashtable_define_trivial_hash(wchar_t);
_TR1_hashtable_define_trivial_hash(short);
_TR1_hashtable_define_trivial_hash(int);
_TR1_hashtable_define_trivial_hash(long);
_TR1_hashtable_define_trivial_hash(long long);
_TR1_hashtable_define_trivial_hash(unsigned short);
_TR1_hashtable_define_trivial_hash(unsigned int);
_TR1_hashtable_define_trivial_hash(unsigned long);
_TR1_hashtable_define_trivial_hash(unsigned long long);
#undef _TR1_hashtable_define_trivial_hash
template<typename _Tp>
struct hash<_Tp*>
: public std::unary_function<_Tp*, std::size_t>
{
std::size_t
operator()(_Tp* __p) const
{ return reinterpret_cast<std::size_t>(__p); }
};
// Fowler / Noll / Vo (FNV) Hash (type FNV-1a)
// (used by the next specializations of std::tr1::hash<>)
// Dummy generic implementation (for sizeof(size_t) != 4, 8).
template<std::size_t = sizeof(std::size_t)>
struct _Fnv_hash
{
static std::size_t
hash(const char* __first, std::size_t __length)
{
std::size_t __result = 0;
for (; __length > 0; --__length)
__result = (__result * 131) + *__first++;
return __result;
}
};
template<>
struct _Fnv_hash<4>
{
static std::size_t
hash(const char* __first, std::size_t __length)
{
std::size_t __result = static_cast<std::size_t>(2166136261UL);
for (; __length > 0; --__length)
{
__result ^= static_cast<std::size_t>(*__first++);
__result *= static_cast<std::size_t>(16777619UL);
}
return __result;
}
};
template<>
struct _Fnv_hash<8>
{
static std::size_t
hash(const char* __first, std::size_t __length)
{
std::size_t __result =
static_cast<std::size_t>(14695981039346656037ULL);
for (; __length > 0; --__length)
{
__result ^= static_cast<std::size_t>(*__first++);
__result *= static_cast<std::size_t>(1099511628211ULL);
}
return __result;
}
};
// XXX String and floating point hashes probably shouldn't be inline
// member functions, since are nontrivial. Once we have the framework
// for TR1 .cc files, these should go in one.
template<>
struct hash<std::string>
: public std::unary_function<std::string, std::size_t>
{
std::size_t
operator()(const std::string& __s) const
{ return _Fnv_hash<>::hash(__s.data(), __s.length()); }
};
#ifdef _GLIBCXX_USE_WCHAR_T
template<>
struct hash<std::wstring>
: public std::unary_function<std::wstring, std::size_t>
{
std::size_t
operator()(const std::wstring& __s) const
{
return _Fnv_hash<>::hash(reinterpret_cast<const char*>(__s.data()),
__s.length() * sizeof(wchar_t));
}
};
#endif #endif
template<> #if defined(_GLIBCXX_INCLUDE_AS_TR1)
struct hash<float> # include <tr1_impl/functional_hash.h>
: public std::unary_function<float, std::size_t> #else
{ # define _GLIBCXX_INCLUDE_AS_TR1
std::size_t # define _GLIBCXX_BEGIN_NAMESPACE_TR1 namespace tr1 {
operator()(float __fval) const # define _GLIBCXX_END_NAMESPACE_TR1 }
{ # define _GLIBCXX_TR1 tr1::
std::size_t __result = 0; # include <tr1_impl/functional_hash.h>
# undef _GLIBCXX_TR1
// 0 and -0 both hash to zero. # undef _GLIBCXX_END_NAMESPACE_TR1
if (__fval != 0.0f) # undef _GLIBCXX_BEGIN_NAMESPACE_TR1
__result = _Fnv_hash<>::hash(reinterpret_cast<const char*>(&__fval), # undef _GLIBCXX_INCLUDE_AS_TR1
sizeof(__fval));
return __result;
}
};
template<>
struct hash<double>
: public std::unary_function<double, std::size_t>
{
std::size_t
operator()(double __dval) const
{
std::size_t __result = 0;
// 0 and -0 both hash to zero.
if (__dval != 0.0)
__result = _Fnv_hash<>::hash(reinterpret_cast<const char*>(&__dval),
sizeof(__dval));
return __result;
}
};
// For long double, careful with random padding bits (e.g., on x86,
// 10 bytes -> 12 bytes) and resort to frexp.
template<>
struct hash<long double>
: public std::unary_function<long double, std::size_t>
{
std::size_t
operator()(long double __ldval) const
{
std::size_t __result = 0;
int __exponent;
__ldval = std::frexp(__ldval, &__exponent);
__ldval = __ldval < 0.0l ? -(__ldval + 0.5l) : __ldval;
const long double __mult =
__gnu_cxx::__numeric_traits<std::size_t>::__max + 1.0l;
__ldval *= __mult;
// Try to use all the bits of the mantissa (really necessary only
// on 32-bit targets, at least for 80-bit floating point formats).
const std::size_t __hibits = (std::size_t)__ldval;
__ldval = (__ldval - (long double)__hibits) * __mult;
const std::size_t __coeff =
__gnu_cxx::__numeric_traits<std::size_t>::__max / __LDBL_MAX_EXP__;
__result = __hibits + (std::size_t)__ldval + __coeff * __exponent;
return __result;
}
};
_GLIBCXX_END_NAMESPACE
}
#endif #endif
#endif // _GLIBCXX_TR1_FUNCTIONAL_HASH_H
...@@ -56,7 +56,8 @@ ...@@ -56,7 +56,8 @@
namespace std namespace std
{ {
_GLIBCXX_BEGIN_NAMESPACE(_GLIBCXX_TR1) namespace tr1
{
/** /**
* @ingroup tr1_math_spec_func * @ingroup tr1_math_spec_func
...@@ -295,9 +296,9 @@ _GLIBCXX_BEGIN_NAMESPACE(_GLIBCXX_TR1) ...@@ -295,9 +296,9 @@ _GLIBCXX_BEGIN_NAMESPACE(_GLIBCXX_TR1)
= std::numeric_limits<_Tp>::max_exponent10 = std::numeric_limits<_Tp>::max_exponent10
* std::log(_Tp(10)) - _Tp(1); * std::log(_Tp(10)) - _Tp(1);
#if _GLIBCXX_USE_C99_MATH_TR1 #if _GLIBCXX_USE_C99_MATH_TR1
_Tp __coeff = std::_GLIBCXX_TR1::lgamma(_Tp(1 + __n)) _Tp __coeff = std::tr1::lgamma(_Tp(1 + __n))
- std::_GLIBCXX_TR1::lgamma(_Tp(1 + __k)) - std::tr1::lgamma(_Tp(1 + __k))
- std::_GLIBCXX_TR1::lgamma(_Tp(1 + __n - __k)); - std::tr1::lgamma(_Tp(1 + __n - __k));
#else #else
_Tp __coeff = __log_gamma(_Tp(1 + __n)) _Tp __coeff = __log_gamma(_Tp(1 + __n))
- __log_gamma(_Tp(1 + __k)) - __log_gamma(_Tp(1 + __k))
...@@ -464,7 +465,7 @@ _GLIBCXX_BEGIN_NAMESPACE(_GLIBCXX_TR1) ...@@ -464,7 +465,7 @@ _GLIBCXX_BEGIN_NAMESPACE(_GLIBCXX_TR1)
{ {
const _Tp __hzeta = __hurwitz_zeta(_Tp(__n + 1), __x); const _Tp __hzeta = __hurwitz_zeta(_Tp(__n + 1), __x);
#if _GLIBCXX_USE_C99_MATH_TR1 #if _GLIBCXX_USE_C99_MATH_TR1
const _Tp __ln_nfact = std::_GLIBCXX_TR1::lgamma(_Tp(__n + 1)); const _Tp __ln_nfact = std::tr1::lgamma(_Tp(__n + 1));
#else #else
const _Tp __ln_nfact = __log_gamma(_Tp(__n + 1)); const _Tp __ln_nfact = __log_gamma(_Tp(__n + 1));
#endif #endif
...@@ -479,7 +480,7 @@ _GLIBCXX_BEGIN_NAMESPACE(_GLIBCXX_TR1) ...@@ -479,7 +480,7 @@ _GLIBCXX_BEGIN_NAMESPACE(_GLIBCXX_TR1)
/* @} */ // group tr1_math_spec_func /* @} */ // group tr1_math_spec_func
_GLIBCXX_END_NAMESPACE }
} }
#endif // _TR1_GAMMA_TCC #endif // _TR1_GAMMA_TCC
......
// TR1 hashtable.h header -*- C++ -*-
// Copyright (C) 2007 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
// terms of the GNU General Public License as published by the
// Free Software Foundation; either version 2, or (at your option)
// any later version.
// This library is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
// You should have received a copy of the GNU General Public License along
// with this library; see the file COPYING. If not, write to the Free
// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
// USA.
// As a special exception, you may use this file as part of a free software
// library without restriction. Specifically, if other files instantiate
// templates or use macros or inline functions from this file, or you compile
// this file and link it with other files to produce an executable, this
// file does not by itself cause the resulting executable to be covered by
// the GNU General Public License. This exception does not however
// invalidate any other reasons why the executable file might be covered by
// the GNU General Public License.
/** @file tr1/hashtable.h
* This is an internal header file, included by other library headers.
* You should not attempt to use it directly.
*/
#ifndef _GLIBCXX_TR1_HASHTABLE_H
#define _GLIBCXX_TR1_HASHTABLE_H 1
#pragma GCC system_header
#if defined(_GLIBCXX_INCLUDE_AS_CXX0X)
# error TR1 header cannot be included from C++0x header
#endif
#if defined(_GLIBCXX_INCLUDE_AS_TR1)
# include <tr1_impl/hashtable>
#else
# define _GLIBCXX_INCLUDE_AS_TR1
# define _GLIBCXX_BEGIN_NAMESPACE_TR1 namespace tr1 {
# define _GLIBCXX_END_NAMESPACE_TR1 }
# define _GLIBCXX_TR1 tr1::
# include <tr1_impl/hashtable>
# undef _GLIBCXX_TR1
# undef _GLIBCXX_END_NAMESPACE_TR1
# undef _GLIBCXX_BEGIN_NAMESPACE_TR1
# undef _GLIBCXX_INCLUDE_AS_TR1
#endif
#endif // _GLIBCXX_TR1_HASHTABLE_H
...@@ -44,12 +44,13 @@ ...@@ -44,12 +44,13 @@
// Section 6, pp. 555-566 // Section 6, pp. 555-566
// (2) The Gnu Scientific Library, http://www.gnu.org/software/gsl // (2) The Gnu Scientific Library, http://www.gnu.org/software/gsl
#ifndef _TR1_HYPERGEOMETRIC_TCC #ifndef _GLIBCXX_TR1_HYPERGEOMETRIC_TCC
#define _TR1_HYPERGEOMETRIC_TCC 1 #define _GLIBCXX_TR1_HYPERGEOMETRIC_TCC 1
namespace std namespace std
{ {
_GLIBCXX_BEGIN_NAMESPACE(_GLIBCXX_TR1) namespace tr1
{
// [5.2] Special functions // [5.2] Special functions
...@@ -233,7 +234,7 @@ _GLIBCXX_BEGIN_NAMESPACE(_GLIBCXX_TR1) ...@@ -233,7 +234,7 @@ _GLIBCXX_BEGIN_NAMESPACE(_GLIBCXX_TR1)
__conf_hyperg(const _Tp __a, const _Tp __c, const _Tp __x) __conf_hyperg(const _Tp __a, const _Tp __c, const _Tp __x)
{ {
#if _GLIBCXX_USE_C99_MATH_TR1 #if _GLIBCXX_USE_C99_MATH_TR1
const _Tp __c_nint = std::_GLIBCXX_TR1::nearbyint(__c); const _Tp __c_nint = std::tr1::nearbyint(__c);
#else #else
const _Tp __c_nint = static_cast<int>(__c + _Tp(0.5L)); const _Tp __c_nint = static_cast<int>(__c + _Tp(0.5L));
#endif #endif
...@@ -735,9 +736,9 @@ _GLIBCXX_BEGIN_NAMESPACE(_GLIBCXX_TR1) ...@@ -735,9 +736,9 @@ _GLIBCXX_BEGIN_NAMESPACE(_GLIBCXX_TR1)
__hyperg(const _Tp __a, const _Tp __b, const _Tp __c, const _Tp __x) __hyperg(const _Tp __a, const _Tp __b, const _Tp __c, const _Tp __x)
{ {
#if _GLIBCXX_USE_C99_MATH_TR1 #if _GLIBCXX_USE_C99_MATH_TR1
const _Tp __a_nint = std::_GLIBCXX_TR1::nearbyint(__a); const _Tp __a_nint = std::tr1::nearbyint(__a);
const _Tp __b_nint = std::_GLIBCXX_TR1::nearbyint(__b); const _Tp __b_nint = std::tr1::nearbyint(__b);
const _Tp __c_nint = std::_GLIBCXX_TR1::nearbyint(__c); const _Tp __c_nint = std::tr1::nearbyint(__c);
#else #else
const _Tp __a_nint = static_cast<int>(__a + _Tp(0.5L)); const _Tp __a_nint = static_cast<int>(__a + _Tp(0.5L));
const _Tp __b_nint = static_cast<int>(__b + _Tp(0.5L)); const _Tp __b_nint = static_cast<int>(__b + _Tp(0.5L));
...@@ -782,7 +783,7 @@ _GLIBCXX_BEGIN_NAMESPACE(_GLIBCXX_TR1) ...@@ -782,7 +783,7 @@ _GLIBCXX_BEGIN_NAMESPACE(_GLIBCXX_TR1)
/* @} */ // group tr1_math_spec_func /* @} */ // group tr1_math_spec_func
_GLIBCXX_END_NAMESPACE }
} }
#endif // _TR1_HYPERGEOMETRIC_TCC #endif // _GLIBCXX_TR1_HYPERGEOMETRIC_TCC
// TR1 inttypes.h -*- C++ -*- // TR1 inttypes.h -*- C++ -*-
// Copyright (C) 2006 Free Software Foundation, Inc. // Copyright (C) 2006, 2007 Free Software Foundation, Inc.
// //
// This file is part of the GNU ISO C++ Library. This library is free // 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 // software; you can redistribute it and/or modify it under the
...@@ -31,9 +31,9 @@ ...@@ -31,9 +31,9 @@
* This is a TR1 C++ Library header. * This is a TR1 C++ Library header.
*/ */
#ifndef _TR1_INTTYPES_H #ifndef _GLIBCXX_TR1_INTTYPES_H
#define _TR1_INTTYPES_H 1 #define _GLIBCXX_TR1_INTTYPES_H 1
#include <tr1/cinttypes> #include <tr1/cinttypes>
#endif #endif // _GLIBCXX_TR1_INTTYPES_H
...@@ -47,14 +47,15 @@ ...@@ -47,14 +47,15 @@
// W. T. Vetterling, B. P. Flannery, Cambridge University Press (1992), // W. T. Vetterling, B. P. Flannery, Cambridge University Press (1992),
// 2nd ed, pp. 252-254 // 2nd ed, pp. 252-254
#ifndef _TR1_LEGENDRE_FUNCTION_TCC #ifndef _GLIBCXX_TR1_LEGENDRE_FUNCTION_TCC
#define _TR1_LEGENDRE_FUNCTION_TCC 1 #define _GLIBCXX_TR1_LEGENDRE_FUNCTION_TCC 1
#include "special_function_util.h" #include "special_function_util.h"
namespace std namespace std
{ {
_GLIBCXX_BEGIN_NAMESPACE(_GLIBCXX_TR1) namespace tr1
{
// [5.2] Special functions // [5.2] Special functions
...@@ -256,14 +257,14 @@ _GLIBCXX_BEGIN_NAMESPACE(_GLIBCXX_TR1) ...@@ -256,14 +257,14 @@ _GLIBCXX_BEGIN_NAMESPACE(_GLIBCXX_TR1)
const _Tp __sgn = ( __m % 2 == 1 ? -_Tp(1) : _Tp(1)); const _Tp __sgn = ( __m % 2 == 1 ? -_Tp(1) : _Tp(1));
const _Tp __y_mp1m_factor = __x * std::sqrt(_Tp(2 * __m + 3)); const _Tp __y_mp1m_factor = __x * std::sqrt(_Tp(2 * __m + 3));
#if _GLIBCXX_USE_C99_MATH_TR1 #if _GLIBCXX_USE_C99_MATH_TR1
const _Tp __lncirc = std::_GLIBCXX_TR1::log1p(-__x * __x); const _Tp __lncirc = std::tr1::log1p(-__x * __x);
#else #else
const _Tp __lncirc = std::log(_Tp(1) - __x * __x); const _Tp __lncirc = std::log(_Tp(1) - __x * __x);
#endif #endif
// Gamma(m+1/2) / Gamma(m) // Gamma(m+1/2) / Gamma(m)
#if _GLIBCXX_USE_C99_MATH_TR1 #if _GLIBCXX_USE_C99_MATH_TR1
const _Tp __lnpoch = std::_GLIBCXX_TR1::lgamma(_Tp(__m + _Tp(0.5L))) const _Tp __lnpoch = std::tr1::lgamma(_Tp(__m + _Tp(0.5L)))
- std::_GLIBCXX_TR1::lgamma(_Tp(__m)); - std::tr1::lgamma(_Tp(__m));
#else #else
const _Tp __lnpoch = __log_gamma(_Tp(__m + _Tp(0.5L))) const _Tp __lnpoch = __log_gamma(_Tp(__m + _Tp(0.5L)))
- __log_gamma(_Tp(__m)); - __log_gamma(_Tp(__m));
...@@ -312,7 +313,7 @@ _GLIBCXX_BEGIN_NAMESPACE(_GLIBCXX_TR1) ...@@ -312,7 +313,7 @@ _GLIBCXX_BEGIN_NAMESPACE(_GLIBCXX_TR1)
/* @} */ // group tr1_math_spec_func /* @} */ // group tr1_math_spec_func
_GLIBCXX_END_NAMESPACE }
} }
#endif // _TR1_LEGENDRE_FUNCTION_TCC #endif // _GLIBCXX_TR1_LEGENDRE_FUNCTION_TCC
...@@ -31,161 +31,161 @@ ...@@ -31,161 +31,161 @@
* This is a TR1 C++ Library header. * This is a TR1 C++ Library header.
*/ */
#ifndef _TR1_MATH_H #ifndef _GLIBCXX_TR1_MATH_H
#define _TR1_MATH_H 1 #define _GLIBCXX_TR1_MATH_H 1
#include <tr1/cmath> #include <tr1/cmath>
#if _GLIBCXX_USE_C99_MATH_TR1 #if _GLIBCXX_USE_C99_MATH_TR1
using std::_GLIBCXX_TR1::acos; using std::tr1::acos;
using std::_GLIBCXX_TR1::acosh; using std::tr1::acosh;
using std::_GLIBCXX_TR1::asin; using std::tr1::asin;
using std::_GLIBCXX_TR1::asinh; using std::tr1::asinh;
using std::_GLIBCXX_TR1::atan; using std::tr1::atan;
using std::_GLIBCXX_TR1::atan2; using std::tr1::atan2;
using std::_GLIBCXX_TR1::atanh; using std::tr1::atanh;
using std::_GLIBCXX_TR1::cbrt; using std::tr1::cbrt;
using std::_GLIBCXX_TR1::ceil; using std::tr1::ceil;
using std::_GLIBCXX_TR1::copysign; using std::tr1::copysign;
using std::_GLIBCXX_TR1::cos; using std::tr1::cos;
using std::_GLIBCXX_TR1::cosh; using std::tr1::cosh;
using std::_GLIBCXX_TR1::erf; using std::tr1::erf;
using std::_GLIBCXX_TR1::erfc; using std::tr1::erfc;
using std::_GLIBCXX_TR1::exp; using std::tr1::exp;
using std::_GLIBCXX_TR1::exp2; using std::tr1::exp2;
using std::_GLIBCXX_TR1::expm1; using std::tr1::expm1;
using std::_GLIBCXX_TR1::fabs; using std::tr1::fabs;
using std::_GLIBCXX_TR1::fdim; using std::tr1::fdim;
using std::_GLIBCXX_TR1::floor; using std::tr1::floor;
using std::_GLIBCXX_TR1::fma; using std::tr1::fma;
using std::_GLIBCXX_TR1::fmax; using std::tr1::fmax;
using std::_GLIBCXX_TR1::fmin; using std::tr1::fmin;
using std::_GLIBCXX_TR1::fmod; using std::tr1::fmod;
using std::_GLIBCXX_TR1::frexp; using std::tr1::frexp;
using std::_GLIBCXX_TR1::hypot; using std::tr1::hypot;
using std::_GLIBCXX_TR1::ilogb; using std::tr1::ilogb;
using std::_GLIBCXX_TR1::ldexp; using std::tr1::ldexp;
using std::_GLIBCXX_TR1::lgamma; using std::tr1::lgamma;
using std::_GLIBCXX_TR1::llrint; using std::tr1::llrint;
using std::_GLIBCXX_TR1::llround; using std::tr1::llround;
using std::_GLIBCXX_TR1::log; using std::tr1::log;
using std::_GLIBCXX_TR1::log10; using std::tr1::log10;
using std::_GLIBCXX_TR1::log1p; using std::tr1::log1p;
using std::_GLIBCXX_TR1::log2; using std::tr1::log2;
using std::_GLIBCXX_TR1::logb; using std::tr1::logb;
using std::_GLIBCXX_TR1::lrint; using std::tr1::lrint;
using std::_GLIBCXX_TR1::lround; using std::tr1::lround;
using std::_GLIBCXX_TR1::nearbyint; using std::tr1::nearbyint;
using std::_GLIBCXX_TR1::nextafter; using std::tr1::nextafter;
using std::_GLIBCXX_TR1::nexttoward; using std::tr1::nexttoward;
using std::_GLIBCXX_TR1::pow; using std::tr1::pow;
using std::_GLIBCXX_TR1::remainder; using std::tr1::remainder;
using std::_GLIBCXX_TR1::remquo; using std::tr1::remquo;
using std::_GLIBCXX_TR1::rint; using std::tr1::rint;
using std::_GLIBCXX_TR1::round; using std::tr1::round;
using std::_GLIBCXX_TR1::scalbln; using std::tr1::scalbln;
using std::_GLIBCXX_TR1::scalbn; using std::tr1::scalbn;
using std::_GLIBCXX_TR1::sin; using std::tr1::sin;
using std::_GLIBCXX_TR1::sinh; using std::tr1::sinh;
using std::_GLIBCXX_TR1::sqrt; using std::tr1::sqrt;
using std::_GLIBCXX_TR1::tan; using std::tr1::tan;
using std::_GLIBCXX_TR1::tanh; using std::tr1::tanh;
using std::_GLIBCXX_TR1::tgamma; using std::tr1::tgamma;
using std::_GLIBCXX_TR1::trunc; using std::tr1::trunc;
#endif #endif
using std::_GLIBCXX_TR1::assoc_laguerref; using std::tr1::assoc_laguerref;
using std::_GLIBCXX_TR1::assoc_laguerre; using std::tr1::assoc_laguerre;
using std::_GLIBCXX_TR1::assoc_laguerrel; using std::tr1::assoc_laguerrel;
using std::_GLIBCXX_TR1::assoc_legendref; using std::tr1::assoc_legendref;
using std::_GLIBCXX_TR1::assoc_legendre; using std::tr1::assoc_legendre;
using std::_GLIBCXX_TR1::assoc_legendrel; using std::tr1::assoc_legendrel;
using std::_GLIBCXX_TR1::betaf; using std::tr1::betaf;
using std::_GLIBCXX_TR1::beta; using std::tr1::beta;
using std::_GLIBCXX_TR1::betal; using std::tr1::betal;
using std::_GLIBCXX_TR1::comp_ellint_1f; using std::tr1::comp_ellint_1f;
using std::_GLIBCXX_TR1::comp_ellint_1; using std::tr1::comp_ellint_1;
using std::_GLIBCXX_TR1::comp_ellint_1l; using std::tr1::comp_ellint_1l;
using std::_GLIBCXX_TR1::comp_ellint_2f; using std::tr1::comp_ellint_2f;
using std::_GLIBCXX_TR1::comp_ellint_2; using std::tr1::comp_ellint_2;
using std::_GLIBCXX_TR1::comp_ellint_2l; using std::tr1::comp_ellint_2l;
using std::_GLIBCXX_TR1::comp_ellint_3f; using std::tr1::comp_ellint_3f;
using std::_GLIBCXX_TR1::comp_ellint_3; using std::tr1::comp_ellint_3;
using std::_GLIBCXX_TR1::comp_ellint_3l; using std::tr1::comp_ellint_3l;
using std::_GLIBCXX_TR1::conf_hypergf; using std::tr1::conf_hypergf;
using std::_GLIBCXX_TR1::conf_hyperg; using std::tr1::conf_hyperg;
using std::_GLIBCXX_TR1::conf_hypergl; using std::tr1::conf_hypergl;
using std::_GLIBCXX_TR1::cyl_bessel_if; using std::tr1::cyl_bessel_if;
using std::_GLIBCXX_TR1::cyl_bessel_i; using std::tr1::cyl_bessel_i;
using std::_GLIBCXX_TR1::cyl_bessel_il; using std::tr1::cyl_bessel_il;
using std::_GLIBCXX_TR1::cyl_bessel_jf; using std::tr1::cyl_bessel_jf;
using std::_GLIBCXX_TR1::cyl_bessel_j; using std::tr1::cyl_bessel_j;
using std::_GLIBCXX_TR1::cyl_bessel_jl; using std::tr1::cyl_bessel_jl;
using std::_GLIBCXX_TR1::cyl_bessel_kf; using std::tr1::cyl_bessel_kf;
using std::_GLIBCXX_TR1::cyl_bessel_k; using std::tr1::cyl_bessel_k;
using std::_GLIBCXX_TR1::cyl_bessel_kl; using std::tr1::cyl_bessel_kl;
using std::_GLIBCXX_TR1::cyl_neumannf; using std::tr1::cyl_neumannf;
using std::_GLIBCXX_TR1::cyl_neumann; using std::tr1::cyl_neumann;
using std::_GLIBCXX_TR1::cyl_neumannl; using std::tr1::cyl_neumannl;
using std::_GLIBCXX_TR1::ellint_1f; using std::tr1::ellint_1f;
using std::_GLIBCXX_TR1::ellint_1; using std::tr1::ellint_1;
using std::_GLIBCXX_TR1::ellint_1l; using std::tr1::ellint_1l;
using std::_GLIBCXX_TR1::ellint_2f; using std::tr1::ellint_2f;
using std::_GLIBCXX_TR1::ellint_2; using std::tr1::ellint_2;
using std::_GLIBCXX_TR1::ellint_2l; using std::tr1::ellint_2l;
using std::_GLIBCXX_TR1::ellint_3f; using std::tr1::ellint_3f;
using std::_GLIBCXX_TR1::ellint_3; using std::tr1::ellint_3;
using std::_GLIBCXX_TR1::ellint_3l; using std::tr1::ellint_3l;
using std::_GLIBCXX_TR1::expintf; using std::tr1::expintf;
using std::_GLIBCXX_TR1::expint; using std::tr1::expint;
using std::_GLIBCXX_TR1::expintl; using std::tr1::expintl;
using std::_GLIBCXX_TR1::hermitef; using std::tr1::hermitef;
using std::_GLIBCXX_TR1::hermite; using std::tr1::hermite;
using std::_GLIBCXX_TR1::hermitel; using std::tr1::hermitel;
using std::_GLIBCXX_TR1::hypergf; using std::tr1::hypergf;
using std::_GLIBCXX_TR1::hyperg; using std::tr1::hyperg;
using std::_GLIBCXX_TR1::hypergl; using std::tr1::hypergl;
using std::_GLIBCXX_TR1::laguerref; using std::tr1::laguerref;
using std::_GLIBCXX_TR1::laguerre; using std::tr1::laguerre;
using std::_GLIBCXX_TR1::laguerrel; using std::tr1::laguerrel;
using std::_GLIBCXX_TR1::legendref; using std::tr1::legendref;
using std::_GLIBCXX_TR1::legendre; using std::tr1::legendre;
using std::_GLIBCXX_TR1::legendrel; using std::tr1::legendrel;
using std::_GLIBCXX_TR1::riemann_zetaf; using std::tr1::riemann_zetaf;
using std::_GLIBCXX_TR1::riemann_zeta; using std::tr1::riemann_zeta;
using std::_GLIBCXX_TR1::riemann_zetal; using std::tr1::riemann_zetal;
using std::_GLIBCXX_TR1::sph_besself; using std::tr1::sph_besself;
using std::_GLIBCXX_TR1::sph_bessel; using std::tr1::sph_bessel;
using std::_GLIBCXX_TR1::sph_bessell; using std::tr1::sph_bessell;
using std::_GLIBCXX_TR1::sph_legendref; using std::tr1::sph_legendref;
using std::_GLIBCXX_TR1::sph_legendre; using std::tr1::sph_legendre;
using std::_GLIBCXX_TR1::sph_legendrel; using std::tr1::sph_legendrel;
using std::_GLIBCXX_TR1::sph_neumannf; using std::tr1::sph_neumannf;
using std::_GLIBCXX_TR1::sph_neumann; using std::tr1::sph_neumann;
using std::_GLIBCXX_TR1::sph_neumannl; using std::tr1::sph_neumannl;
#endif #endif // _GLIBCXX_TR1_MATH_H
...@@ -32,24 +32,40 @@ ...@@ -32,24 +32,40 @@
* This is a TR1 C++ Library header. * This is a TR1 C++ Library header.
*/ */
#ifndef _TR1_MEMORY #ifndef _GLIBCXX_TR1_MEMORY
#define _TR1_MEMORY 1 #define _GLIBCXX_TR1_MEMORY 1
#include <cstddef> // std::size_t #pragma GCC system_header
#if defined(_GLIBCXX_INCLUDE_AS_CXX0X)
# error TR1 header cannot be included from C++0x header
#endif
#include <memory>
#include <exception> // std::exception #include <exception> // std::exception
#include <new> // std::bad_alloc #include <new> // std::bad_alloc
#include <typeinfo> // std::type_info in get_deleter #include <typeinfo> // std::type_info in get_deleter
#include <bits/stl_algobase.h> // std::swap #include <bits/stl_algobase.h> // std::swap
#include <iosfwd> // std::basic_ostream #include <iosfwd> // std::basic_ostream
#include <memory>
#include <ext/atomicity.h> #include <ext/atomicity.h>
#include <ext/concurrence.h> #include <ext/concurrence.h>
#include <bits/functexcept.h> #include <bits/functexcept.h>
#include <bits/stl_function.h> // std::less #include <bits/stl_function.h> // std::less
#include <debug/debug.h> #include <debug/debug.h>
#include <tr1/type_traits>
#include <tr1/type_traits> // tr1::add_reference #if defined(_GLIBCXX_INCLUDE_AS_TR1)
#include <tr1/boost_shared_ptr.h> # include <tr1_impl/boost_shared_ptr.h>
#else
# define _GLIBCXX_INCLUDE_AS_TR1
# define _GLIBCXX_BEGIN_NAMESPACE_TR1 namespace tr1 {
# define _GLIBCXX_END_NAMESPACE_TR1 }
# define _GLIBCXX_TR1 tr1::
# include <tr1_impl/boost_shared_ptr.h>
# undef _GLIBCXX_TR1
# undef _GLIBCXX_END_NAMESPACE_TR1
# undef _GLIBCXX_BEGIN_NAMESPACE_TR1
# undef _GLIBCXX_INCLUDE_AS_TR1
#endif #endif
#endif // _GLIBCXX_TR1_MEMORY
...@@ -49,14 +49,15 @@ ...@@ -49,14 +49,15 @@
// W. T. Vetterling, B. P. Flannery, Cambridge University Press (1992), // W. T. Vetterling, B. P. Flannery, Cambridge University Press (1992),
// 2nd ed, pp. 246-249. // 2nd ed, pp. 246-249.
#ifndef _TR1_MODIFIED_BESSEL_FUNC_TCC #ifndef _GLIBCXX_TR1_MODIFIED_BESSEL_FUNC_TCC
#define _TR1_MODIFIED_BESSEL_FUNC_TCC 1 #define _GLIBCXX_TR1_MODIFIED_BESSEL_FUNC_TCC 1
#include "special_function_util.h" #include "special_function_util.h"
namespace std namespace std
{ {
_GLIBCXX_BEGIN_NAMESPACE(_GLIBCXX_TR1) namespace tr1
{
// [5.2] Special functions // [5.2] Special functions
...@@ -444,7 +445,7 @@ _GLIBCXX_BEGIN_NAMESPACE(_GLIBCXX_TR1) ...@@ -444,7 +445,7 @@ _GLIBCXX_BEGIN_NAMESPACE(_GLIBCXX_TR1)
/* @} */ // group tr1_math_spec_func /* @} */ // group tr1_math_spec_func
_GLIBCXX_END_NAMESPACE }
} }
#endif // _TR1_MODIFIED_BESSEL_FUNC_TCC #endif // _GLIBCXX_TR1_MODIFIED_BESSEL_FUNC_TCC
...@@ -42,12 +42,13 @@ ...@@ -42,12 +42,13 @@
// Ed. Milton Abramowitz and Irene A. Stegun, // Ed. Milton Abramowitz and Irene A. Stegun,
// Dover Publications, Section 22 pp. 773-802 // Dover Publications, Section 22 pp. 773-802
#ifndef _TR1_POLY_HERMITE_TCC #ifndef _GLIBCXX_TR1_POLY_HERMITE_TCC
#define _TR1_POLY_HERMITE_TCC 1 #define _GLIBCXX_TR1_POLY_HERMITE_TCC 1
namespace std namespace std
{ {
_GLIBCXX_BEGIN_NAMESPACE(_GLIBCXX_TR1) namespace tr1
{
// [5.2] Special functions // [5.2] Special functions
...@@ -132,7 +133,7 @@ _GLIBCXX_BEGIN_NAMESPACE(_GLIBCXX_TR1) ...@@ -132,7 +133,7 @@ _GLIBCXX_BEGIN_NAMESPACE(_GLIBCXX_TR1)
/* @} */ // group tr1_math_spec_func /* @} */ // group tr1_math_spec_func
_GLIBCXX_END_NAMESPACE }
} }
#endif // _TR1_POLY_HERMITE_TCC #endif // _GLIBCXX_TR1_POLY_HERMITE_TCC
...@@ -44,12 +44,13 @@ ...@@ -44,12 +44,13 @@
// Section 13, pp. 509-510, Section 22 pp. 773-802 // Section 13, pp. 509-510, Section 22 pp. 773-802
// (2) The Gnu Scientific Library, http://www.gnu.org/software/gsl // (2) The Gnu Scientific Library, http://www.gnu.org/software/gsl
#ifndef _TR1_POLY_LAGUERRE_TCC #ifndef _GLIBCXX_TR1_POLY_LAGUERRE_TCC
#define _TR1_POLY_LAGUERRE_TCC 1 #define _GLIBCXX_TR1_POLY_LAGUERRE_TCC 1
namespace std namespace std
{ {
_GLIBCXX_BEGIN_NAMESPACE(_GLIBCXX_TR1) namespace tr1
{
// [5.2] Special functions // [5.2] Special functions
...@@ -94,8 +95,8 @@ _GLIBCXX_BEGIN_NAMESPACE(_GLIBCXX_TR1) ...@@ -94,8 +95,8 @@ _GLIBCXX_BEGIN_NAMESPACE(_GLIBCXX_TR1)
* __eta * __eta * __cos2th * __sin2th; * __eta * __eta * __cos2th * __sin2th;
#if _GLIBCXX_USE_C99_MATH_TR1 #if _GLIBCXX_USE_C99_MATH_TR1
const _Tp __lg_b = std::_GLIBCXX_TR1::lgamma(_Tp(__n) + __b); const _Tp __lg_b = std::tr1::lgamma(_Tp(__n) + __b);
const _Tp __lnfact = std::_GLIBCXX_TR1::lgamma(_Tp(__n + 1)); const _Tp __lnfact = std::tr1::lgamma(_Tp(__n + 1));
#else #else
const _Tp __lg_b = __log_gamma(_Tp(__n) + __b); const _Tp __lg_b = __log_gamma(_Tp(__n) + __b);
const _Tp __lnfact = __log_gamma(_Tp(__n + 1)); const _Tp __lnfact = __log_gamma(_Tp(__n + 1));
...@@ -337,7 +338,7 @@ _GLIBCXX_BEGIN_NAMESPACE(_GLIBCXX_TR1) ...@@ -337,7 +338,7 @@ _GLIBCXX_BEGIN_NAMESPACE(_GLIBCXX_TR1)
/* @} */ // group tr1_math_spec_func /* @} */ // group tr1_math_spec_func
_GLIBCXX_END_NAMESPACE }
} }
#endif // _TR1_POLY_LAGUERRE_TCC #endif // _GLIBCXX_TR1_POLY_LAGUERRE_TCC
...@@ -45,14 +45,15 @@ ...@@ -45,14 +45,15 @@
// (3) Gamma, Exploring Euler's Constant, Julian Havil, // (3) Gamma, Exploring Euler's Constant, Julian Havil,
// Princeton, 2003. // Princeton, 2003.
#ifndef _TR1_RIEMANN_ZETA_TCC #ifndef _GLIBCXX_TR1_RIEMANN_ZETA_TCC
#define _TR1_RIEMANN_ZETA_TCC 1 #define _GLIBCXX_TR1_RIEMANN_ZETA_TCC 1
#include "special_function_util.h" #include "special_function_util.h"
namespace std namespace std
{ {
_GLIBCXX_BEGIN_NAMESPACE(_GLIBCXX_TR1) namespace tr1
{
// [5.2] Special functions // [5.2] Special functions
...@@ -175,7 +176,7 @@ _GLIBCXX_BEGIN_NAMESPACE(_GLIBCXX_TR1) ...@@ -175,7 +176,7 @@ _GLIBCXX_BEGIN_NAMESPACE(_GLIBCXX_TR1)
if (__s < _Tp(0)) if (__s < _Tp(0))
{ {
#if _GLIBCXX_USE_C99_MATH_TR1 #if _GLIBCXX_USE_C99_MATH_TR1
if (std::_GLIBCXX_TR1::fmod(__s,_Tp(2)) == _Tp(0)) if (std::tr1::fmod(__s,_Tp(2)) == _Tp(0))
return _Tp(0); return _Tp(0);
else else
#endif #endif
...@@ -185,7 +186,7 @@ _GLIBCXX_BEGIN_NAMESPACE(_GLIBCXX_TR1) ...@@ -185,7 +186,7 @@ _GLIBCXX_BEGIN_NAMESPACE(_GLIBCXX_TR1)
* __numeric_constants<_Tp>::__pi(), __s) * __numeric_constants<_Tp>::__pi(), __s)
* std::sin(__numeric_constants<_Tp>::__pi_2() * __s) * std::sin(__numeric_constants<_Tp>::__pi_2() * __s)
#if _GLIBCXX_USE_C99_MATH_TR1 #if _GLIBCXX_USE_C99_MATH_TR1
* std::exp(std::_GLIBCXX_TR1::lgamma(_Tp(1) - __s)) * std::exp(std::tr1::lgamma(_Tp(1) - __s))
#else #else
* std::exp(__log_gamma(_Tp(1) - __s)) * std::exp(__log_gamma(_Tp(1) - __s))
#endif #endif
...@@ -204,9 +205,9 @@ _GLIBCXX_BEGIN_NAMESPACE(_GLIBCXX_TR1) ...@@ -204,9 +205,9 @@ _GLIBCXX_BEGIN_NAMESPACE(_GLIBCXX_TR1)
for (unsigned int __j = 0; __j <= __i; ++__j) for (unsigned int __j = 0; __j <= __i; ++__j)
{ {
#if _GLIBCXX_USE_C99_MATH_TR1 #if _GLIBCXX_USE_C99_MATH_TR1
_Tp __bincoeff = std::_GLIBCXX_TR1::lgamma(_Tp(1 + __i)) _Tp __bincoeff = std::tr1::lgamma(_Tp(1 + __i))
- std::_GLIBCXX_TR1::lgamma(_Tp(1 + __j)) - std::tr1::lgamma(_Tp(1 + __j))
- std::_GLIBCXX_TR1::lgamma(_Tp(1 + __i - __j)); - std::tr1::lgamma(_Tp(1 + __i - __j));
#else #else
_Tp __bincoeff = __log_gamma(_Tp(1 + __i)) _Tp __bincoeff = __log_gamma(_Tp(1 + __i))
- __log_gamma(_Tp(1 + __j)) - __log_gamma(_Tp(1 + __j))
...@@ -309,7 +310,7 @@ _GLIBCXX_BEGIN_NAMESPACE(_GLIBCXX_TR1) ...@@ -309,7 +310,7 @@ _GLIBCXX_BEGIN_NAMESPACE(_GLIBCXX_TR1)
__zeta *= std::pow(_Tp(2) * __numeric_constants<_Tp>::__pi(), __s) __zeta *= std::pow(_Tp(2) * __numeric_constants<_Tp>::__pi(), __s)
* std::sin(__numeric_constants<_Tp>::__pi_2() * __s) * std::sin(__numeric_constants<_Tp>::__pi_2() * __s)
#if _GLIBCXX_USE_C99_MATH_TR1 #if _GLIBCXX_USE_C99_MATH_TR1
* std::exp(std::_GLIBCXX_TR1::lgamma(_Tp(1) - __s)) * std::exp(std::tr1::lgamma(_Tp(1) - __s))
#else #else
* std::exp(__log_gamma(_Tp(1) - __s)) * std::exp(__log_gamma(_Tp(1) - __s))
#endif #endif
...@@ -332,7 +333,7 @@ _GLIBCXX_BEGIN_NAMESPACE(_GLIBCXX_TR1) ...@@ -332,7 +333,7 @@ _GLIBCXX_BEGIN_NAMESPACE(_GLIBCXX_TR1)
* __numeric_constants<_Tp>::__pi(), __s) * __numeric_constants<_Tp>::__pi(), __s)
* std::sin(__numeric_constants<_Tp>::__pi_2() * __s) * std::sin(__numeric_constants<_Tp>::__pi_2() * __s)
#if _GLIBCXX_USE_C99_MATH_TR1 #if _GLIBCXX_USE_C99_MATH_TR1
* std::_GLIBCXX_TR1::tgamma(_Tp(1) - __s) * std::tr1::tgamma(_Tp(1) - __s)
#else #else
* std::exp(__log_gamma(_Tp(1) - __s)) * std::exp(__log_gamma(_Tp(1) - __s))
#endif #endif
...@@ -387,9 +388,9 @@ _GLIBCXX_BEGIN_NAMESPACE(_GLIBCXX_TR1) ...@@ -387,9 +388,9 @@ _GLIBCXX_BEGIN_NAMESPACE(_GLIBCXX_TR1)
for (unsigned int __j = 0; __j <= __i; ++__j) for (unsigned int __j = 0; __j <= __i; ++__j)
{ {
#if _GLIBCXX_USE_C99_MATH_TR1 #if _GLIBCXX_USE_C99_MATH_TR1
_Tp __bincoeff = std::_GLIBCXX_TR1::lgamma(_Tp(1 + __i)) _Tp __bincoeff = std::tr1::lgamma(_Tp(1 + __i))
- std::_GLIBCXX_TR1::lgamma(_Tp(1 + __j)) - std::tr1::lgamma(_Tp(1 + __j))
- std::_GLIBCXX_TR1::lgamma(_Tp(1 + __i - __j)); - std::tr1::lgamma(_Tp(1 + __i - __j));
#else #else
_Tp __bincoeff = __log_gamma(_Tp(1 + __i)) _Tp __bincoeff = __log_gamma(_Tp(1 + __i))
- __log_gamma(_Tp(1 + __j)) - __log_gamma(_Tp(1 + __j))
...@@ -443,7 +444,7 @@ _GLIBCXX_BEGIN_NAMESPACE(_GLIBCXX_TR1) ...@@ -443,7 +444,7 @@ _GLIBCXX_BEGIN_NAMESPACE(_GLIBCXX_TR1)
/* @} */ // group tr1_math_spec_func /* @} */ // group tr1_math_spec_func
_GLIBCXX_END_NAMESPACE }
} }
#endif // _TR1_RIEMANN_ZETA_TCC #endif // _GLIBCXX_TR1_RIEMANN_ZETA_TCC
...@@ -39,13 +39,14 @@ ...@@ -39,13 +39,14 @@
// Written by Edward Smith-Rowland based on numerous mathematics books. // Written by Edward Smith-Rowland based on numerous mathematics books.
#ifndef _TR1_SPECIAL_FUNCTION_UTIL_H #ifndef _GLIBCXX_TR1_SPECIAL_FUNCTION_UTIL_H
#define _TR1_SPECIAL_FUNCTION_UTIL_H 1 #define _GLIBCXX_TR1_SPECIAL_FUNCTION_UTIL_H 1
// namespace std::tr1 // namespace std::tr1
namespace std namespace std
{ {
_GLIBCXX_BEGIN_NAMESPACE(_GLIBCXX_TR1) namespace tr1
{
namespace __detail namespace __detail
{ {
...@@ -148,8 +149,8 @@ _GLIBCXX_BEGIN_NAMESPACE(_GLIBCXX_TR1) ...@@ -148,8 +149,8 @@ _GLIBCXX_BEGIN_NAMESPACE(_GLIBCXX_TR1)
} // namespace __detail } // namespace __detail
_GLIBCXX_END_NAMESPACE }
} }
#endif // _TR1_SPECIAL_FUNCTION_UTIL_H #endif // _GLIBCXX_TR1_SPECIAL_FUNCTION_UTIL_H
...@@ -31,8 +31,8 @@ ...@@ -31,8 +31,8 @@
* This is a TR1 C++ Library header. * This is a TR1 C++ Library header.
*/ */
#ifndef _TR1_STDLIB_H #ifndef _GLIBCXX_TR1_STDLIB_H
#define _TR1_STDLIB_H 1 #define _GLIBCXX_TR1_STDLIB_H 1
#include <tr1/cstdlib> #include <tr1/cstdlib>
...@@ -40,17 +40,18 @@ ...@@ -40,17 +40,18 @@
#if _GLIBCXX_USE_C99 #if _GLIBCXX_USE_C99
using std::_GLIBCXX_TR1::atoll; using std::tr1::atoll;
using std::_GLIBCXX_TR1::strtoll; using std::tr1::strtoll;
using std::_GLIBCXX_TR1::strtoull; using std::tr1::strtoull;
using std::_GLIBCXX_TR1::abs; using std::tr1::abs;
#if !_GLIBCXX_USE_C99_LONG_LONG_DYNAMIC #if !_GLIBCXX_USE_C99_LONG_LONG_DYNAMIC
using std::_GLIBCXX_TR1::div; using std::tr1::div;
#endif #endif
#endif #endif
#endif #endif
#endif #endif // _GLIBCXX_TR1_STDLIB_H
// TR1 tgmath.h -*- C++ -*- // TR1 tgmath.h -*- C++ -*-
// Copyright (C) 2006 Free Software Foundation, Inc. // Copyright (C) 2006, 2007 Free Software Foundation, Inc.
// //
// This file is part of the GNU ISO C++ Library. This library is free // 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 // software; you can redistribute it and/or modify it under the
...@@ -31,9 +31,9 @@ ...@@ -31,9 +31,9 @@
* This is a TR1 C++ Library header. * This is a TR1 C++ Library header.
*/ */
#ifndef _TR1_TGMATH_H #ifndef _GLIBCXX_TR1_TGMATH_H
#define _TR1_TGMATH_H 1 #define _GLIBCXX_TR1_TGMATH_H 1
#include <tr1/ctgmath> #include <tr1/ctgmath>
#endif #endif // _GLIBCXX_TR1_TGMATH_H
...@@ -31,206 +31,37 @@ ...@@ -31,206 +31,37 @@
* This is a TR1 C++ Library header. * This is a TR1 C++ Library header.
*/ */
#ifndef _TR1_UNORDERED_MAP #ifndef _GLIBCXX_TR1_UNORDERED_MAP
#define _TR1_UNORDERED_MAP 1 #define _GLIBCXX_TR1_UNORDERED_MAP 1
#include <tr1/hashtable> #pragma GCC system_header
#if defined(_GLIBCXX_INCLUDE_AS_CXX0X)
# error TR1 header cannot be included from C++0x header
#endif
#include <cmath>
#include <string>
#include <utility>
#include <algorithm> // lower_bound
#include <bits/allocator.h>
#include <bits/stl_function.h> // equal_to, _Identity, _Select1st
#include <tr1/type_traits>
#include <tr1/functional_hash.h> #include <tr1/functional_hash.h>
#include <tr1/hashtable.h>
namespace std
{ #if defined(_GLIBCXX_INCLUDE_AS_TR1)
_GLIBCXX_BEGIN_NAMESPACE(_GLIBCXX_TR1) # include <tr1_impl/unordered_map>
#else
// XXX When we get typedef templates these class definitions # define _GLIBCXX_INCLUDE_AS_TR1
// will be unnecessary. # define _GLIBCXX_BEGIN_NAMESPACE_TR1 namespace tr1 {
template<class _Key, class _Tp, # define _GLIBCXX_END_NAMESPACE_TR1 }
class _Hash = hash<_Key>, # define _GLIBCXX_TR1 tr1::
class _Pred = std::equal_to<_Key>, # include <tr1_impl/unordered_map>
class _Alloc = std::allocator<std::pair<const _Key, _Tp> >, # undef _GLIBCXX_TR1
bool __cache_hash_code = false> # undef _GLIBCXX_END_NAMESPACE_TR1
class __unordered_map # undef _GLIBCXX_BEGIN_NAMESPACE_TR1
: public _Hashtable<_Key, std::pair<const _Key, _Tp>, _Alloc, # undef _GLIBCXX_INCLUDE_AS_TR1
std::_Select1st<std::pair<const _Key, _Tp> >, _Pred, #endif
_Hash, __detail::_Mod_range_hashing,
__detail::_Default_ranged_hash, #endif // _GLIBCXX_TR1_UNORDERED_MAP
__detail::_Prime_rehash_policy,
__cache_hash_code, false, true>
{
typedef _Hashtable<_Key, std::pair<const _Key, _Tp>, _Alloc,
std::_Select1st<std::pair<const _Key, _Tp> >, _Pred,
_Hash, __detail::_Mod_range_hashing,
__detail::_Default_ranged_hash,
__detail::_Prime_rehash_policy,
__cache_hash_code, false, true>
_Base;
public:
typedef typename _Base::size_type size_type;
typedef typename _Base::hasher hasher;
typedef typename _Base::key_equal key_equal;
typedef typename _Base::allocator_type allocator_type;
explicit
__unordered_map(size_type __n = 10,
const hasher& __hf = hasher(),
const key_equal& __eql = key_equal(),
const allocator_type& __a = allocator_type())
: _Base(__n, __hf, __detail::_Mod_range_hashing(),
__detail::_Default_ranged_hash(),
__eql, std::_Select1st<std::pair<const _Key, _Tp> >(), __a)
{ }
template<typename _InputIterator>
__unordered_map(_InputIterator __f, _InputIterator __l,
size_type __n = 10,
const hasher& __hf = hasher(),
const key_equal& __eql = key_equal(),
const allocator_type& __a = allocator_type())
: _Base(__f, __l, __n, __hf, __detail::_Mod_range_hashing(),
__detail::_Default_ranged_hash(),
__eql, std::_Select1st<std::pair<const _Key, _Tp> >(), __a)
{ }
};
template<class _Key, class _Tp,
class _Hash = hash<_Key>,
class _Pred = std::equal_to<_Key>,
class _Alloc = std::allocator<std::pair<const _Key, _Tp> >,
bool __cache_hash_code = false>
class __unordered_multimap
: public _Hashtable<_Key, std::pair<const _Key, _Tp>,
_Alloc,
std::_Select1st<std::pair<const _Key, _Tp> >, _Pred,
_Hash, __detail::_Mod_range_hashing,
__detail::_Default_ranged_hash,
__detail::_Prime_rehash_policy,
__cache_hash_code, false, false>
{
typedef _Hashtable<_Key, std::pair<const _Key, _Tp>,
_Alloc,
std::_Select1st<std::pair<const _Key, _Tp> >, _Pred,
_Hash, __detail::_Mod_range_hashing,
__detail::_Default_ranged_hash,
__detail::_Prime_rehash_policy,
__cache_hash_code, false, false>
_Base;
public:
typedef typename _Base::size_type size_type;
typedef typename _Base::hasher hasher;
typedef typename _Base::key_equal key_equal;
typedef typename _Base::allocator_type allocator_type;
explicit
__unordered_multimap(size_type __n = 10,
const hasher& __hf = hasher(),
const key_equal& __eql = key_equal(),
const allocator_type& __a = allocator_type())
: _Base(__n, __hf, __detail::_Mod_range_hashing(),
__detail::_Default_ranged_hash(),
__eql, std::_Select1st<std::pair<const _Key, _Tp> >(), __a)
{ }
template<typename _InputIterator>
__unordered_multimap(_InputIterator __f, _InputIterator __l,
typename _Base::size_type __n = 0,
const hasher& __hf = hasher(),
const key_equal& __eql = key_equal(),
const allocator_type& __a = allocator_type())
: _Base(__f, __l, __n, __hf, __detail::_Mod_range_hashing(),
__detail::_Default_ranged_hash(),
__eql, std::_Select1st<std::pair<const _Key, _Tp> >(), __a)
{ }
};
template<class _Key, class _Tp, class _Hash, class _Pred, class _Alloc,
bool __cache_hash_code>
inline void
swap(__unordered_map<_Key, _Tp, _Hash, _Pred,
_Alloc, __cache_hash_code>& __x,
__unordered_map<_Key, _Tp, _Hash, _Pred,
_Alloc, __cache_hash_code>& __y)
{ __x.swap(__y); }
template<class _Key, class _Tp, class _Hash, class _Pred, class _Alloc,
bool __cache_hash_code>
inline void
swap(__unordered_multimap<_Key, _Tp, _Hash, _Pred,
_Alloc, __cache_hash_code>& __x,
__unordered_multimap<_Key, _Tp, _Hash, _Pred,
_Alloc, __cache_hash_code>& __y)
{ __x.swap(__y); }
template<class _Key, class _Tp,
class _Hash = hash<_Key>,
class _Pred = std::equal_to<_Key>,
class _Alloc = std::allocator<std::pair<const _Key, _Tp> > >
class unordered_map
: public __unordered_map<_Key, _Tp, _Hash, _Pred, _Alloc>
{
typedef __unordered_map<_Key, _Tp, _Hash, _Pred, _Alloc> _Base;
public:
typedef typename _Base::size_type size_type;
typedef typename _Base::hasher hasher;
typedef typename _Base::key_equal key_equal;
typedef typename _Base::allocator_type allocator_type;
explicit
unordered_map(size_type __n = 10,
const hasher& __hf = hasher(),
const key_equal& __eql = key_equal(),
const allocator_type& __a = allocator_type())
: _Base(__n, __hf, __eql, __a)
{ }
template<typename _InputIterator>
unordered_map(_InputIterator __f, _InputIterator __l,
size_type __n = 10,
const hasher& __hf = hasher(),
const key_equal& __eql = key_equal(),
const allocator_type& __a = allocator_type())
: _Base(__f, __l, __n, __hf, __eql, __a)
{ }
};
template<class _Key, class _Tp,
class _Hash = hash<_Key>,
class _Pred = std::equal_to<_Key>,
class _Alloc = std::allocator<std::pair<const _Key, _Tp> > >
class unordered_multimap
: public __unordered_multimap<_Key, _Tp, _Hash, _Pred, _Alloc>
{
typedef __unordered_multimap<_Key, _Tp, _Hash, _Pred, _Alloc> _Base;
public:
typedef typename _Base::size_type size_type;
typedef typename _Base::hasher hasher;
typedef typename _Base::key_equal key_equal;
typedef typename _Base::allocator_type allocator_type;
explicit
unordered_multimap(size_type __n = 10,
const hasher& __hf = hasher(),
const key_equal& __eql = key_equal(),
const allocator_type& __a = allocator_type())
: _Base(__n, __hf, __eql, __a)
{ }
template<typename _InputIterator>
unordered_multimap(_InputIterator __f, _InputIterator __l,
typename _Base::size_type __n = 0,
const hasher& __hf = hasher(),
const key_equal& __eql = key_equal(),
const allocator_type& __a = allocator_type())
: _Base(__f, __l, __n, __hf, __eql, __a)
{ }
};
_GLIBCXX_END_NAMESPACE
}
#endif // _TR1_UNORDERED_MAP
...@@ -31,204 +31,37 @@ ...@@ -31,204 +31,37 @@
* This is a TR1 C++ Library header. * This is a TR1 C++ Library header.
*/ */
#ifndef _TR1_UNORDERED_SET #ifndef _GLIBCXX_TR1_UNORDERED_SET
#define _TR1_UNORDERED_SET 1 #define _GLIBCXX_TR1_UNORDERED_SET 1
#include <tr1/hashtable> #pragma GCC system_header
#if defined(_GLIBCXX_INCLUDE_AS_CXX0X)
# error TR1 header cannot be included from C++0x header
#endif
#include <cmath>
#include <string>
#include <utility>
#include <algorithm> // lower_bound
#include <bits/allocator.h>
#include <bits/stl_function.h> // equal_to, _Identity, _Select1st
#include <tr1/type_traits>
#include <tr1/functional_hash.h> #include <tr1/functional_hash.h>
#include <tr1/hashtable.h>
namespace std
{ #if defined(_GLIBCXX_INCLUDE_AS_TR1)
_GLIBCXX_BEGIN_NAMESPACE(_GLIBCXX_TR1) # include <tr1_impl/unordered_set>
#else
// XXX When we get typedef templates these class definitions # define _GLIBCXX_INCLUDE_AS_TR1
// will be unnecessary. # define _GLIBCXX_BEGIN_NAMESPACE_TR1 namespace tr1 {
template<class _Value, # define _GLIBCXX_END_NAMESPACE_TR1 }
class _Hash = hash<_Value>, # define _GLIBCXX_TR1 tr1::
class _Pred = std::equal_to<_Value>, # include <tr1_impl/unordered_set>
class _Alloc = std::allocator<_Value>, # undef _GLIBCXX_TR1
bool __cache_hash_code = false> # undef _GLIBCXX_END_NAMESPACE_TR1
class __unordered_set # undef _GLIBCXX_BEGIN_NAMESPACE_TR1
: public _Hashtable<_Value, _Value, _Alloc, # undef _GLIBCXX_INCLUDE_AS_TR1
std::_Identity<_Value>, _Pred, #endif
_Hash, __detail::_Mod_range_hashing,
__detail::_Default_ranged_hash, #endif // _GLIBCXX_TR1_UNORDERED_SET
__detail::_Prime_rehash_policy,
__cache_hash_code, true, true>
{
typedef _Hashtable<_Value, _Value, _Alloc,
std::_Identity<_Value>, _Pred,
_Hash, __detail::_Mod_range_hashing,
__detail::_Default_ranged_hash,
__detail::_Prime_rehash_policy,
__cache_hash_code, true, true>
_Base;
public:
typedef typename _Base::size_type size_type;
typedef typename _Base::hasher hasher;
typedef typename _Base::key_equal key_equal;
typedef typename _Base::allocator_type allocator_type;
explicit
__unordered_set(size_type __n = 10,
const hasher& __hf = hasher(),
const key_equal& __eql = key_equal(),
const allocator_type& __a = allocator_type())
: _Base(__n, __hf, __detail::_Mod_range_hashing(),
__detail::_Default_ranged_hash(), __eql,
std::_Identity<_Value>(), __a)
{ }
template<typename _InputIterator>
__unordered_set(_InputIterator __f, _InputIterator __l,
size_type __n = 10,
const hasher& __hf = hasher(),
const key_equal& __eql = key_equal(),
const allocator_type& __a = allocator_type())
: _Base(__f, __l, __n, __hf, __detail::_Mod_range_hashing(),
__detail::_Default_ranged_hash(), __eql,
std::_Identity<_Value>(), __a)
{ }
};
template<class _Value,
class _Hash = hash<_Value>,
class _Pred = std::equal_to<_Value>,
class _Alloc = std::allocator<_Value>,
bool __cache_hash_code = false>
class __unordered_multiset
: public _Hashtable<_Value, _Value, _Alloc,
std::_Identity<_Value>, _Pred,
_Hash, __detail::_Mod_range_hashing,
__detail::_Default_ranged_hash,
__detail::_Prime_rehash_policy,
__cache_hash_code, true, false>
{
typedef _Hashtable<_Value, _Value, _Alloc,
std::_Identity<_Value>, _Pred,
_Hash, __detail::_Mod_range_hashing,
__detail::_Default_ranged_hash,
__detail::_Prime_rehash_policy,
__cache_hash_code, true, false>
_Base;
public:
typedef typename _Base::size_type size_type;
typedef typename _Base::hasher hasher;
typedef typename _Base::key_equal key_equal;
typedef typename _Base::allocator_type allocator_type;
explicit
__unordered_multiset(size_type __n = 10,
const hasher& __hf = hasher(),
const key_equal& __eql = key_equal(),
const allocator_type& __a = allocator_type())
: _Base(__n, __hf, __detail::_Mod_range_hashing(),
__detail::_Default_ranged_hash(), __eql,
std::_Identity<_Value>(), __a)
{ }
template<typename _InputIterator>
__unordered_multiset(_InputIterator __f, _InputIterator __l,
typename _Base::size_type __n = 0,
const hasher& __hf = hasher(),
const key_equal& __eql = key_equal(),
const allocator_type& __a = allocator_type())
: _Base(__f, __l, __n, __hf, __detail::_Mod_range_hashing(),
__detail::_Default_ranged_hash(), __eql,
std::_Identity<_Value>(), __a)
{ }
};
template<class _Value, class _Hash, class _Pred, class _Alloc,
bool __cache_hash_code>
inline void
swap (__unordered_set<_Value, _Hash, _Pred,
_Alloc, __cache_hash_code>& __x,
__unordered_set<_Value, _Hash, _Pred,
_Alloc, __cache_hash_code>& __y)
{ __x.swap(__y); }
template<class _Value, class _Hash, class _Pred, class _Alloc,
bool __cache_hash_code>
inline void
swap(__unordered_multiset<_Value, _Hash, _Pred,
_Alloc, __cache_hash_code>& __x,
__unordered_multiset<_Value, _Hash, _Pred,
_Alloc, __cache_hash_code>& __y)
{ __x.swap(__y); }
template<class _Value,
class _Hash = hash<_Value>,
class _Pred = std::equal_to<_Value>,
class _Alloc = std::allocator<_Value> >
class unordered_set
: public __unordered_set<_Value, _Hash, _Pred, _Alloc>
{
typedef __unordered_set<_Value, _Hash, _Pred, _Alloc> _Base;
public:
typedef typename _Base::size_type size_type;
typedef typename _Base::hasher hasher;
typedef typename _Base::key_equal key_equal;
typedef typename _Base::allocator_type allocator_type;
explicit
unordered_set(size_type __n = 10,
const hasher& __hf = hasher(),
const key_equal& __eql = key_equal(),
const allocator_type& __a = allocator_type())
: _Base(__n, __hf, __eql, __a)
{ }
template<typename _InputIterator>
unordered_set(_InputIterator __f, _InputIterator __l,
size_type __n = 10,
const hasher& __hf = hasher(),
const key_equal& __eql = key_equal(),
const allocator_type& __a = allocator_type())
: _Base(__f, __l, __n, __hf, __eql, __a)
{ }
};
template<class _Value,
class _Hash = hash<_Value>,
class _Pred = std::equal_to<_Value>,
class _Alloc = std::allocator<_Value> >
class unordered_multiset
: public __unordered_multiset<_Value, _Hash, _Pred, _Alloc>
{
typedef __unordered_multiset<_Value, _Hash, _Pred, _Alloc> _Base;
public:
typedef typename _Base::size_type size_type;
typedef typename _Base::hasher hasher;
typedef typename _Base::key_equal key_equal;
typedef typename _Base::allocator_type allocator_type;
explicit
unordered_multiset(size_type __n = 10,
const hasher& __hf = hasher(),
const key_equal& __eql = key_equal(),
const allocator_type& __a = allocator_type())
: _Base(__n, __hf, __eql, __a)
{ }
template<typename _InputIterator>
unordered_multiset(_InputIterator __f, _InputIterator __l,
typename _Base::size_type __n = 0,
const hasher& __hf = hasher(),
const key_equal& __eql = key_equal(),
const allocator_type& __a = allocator_type())
: _Base(__f, __l, __n, __hf, __eql, __a)
{ }
};
_GLIBCXX_END_NAMESPACE
}
#endif // _TR1_UNORDERED_SET
...@@ -31,72 +31,31 @@ ...@@ -31,72 +31,31 @@
* This is a TR1 C++ Library header. * This is a TR1 C++ Library header.
*/ */
#ifndef _TR1_UTILITY #ifndef _GLIBCXX_TR1_UTILITY
#define _TR1_UTILITY 1 #define _GLIBCXX_TR1_UTILITY 1
#include <utility> #pragma GCC system_header
namespace std #if defined(_GLIBCXX_INCLUDE_AS_CXX0X)
{ # error TR1 header cannot be included from C++0x header
_GLIBCXX_BEGIN_NAMESPACE(_GLIBCXX_TR1) #endif
template<class _Tp> class tuple_size;
template<int _Int, class _Tp> class tuple_element;
// Various functions which give std::pair a tuple-like interface.
template<class _Tp1, class _Tp2>
struct tuple_size<std::pair<_Tp1, _Tp2> >
{ static const int value = 2; };
template<class _Tp1, class _Tp2>
const int tuple_size<std::pair<_Tp1, _Tp2> >::value;
template<class _Tp1, class _Tp2>
struct tuple_element<0, std::pair<_Tp1, _Tp2> >
{ typedef _Tp1 type; };
template<class _Tp1, class _Tp2>
struct tuple_element<1, std::pair<_Tp1, _Tp2> >
{ typedef _Tp2 type; };
template<int _Int> struct __pair_get;
template<>
struct __pair_get<0>
{
template<typename _Tp1, typename _Tp2>
static _Tp1& __get(std::pair<_Tp1, _Tp2>& __pair)
{ return __pair.first; }
template<typename _Tp1, typename _Tp2>
static const _Tp1& __const_get(const std::pair<_Tp1, _Tp2>& __pair)
{ return __pair.first; }
};
template<>
struct __pair_get<1>
{
template<typename _Tp1, typename _Tp2>
static _Tp2& __get(std::pair<_Tp1, _Tp2>& __pair)
{ return __pair.second; }
template<typename _Tp1, typename _Tp2>
static const _Tp2& __const_get(const std::pair<_Tp1, _Tp2>& __pair)
{ return __pair.second; }
};
template<int _Int, class _Tp1, class _Tp2>
inline typename tuple_element<_Int, std::pair<_Tp1, _Tp2> >::type&
get(std::pair<_Tp1, _Tp2>& __in)
{ return __pair_get<_Int>::__get(__in); }
template<int _Int, class _Tp1, class _Tp2>
inline const typename tuple_element<_Int, std::pair<_Tp1, _Tp2> >::type&
get(const std::pair<_Tp1, _Tp2>& __in)
{ return __pair_get<_Int>::__const_get(__in); }
_GLIBCXX_END_NAMESPACE
}
#include <bits/c++config.h>
#include <bits/stl_relops.h>
#include <bits/stl_pair.h>
#if defined(_GLIBCXX_INCLUDE_AS_TR1)
# include <tr1_impl/utility>
#else
# define _GLIBCXX_INCLUDE_AS_TR1
# define _GLIBCXX_BEGIN_NAMESPACE_TR1 namespace tr1 {
# define _GLIBCXX_END_NAMESPACE_TR1 }
# define _GLIBCXX_TR1 tr1::
# include <tr1_impl/utility>
# undef _GLIBCXX_TR1
# undef _GLIBCXX_END_NAMESPACE_TR1
# undef _GLIBCXX_BEGIN_NAMESPACE_TR1
# undef _GLIBCXX_INCLUDE_AS_TR1
#endif #endif
#endif // _GLIBCXX_TR1_UTILITY
// TR1 wchar.h -*- C++ -*- // TR1 wchar.h -*- C++ -*-
// Copyright (C) 2006 Free Software Foundation, Inc. // Copyright (C) 2006, 2007 Free Software Foundation, Inc.
// //
// This file is part of the GNU ISO C++ Library. This library is free // 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 // software; you can redistribute it and/or modify it under the
...@@ -31,9 +31,9 @@ ...@@ -31,9 +31,9 @@
* This is a TR1 C++ Library header. * This is a TR1 C++ Library header.
*/ */
#ifndef _TR1_WCHAR_H #ifndef _GLIBCXX_TR1_WCHAR_H
#define _TR1_WCHAR_H 1 #define _GLIBCXX_TR1_WCHAR_H 1
#include <tr1/cwchar> #include <tr1/cwchar>
#endif #endif // _GLIBCXX_TR1_WCHAR_H
// TR1 wctype.h -*- C++ -*- // TR1 wctype.h -*- C++ -*-
// Copyright (C) 2006 Free Software Foundation, Inc. // Copyright (C) 2006, 2007 Free Software Foundation, Inc.
// //
// This file is part of the GNU ISO C++ Library. This library is free // 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 // software; you can redistribute it and/or modify it under the
...@@ -31,9 +31,9 @@ ...@@ -31,9 +31,9 @@
* This is a TR1 C++ Library header. * This is a TR1 C++ Library header.
*/ */
#ifndef _TR1_WCTYPE_H #ifndef _GLIBCXX_TR1_WCTYPE_H
#define _TR1_WCTYPE_H 1 #define _GLIBCXX_TR1_WCTYPE_H 1
#include <tr1/cwctype> #include <tr1/cwctype>
#endif #endif // _GLIBCXX_TR1_WCTYPE_H
// class template array -*- C++ -*-
// Copyright (C) 2007 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
// terms of the GNU General Public License as published by the
// Free Software Foundation; either version 2, or (at your option)
// any later version.
// This library is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
// You should have received a copy of the GNU General Public License along
// with this library; see the file COPYING. If not, write to the Free
// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
// USA.
// As a special exception, you may use this file as part of a free software
// library without restriction. Specifically, if other files instantiate
// templates or use macros or inline functions from this file, or you compile
// this file and link it with other files to produce an executable, this
// file does not by itself cause the resulting executable to be covered by
// the GNU General Public License. This exception does not however
// invalidate any other reasons why the executable file might be covered by
// the GNU General Public License.
/** @file tr1_impl/array
* This is an internal header file, included by other library headers.
* You should not attempt to use it directly.
*/
namespace std
{
_GLIBCXX_BEGIN_NAMESPACE_TR1
/// @brief struct array [6.2.2].
/// NB: Requires complete type _Tp.
template<typename _Tp, std::size_t _Nm>
struct array
{
typedef _Tp value_type;
typedef value_type& reference;
typedef const value_type& const_reference;
typedef value_type* iterator;
typedef const value_type* const_iterator;
typedef std::size_t size_type;
typedef std::ptrdiff_t difference_type;
typedef std::reverse_iterator<iterator> reverse_iterator;
typedef std::reverse_iterator<const_iterator> const_reverse_iterator;
// Support for zero-sized arrays mandatory.
value_type _M_instance[_Nm ? _Nm : 1] __attribute__((__aligned__));
// No explicit construct/copy/destroy for aggregate type.
void
assign(const value_type& __u)
{ std::fill_n(begin(), size(), __u); }
void
swap(array& __other)
{ std::swap_ranges(begin(), end(), __other.begin()); }
// Iterators.
iterator
begin()
{ return iterator(&_M_instance[0]); }
const_iterator
begin() const
{ return const_iterator(&_M_instance[0]); }
iterator
end()
{ return iterator(&_M_instance[_Nm]); }
const_iterator
end() const
{ return const_iterator(&_M_instance[_Nm]); }
reverse_iterator
rbegin()
{ return reverse_iterator(end()); }
const_reverse_iterator
rbegin() const
{ return const_reverse_iterator(end()); }
reverse_iterator
rend()
{ return reverse_iterator(begin()); }
const_reverse_iterator
rend() const
{ return const_reverse_iterator(begin()); }
// Capacity.
size_type
size() const { return _Nm; }
size_type
max_size() const { return _Nm; }
bool
empty() const { return size() == 0; }
// Element access.
reference
operator[](size_type __n)
{ return _M_instance[__n]; }
const_reference
operator[](size_type __n) const
{ return _M_instance[__n]; }
reference
at(size_type __n)
{
_M_check<_Nm>(__n);
return _M_instance[__n];
}
const_reference
at(size_type __n) const
{
_M_check<_Nm>(__n);
return _M_instance[__n];
}
reference
front()
{ return *begin(); }
const_reference
front() const
{ return *begin(); }
reference
back()
{ return _Nm ? *(end() - 1) : *end(); }
const_reference
back() const
{ return _Nm ? *(end() - 1) : *end(); }
_Tp*
data()
{ return &_M_instance[0]; }
const _Tp*
data() const
{ return &_M_instance[0]; }
private:
template<std::size_t _Mm>
typename __gnu_cxx::__enable_if<_Mm, void>::__type
_M_check(size_type __n) const
{
if (__builtin_expect(__n >= _Mm, false))
std::__throw_out_of_range(__N("array::_M_check"));
}
// Avoid "unsigned comparison with zero" warnings.
template<std::size_t _Mm>
typename __gnu_cxx::__enable_if<!_Mm, void>::__type
_M_check(size_type) const
{ std::__throw_out_of_range(__N("array::_M_check")); }
};
// Array comparisons.
template<typename _Tp, std::size_t _Nm>
inline bool
operator==(const array<_Tp, _Nm>& __one, const array<_Tp, _Nm>& __two)
{ return std::equal(__one.begin(), __one.end(), __two.begin()); }
template<typename _Tp, std::size_t _Nm>
inline bool
operator!=(const array<_Tp, _Nm>& __one, const array<_Tp, _Nm>& __two)
{ return !(__one == __two); }
template<typename _Tp, std::size_t _Nm>
inline bool
operator<(const array<_Tp, _Nm>& __a, const array<_Tp, _Nm>& __b)
{
return std::lexicographical_compare(__a.begin(), __a.end(),
__b.begin(), __b.end());
}
template<typename _Tp, std::size_t _Nm>
inline bool
operator>(const array<_Tp, _Nm>& __one, const array<_Tp, _Nm>& __two)
{ return __two < __one; }
template<typename _Tp, std::size_t _Nm>
inline bool
operator<=(const array<_Tp, _Nm>& __one, const array<_Tp, _Nm>& __two)
{ return !(__one > __two); }
template<typename _Tp, std::size_t _Nm>
inline bool
operator>=(const array<_Tp, _Nm>& __one, const array<_Tp, _Nm>& __two)
{ return !(__one < __two); }
// Specialized algorithms [6.2.2.2].
template<typename _Tp, std::size_t _Nm>
inline void
swap(array<_Tp, _Nm>& __one, array<_Tp, _Nm>& __two)
{ std::swap_ranges(__one.begin(), __one.end(), __two.begin()); }
// Tuple interface to class template array [6.2.2.5].
template<typename _Tp> class tuple_size;
template<int _Int, typename _Tp> class tuple_element;
template<typename _Tp, std::size_t _Nm>
struct tuple_size<array<_Tp, _Nm> >
{ static const int value = _Nm; };
template<typename _Tp, std::size_t _Nm>
const int tuple_size<array<_Tp, _Nm> >::value;
template<int _Int, typename _Tp, std::size_t _Nm>
struct tuple_element<_Int, array<_Tp, _Nm> >
{ typedef _Tp type; };
template<int _Int, typename _Tp, std::size_t _Nm>
inline _Tp&
get(array<_Tp, _Nm>& __arr)
{ return __arr[_Int]; }
template<int _Int, typename _Tp, std::size_t _Nm>
inline const _Tp&
get(const array<_Tp, _Nm>& __arr)
{ return __arr[_Int]; }
_GLIBCXX_END_NAMESPACE_TR1
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment