Commit 4d007574 by Paolo Carlini Committed by Paolo Carlini

hashtable.cc: New.

2007-12-03  Paolo Carlini  <pcarlini@suse.de>

	* src/hashtable.cc: New.
	* src/hashtable_c++0x.cc: Likewise.
	* src/Makefile.am: Add.
	* src/Makefile.in: Regenerate.
	* include/tr1_impl/hashtable_policy.h (struct _Primes): Remove.
	(_Prime_rehash_policy::_M_next_bkt, _M_bkt_for_elements,
	_M_need_rehash): Adjust.
	* config/abi/pre/gnu.ver: Update exports.

	* src/hash.cc: Minor tweak.

From-SVN: r130585
parent 78a11797
2007-12-03 Paolo Carlini <pcarlini@suse.de> 2007-12-03 Paolo Carlini <pcarlini@suse.de>
* src/hashtable.cc: New.
* src/hashtable_c++0x.cc: Likewise.
* src/Makefile.am: Add.
* src/Makefile.in: Regenerate.
* include/tr1_impl/hashtable_policy.h (struct _Primes): Remove.
(_Prime_rehash_policy::_M_next_bkt, _M_bkt_for_elements,
_M_need_rehash): Adjust.
* config/abi/pre/gnu.ver: Update exports.
* src/hash.cc: Minor tweak.
2007-12-03 Paolo Carlini <pcarlini@suse.de>
* include/debug/unordered_map (operator==(const unordered_map&, * include/debug/unordered_map (operator==(const unordered_map&,
const unordered_map&), operator!=(const unordered_map&, const unordered_map&), operator!=(const unordered_map&,
const unordered_map&), operator==(const unordered_multimap&, const unordered_map&), operator==(const unordered_multimap&,
......
...@@ -790,6 +790,9 @@ GLIBCXX_3.4.10 { ...@@ -790,6 +790,9 @@ GLIBCXX_3.4.10 {
_ZSt17__verify_grouping*; _ZSt17__verify_grouping*;
_ZNSt8__detail12__prime_listE;
_ZNSt3tr18__detail12__prime_listE;
} GLIBCXX_3.4.9; } GLIBCXX_3.4.9;
# Symbols in the support library (libsupc++) have their own tag. # Symbols in the support library (libsupc++) have their own tag.
......
...@@ -60,99 +60,6 @@ namespace __detail ...@@ -60,99 +60,6 @@ namespace __detail
return __distance_fw(__first, __last, _Tag()); return __distance_fw(__first, __last, _Tag());
} }
// XXX This is a hack. _Prime_rehash_policy's member functions, and
// certainly the list of primes, should be defined in a .cc file.
// We're temporarily putting them in a header because we don't have a
// place to put TR1 .cc files yet. There's no good reason for any of
// _Prime_rehash_policy's member functions to be inline, and there's
// certainly no good reason for _Primes<> to exist at all.
template<int __ulongsize = sizeof(unsigned long)>
struct _Primes
{
static const int __n_primes = __ulongsize != 8 ? 256 : 256 + 48;
static const unsigned long __primes[256 + 48 + 1];
};
template<int __ulongsize>
const int _Primes<__ulongsize>::__n_primes;
template<int __ulongsize>
const unsigned long _Primes<__ulongsize>::__primes[256 + 48 + 1] =
{
2ul, 3ul, 5ul, 7ul, 11ul, 13ul, 17ul, 19ul, 23ul, 29ul, 31ul,
37ul, 41ul, 43ul, 47ul, 53ul, 59ul, 61ul, 67ul, 71ul, 73ul, 79ul,
83ul, 89ul, 97ul, 103ul, 109ul, 113ul, 127ul, 137ul, 139ul, 149ul,
157ul, 167ul, 179ul, 193ul, 199ul, 211ul, 227ul, 241ul, 257ul,
277ul, 293ul, 313ul, 337ul, 359ul, 383ul, 409ul, 439ul, 467ul,
503ul, 541ul, 577ul, 619ul, 661ul, 709ul, 761ul, 823ul, 887ul,
953ul, 1031ul, 1109ul, 1193ul, 1289ul, 1381ul, 1493ul, 1613ul,
1741ul, 1879ul, 2029ul, 2179ul, 2357ul, 2549ul, 2753ul, 2971ul,
3209ul, 3469ul, 3739ul, 4027ul, 4349ul, 4703ul, 5087ul, 5503ul,
5953ul, 6427ul, 6949ul, 7517ul, 8123ul, 8783ul, 9497ul, 10273ul,
11113ul, 12011ul, 12983ul, 14033ul, 15173ul, 16411ul, 17749ul,
19183ul, 20753ul, 22447ul, 24281ul, 26267ul, 28411ul, 30727ul,
33223ul, 35933ul, 38873ul, 42043ul, 45481ul, 49201ul, 53201ul,
57557ul, 62233ul, 67307ul, 72817ul, 78779ul, 85229ul, 92203ul,
99733ul, 107897ul, 116731ul, 126271ul, 136607ul, 147793ul,
159871ul, 172933ul, 187091ul, 202409ul, 218971ul, 236897ul,
256279ul, 277261ul, 299951ul, 324503ul, 351061ul, 379787ul,
410857ul, 444487ul, 480881ul, 520241ul, 562841ul, 608903ul,
658753ul, 712697ul, 771049ul, 834181ul, 902483ul, 976369ul,
1056323ul, 1142821ul, 1236397ul, 1337629ul, 1447153ul, 1565659ul,
1693859ul, 1832561ul, 1982627ul, 2144977ul, 2320627ul, 2510653ul,
2716249ul, 2938679ul, 3179303ul, 3439651ul, 3721303ul, 4026031ul,
4355707ul, 4712381ul, 5098259ul, 5515729ul, 5967347ul, 6456007ul,
6984629ul, 7556579ul, 8175383ul, 8844859ul, 9569143ul, 10352717ul,
11200489ul, 12117689ul, 13109983ul, 14183539ul, 15345007ul,
16601593ul, 17961079ul, 19431899ul, 21023161ul, 22744717ul,
24607243ul, 26622317ul, 28802401ul, 31160981ul, 33712729ul,
36473443ul, 39460231ul, 42691603ul, 46187573ul, 49969847ul,
54061849ul, 58488943ul, 63278561ul, 68460391ul, 74066549ul,
80131819ul, 86693767ul, 93793069ul, 101473717ul, 109783337ul,
118773397ul, 128499677ul, 139022417ul, 150406843ul, 162723577ul,
176048909ul, 190465427ul, 206062531ul, 222936881ul, 241193053ul,
260944219ul, 282312799ul, 305431229ul, 330442829ul, 357502601ul,
386778277ul, 418451333ul, 452718089ul, 489790921ul, 529899637ul,
573292817ul, 620239453ul, 671030513ul, 725980837ul, 785430967ul,
849749479ul, 919334987ul, 994618837ul, 1076067617ul, 1164186217ul,
1259520799ul, 1362662261ul, 1474249943ul, 1594975441ul,
1725587117ul, 1866894511ul, 2019773507ul, 2185171673ul,
2364114217ul, 2557710269ul, 2767159799ul, 2993761039ul,
3238918481ul, 3504151727ul, 3791104843ul, 4101556399ul,
4294967291ul,
// Sentinel, so we don't have to test the result of lower_bound,
// or, on 64-bit machines, rest of the table.
__ulongsize != 8 ? 4294967291ul : (unsigned long)6442450933ull,
(unsigned long)8589934583ull,
(unsigned long)12884901857ull, (unsigned long)17179869143ull,
(unsigned long)25769803693ull, (unsigned long)34359738337ull,
(unsigned long)51539607367ull, (unsigned long)68719476731ull,
(unsigned long)103079215087ull, (unsigned long)137438953447ull,
(unsigned long)206158430123ull, (unsigned long)274877906899ull,
(unsigned long)412316860387ull, (unsigned long)549755813881ull,
(unsigned long)824633720731ull, (unsigned long)1099511627689ull,
(unsigned long)1649267441579ull, (unsigned long)2199023255531ull,
(unsigned long)3298534883309ull, (unsigned long)4398046511093ull,
(unsigned long)6597069766607ull, (unsigned long)8796093022151ull,
(unsigned long)13194139533241ull, (unsigned long)17592186044399ull,
(unsigned long)26388279066581ull, (unsigned long)35184372088777ull,
(unsigned long)52776558133177ull, (unsigned long)70368744177643ull,
(unsigned long)105553116266399ull, (unsigned long)140737488355213ull,
(unsigned long)211106232532861ull, (unsigned long)281474976710597ull,
(unsigned long)562949953421231ull, (unsigned long)1125899906842597ull,
(unsigned long)2251799813685119ull, (unsigned long)4503599627370449ull,
(unsigned long)9007199254740881ull, (unsigned long)18014398509481951ull,
(unsigned long)36028797018963913ull, (unsigned long)72057594037927931ull,
(unsigned long)144115188075855859ull,
(unsigned long)288230376151711717ull,
(unsigned long)576460752303423433ull,
(unsigned long)1152921504606846883ull,
(unsigned long)2305843009213693951ull,
(unsigned long)4611686018427387847ull,
(unsigned long)9223372036854775783ull,
(unsigned long)18446744073709551557ull,
(unsigned long)18446744073709551557ull
};
// Auxiliary types used for all instantiations of _Hashtable: nodes // Auxiliary types used for all instantiations of _Hashtable: nodes
// and iterators. // and iterators.
...@@ -476,10 +383,12 @@ namespace __detail ...@@ -476,10 +383,12 @@ namespace __detail
// smallest prime that keeps the load factor small enough. // smallest prime that keeps the load factor small enough.
struct _Prime_rehash_policy struct _Prime_rehash_policy
{ {
_Prime_rehash_policy(float __z = 1.0); _Prime_rehash_policy(float __z = 1.0)
: _M_max_load_factor(__z), _M_growth_factor(2.f), _M_next_resize(0) { }
float float
max_load_factor() const; max_load_factor() const
{ return _M_max_load_factor; }
// Return a bucket size no smaller than n. // Return a bucket size no smaller than n.
std::size_t std::size_t
...@@ -502,26 +411,19 @@ namespace __detail ...@@ -502,26 +411,19 @@ namespace __detail
mutable std::size_t _M_next_resize; mutable std::size_t _M_next_resize;
}; };
inline extern const unsigned long __prime_list[];
_Prime_rehash_policy::
_Prime_rehash_policy(float __z)
: _M_max_load_factor(__z), _M_growth_factor(2.f), _M_next_resize(0)
{ }
inline float // XXX This is a hack. There's no good reason for any of
_Prime_rehash_policy:: // _Prime_rehash_policy's member functions to be inline.
max_load_factor() const
{ return _M_max_load_factor; }
// Return a prime no smaller than n. // Return a prime no smaller than n.
inline std::size_t inline std::size_t
_Prime_rehash_policy:: _Prime_rehash_policy::
_M_next_bkt(std::size_t __n) const _M_next_bkt(std::size_t __n) const
{ {
const unsigned long* const __last = (_Primes<>::__primes const int __n_primes = sizeof(unsigned long) != 8 ? 256 : 256 + 48;
+ _Primes<>::__n_primes); const unsigned long* __p = std::lower_bound(__prime_list, __prime_list
const unsigned long* __p = std::lower_bound(_Primes<>::__primes, __last, + __n_primes, __n);
__n);
_M_next_resize = static_cast<std::size_t>(std::ceil(*__p _M_next_resize = static_cast<std::size_t>(std::ceil(*__p
* _M_max_load_factor)); * _M_max_load_factor));
return *__p; return *__p;
...@@ -533,11 +435,10 @@ namespace __detail ...@@ -533,11 +435,10 @@ namespace __detail
_Prime_rehash_policy:: _Prime_rehash_policy::
_M_bkt_for_elements(std::size_t __n) const _M_bkt_for_elements(std::size_t __n) const
{ {
const unsigned long* const __last = (_Primes<>::__primes const int __n_primes = sizeof(unsigned long) != 8 ? 256 : 256 + 48;
+ _Primes<>::__n_primes);
const float __min_bkts = __n / _M_max_load_factor; const float __min_bkts = __n / _M_max_load_factor;
const unsigned long* __p = std::lower_bound(_Primes<>::__primes, __last, const unsigned long* __p = std::lower_bound(__prime_list, __prime_list
__min_bkts); + __n_primes, __min_bkts);
_M_next_resize = static_cast<std::size_t>(std::ceil(*__p _M_next_resize = static_cast<std::size_t>(std::ceil(*__p
* _M_max_load_factor)); * _M_max_load_factor));
return *__p; return *__p;
...@@ -564,10 +465,10 @@ namespace __detail ...@@ -564,10 +465,10 @@ namespace __detail
if (__min_bkts > __n_bkt) if (__min_bkts > __n_bkt)
{ {
__min_bkts = std::max(__min_bkts, _M_growth_factor * __n_bkt); __min_bkts = std::max(__min_bkts, _M_growth_factor * __n_bkt);
const unsigned long* const __last = (_Primes<>::__primes const int __n_primes = sizeof(unsigned long) != 8 ? 256 : 256 + 48;
+ _Primes<>::__n_primes); const unsigned long* __p =
const unsigned long* __p = std::lower_bound(_Primes<>::__primes, std::lower_bound(__prime_list, __prime_list + __n_primes,
__last, __min_bkts); __min_bkts);
_M_next_resize = _M_next_resize =
static_cast<std::size_t>(std::ceil(*__p * _M_max_load_factor)); static_cast<std::size_t>(std::ceil(*__p * _M_max_load_factor));
return std::make_pair(true, *__p); return std::make_pair(true, *__p);
......
...@@ -146,6 +146,8 @@ sources = \ ...@@ -146,6 +146,8 @@ sources = \
hash.cc \ hash.cc \
hash_c++0x.cc \ hash_c++0x.cc \
globals_io.cc \ globals_io.cc \
hashtable.cc \
hashtable_c++0x.cc \
ios.cc \ ios.cc \
ios_failure.cc \ ios_failure.cc \
ios_init.cc \ ios_init.cc \
...@@ -229,6 +231,11 @@ hash_c++0x.lo: hash_c++0x.cc ...@@ -229,6 +231,11 @@ hash_c++0x.lo: hash_c++0x.cc
hash_c++0x.o: hash_c++0x.cc hash_c++0x.o: hash_c++0x.cc
$(CXXCOMPILE) -std=gnu++0x -c $< $(CXXCOMPILE) -std=gnu++0x -c $<
hashtable_c++0x.lo: hashtable_c++0x.cc
$(LTCXXCOMPILE) -std=gnu++0x -c $<
hashtable_c++0x.o: hashtable_c++0x.cc
$(CXXCOMPILE) -std=gnu++0x -c $<
if GLIBCXX_LDBL_COMPAT if GLIBCXX_LDBL_COMPAT
# Use special rules for compatibility-ldbl.cc compilation, as we need to # Use special rules for compatibility-ldbl.cc compilation, as we need to
# pass -mlong-double-64. # pass -mlong-double-64.
......
...@@ -71,19 +71,19 @@ LTLIBRARIES = $(toolexeclib_LTLIBRARIES) ...@@ -71,19 +71,19 @@ LTLIBRARIES = $(toolexeclib_LTLIBRARIES)
am__libstdc___la_SOURCES_DIST = bitmap_allocator.cc pool_allocator.cc \ am__libstdc___la_SOURCES_DIST = bitmap_allocator.cc pool_allocator.cc \
mt_allocator.cc codecvt.cc compatibility.cc complex_io.cc \ mt_allocator.cc codecvt.cc compatibility.cc complex_io.cc \
ctype.cc debug.cc functexcept.cc hash.cc hash_c++0x.cc \ ctype.cc debug.cc functexcept.cc hash.cc hash_c++0x.cc \
globals_io.cc ios.cc ios_failure.cc ios_init.cc ios_locale.cc \ globals_io.cc hashtable.cc hashtable_c++0x.cc ios.cc \
limits.cc list.cc debug_list.cc locale.cc locale_init.cc \ ios_failure.cc ios_init.cc ios_locale.cc limits.cc list.cc \
locale_facets.cc localename.cc stdexcept.cc strstream.cc \ debug_list.cc locale.cc locale_init.cc locale_facets.cc \
system_error.cc tree.cc allocator-inst.cc concept-inst.cc \ localename.cc stdexcept.cc strstream.cc system_error.cc \
fstream-inst.cc ext-inst.cc ios-inst.cc iostream-inst.cc \ tree.cc allocator-inst.cc concept-inst.cc fstream-inst.cc \
istream-inst.cc istream.cc locale-inst.cc misc-inst.cc \ ext-inst.cc ios-inst.cc iostream-inst.cc istream-inst.cc \
ostream-inst.cc sstream-inst.cc streambuf-inst.cc streambuf.cc \ istream.cc locale-inst.cc misc-inst.cc ostream-inst.cc \
string-inst.cc valarray-inst.cc wlocale-inst.cc \ sstream-inst.cc streambuf-inst.cc streambuf.cc string-inst.cc \
wstring-inst.cc atomicity.cc codecvt_members.cc \ valarray-inst.cc wlocale-inst.cc wstring-inst.cc atomicity.cc \
collate_members.cc ctype_members.cc messages_members.cc \ codecvt_members.cc collate_members.cc ctype_members.cc \
monetary_members.cc numeric_members.cc time_members.cc \ messages_members.cc monetary_members.cc numeric_members.cc \
basic_file.cc c++locale.cc compatibility-ldbl.cc \ time_members.cc basic_file.cc c++locale.cc \
parallel_list.cc compatibility-ldbl.cc parallel_list.cc
am__objects_1 = atomicity.lo codecvt_members.lo collate_members.lo \ am__objects_1 = atomicity.lo codecvt_members.lo collate_members.lo \
ctype_members.lo messages_members.lo monetary_members.lo \ ctype_members.lo messages_members.lo monetary_members.lo \
numeric_members.lo time_members.lo numeric_members.lo time_members.lo
...@@ -93,16 +93,17 @@ am__objects_4 = basic_file.lo c++locale.lo $(am__objects_2) \ ...@@ -93,16 +93,17 @@ am__objects_4 = basic_file.lo c++locale.lo $(am__objects_2) \
$(am__objects_3) $(am__objects_3)
am__objects_5 = bitmap_allocator.lo pool_allocator.lo mt_allocator.lo \ am__objects_5 = bitmap_allocator.lo pool_allocator.lo mt_allocator.lo \
codecvt.lo compatibility.lo complex_io.lo ctype.lo debug.lo \ codecvt.lo compatibility.lo complex_io.lo ctype.lo debug.lo \
functexcept.lo hash.lo hash_c++0x.lo globals_io.lo ios.lo \ functexcept.lo hash.lo hash_c++0x.lo globals_io.lo \
ios_failure.lo ios_init.lo ios_locale.lo limits.lo list.lo \ hashtable.lo hashtable_c++0x.lo ios.lo ios_failure.lo \
debug_list.lo locale.lo locale_init.lo locale_facets.lo \ ios_init.lo ios_locale.lo limits.lo list.lo debug_list.lo \
localename.lo stdexcept.lo strstream.lo system_error.lo \ locale.lo locale_init.lo locale_facets.lo localename.lo \
tree.lo allocator-inst.lo concept-inst.lo fstream-inst.lo \ stdexcept.lo strstream.lo system_error.lo tree.lo \
ext-inst.lo ios-inst.lo iostream-inst.lo istream-inst.lo \ allocator-inst.lo concept-inst.lo fstream-inst.lo ext-inst.lo \
istream.lo locale-inst.lo misc-inst.lo ostream-inst.lo \ ios-inst.lo iostream-inst.lo istream-inst.lo istream.lo \
sstream-inst.lo streambuf-inst.lo streambuf.lo string-inst.lo \ locale-inst.lo misc-inst.lo ostream-inst.lo sstream-inst.lo \
valarray-inst.lo wlocale-inst.lo wstring-inst.lo \ streambuf-inst.lo streambuf.lo string-inst.lo valarray-inst.lo \
$(am__objects_1) $(am__objects_4) wlocale-inst.lo wstring-inst.lo $(am__objects_1) \
$(am__objects_4)
am_libstdc___la_OBJECTS = $(am__objects_5) am_libstdc___la_OBJECTS = $(am__objects_5)
libstdc___la_OBJECTS = $(am_libstdc___la_OBJECTS) libstdc___la_OBJECTS = $(am_libstdc___la_OBJECTS)
DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir) DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir)
...@@ -242,9 +243,13 @@ USE_NLS = @USE_NLS@ ...@@ -242,9 +243,13 @@ USE_NLS = @USE_NLS@
VERSION = @VERSION@ VERSION = @VERSION@
WARN_FLAGS = @WARN_FLAGS@ WARN_FLAGS = @WARN_FLAGS@
WERROR = @WERROR@ WERROR = @WERROR@
ac_ct_AR = @ac_ct_AR@
ac_ct_AS = @ac_ct_AS@
ac_ct_CC = @ac_ct_CC@ ac_ct_CC = @ac_ct_CC@
ac_ct_CXX = @ac_ct_CXX@ ac_ct_CXX = @ac_ct_CXX@
ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
ac_ct_RANLIB = @ac_ct_RANLIB@
ac_ct_STRIP = @ac_ct_STRIP@
am__leading_dot = @am__leading_dot@ am__leading_dot = @am__leading_dot@
am__tar = @am__tar@ am__tar = @am__tar@
am__untar = @am__untar@ am__untar = @am__untar@
...@@ -257,9 +262,6 @@ build_os = @build_os@ ...@@ -257,9 +262,6 @@ build_os = @build_os@
build_vendor = @build_vendor@ build_vendor = @build_vendor@
check_msgfmt = @check_msgfmt@ check_msgfmt = @check_msgfmt@
datadir = @datadir@ datadir = @datadir@
datarootdir = @datarootdir@
docdir = @docdir@
dvidir = @dvidir@
enable_shared = @enable_shared@ enable_shared = @enable_shared@
enable_static = @enable_static@ enable_static = @enable_static@
exec_prefix = @exec_prefix@ exec_prefix = @exec_prefix@
...@@ -279,25 +281,21 @@ host_alias = @host_alias@ ...@@ -279,25 +281,21 @@ host_alias = @host_alias@
host_cpu = @host_cpu@ host_cpu = @host_cpu@
host_os = @host_os@ host_os = @host_os@
host_vendor = @host_vendor@ host_vendor = @host_vendor@
htmldir = @htmldir@
includedir = @includedir@ includedir = @includedir@
infodir = @infodir@ infodir = @infodir@
install_sh = @install_sh@ install_sh = @install_sh@
libdir = @libdir@ libdir = @libdir@
libexecdir = @libexecdir@ libexecdir = @libexecdir@
libtool_VERSION = @libtool_VERSION@ libtool_VERSION = @libtool_VERSION@
localedir = @localedir@
localstatedir = @localstatedir@ localstatedir = @localstatedir@
lt_ECHO = @lt_ECHO@ lt_ECHO = @lt_ECHO@
mandir = @mandir@ mandir = @mandir@
mkdir_p = @mkdir_p@ mkdir_p = @mkdir_p@
multi_basedir = @multi_basedir@ multi_basedir = @multi_basedir@
oldincludedir = @oldincludedir@ oldincludedir = @oldincludedir@
pdfdir = @pdfdir@
port_specific_symbol_files = @port_specific_symbol_files@ port_specific_symbol_files = @port_specific_symbol_files@
prefix = @prefix@ prefix = @prefix@
program_transform_name = @program_transform_name@ program_transform_name = @program_transform_name@
psdir = @psdir@
sbindir = @sbindir@ sbindir = @sbindir@
sharedstatedir = @sharedstatedir@ sharedstatedir = @sharedstatedir@
sysconfdir = @sysconfdir@ sysconfdir = @sysconfdir@
...@@ -378,6 +376,8 @@ sources = \ ...@@ -378,6 +376,8 @@ sources = \
hash.cc \ hash.cc \
hash_c++0x.cc \ hash_c++0x.cc \
globals_io.cc \ globals_io.cc \
hashtable.cc \
hashtable_c++0x.cc \
ios.cc \ ios.cc \
ios_failure.cc \ ios_failure.cc \
ios_init.cc \ ios_init.cc \
...@@ -819,6 +819,11 @@ hash_c++0x.lo: hash_c++0x.cc ...@@ -819,6 +819,11 @@ hash_c++0x.lo: hash_c++0x.cc
hash_c++0x.o: hash_c++0x.cc hash_c++0x.o: hash_c++0x.cc
$(CXXCOMPILE) -std=gnu++0x -c $< $(CXXCOMPILE) -std=gnu++0x -c $<
hashtable_c++0x.lo: hashtable_c++0x.cc
$(LTCXXCOMPILE) -std=gnu++0x -c $<
hashtable_c++0x.o: hashtable_c++0x.cc
$(CXXCOMPILE) -std=gnu++0x -c $<
# Use special rules for compatibility-ldbl.cc compilation, as we need to # Use special rules for compatibility-ldbl.cc compilation, as we need to
# pass -mlong-double-64. # pass -mlong-double-64.
@GLIBCXX_LDBL_COMPAT_TRUE@compatibility-ldbl.lo: compatibility-ldbl.cc @GLIBCXX_LDBL_COMPAT_TRUE@compatibility-ldbl.lo: compatibility-ldbl.cc
......
...@@ -37,7 +37,6 @@ ...@@ -37,7 +37,6 @@
# define _GLIBCXX_END_NAMESPACE_TR1 # define _GLIBCXX_END_NAMESPACE_TR1
#else #else
#include <tr1/functional> #include <tr1/functional>
# define _GLIBCXX_INCLUDE_AS_TR1
# define _GLIBCXX_BEGIN_NAMESPACE_TR1 namespace tr1 { # define _GLIBCXX_BEGIN_NAMESPACE_TR1 namespace tr1 {
# define _GLIBCXX_END_NAMESPACE_TR1 } # define _GLIBCXX_END_NAMESPACE_TR1 }
#endif #endif
......
// std::__detail and std::tr1::__detail definitions -*- 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.
#ifdef __GXX_EXPERIMENTAL_CXX0X__
# define _GLIBCXX_BEGIN_NAMESPACE_TR1
# define _GLIBCXX_END_NAMESPACE_TR1
#else
# define _GLIBCXX_BEGIN_NAMESPACE_TR1 namespace tr1 {
# define _GLIBCXX_END_NAMESPACE_TR1 }
#endif
namespace std
{
_GLIBCXX_BEGIN_NAMESPACE_TR1
namespace __detail
{
extern const unsigned long __prime_list[256 + 48 + 1] =
{
2ul, 3ul, 5ul, 7ul, 11ul, 13ul, 17ul, 19ul, 23ul, 29ul, 31ul,
37ul, 41ul, 43ul, 47ul, 53ul, 59ul, 61ul, 67ul, 71ul, 73ul, 79ul,
83ul, 89ul, 97ul, 103ul, 109ul, 113ul, 127ul, 137ul, 139ul, 149ul,
157ul, 167ul, 179ul, 193ul, 199ul, 211ul, 227ul, 241ul, 257ul,
277ul, 293ul, 313ul, 337ul, 359ul, 383ul, 409ul, 439ul, 467ul,
503ul, 541ul, 577ul, 619ul, 661ul, 709ul, 761ul, 823ul, 887ul,
953ul, 1031ul, 1109ul, 1193ul, 1289ul, 1381ul, 1493ul, 1613ul,
1741ul, 1879ul, 2029ul, 2179ul, 2357ul, 2549ul, 2753ul, 2971ul,
3209ul, 3469ul, 3739ul, 4027ul, 4349ul, 4703ul, 5087ul, 5503ul,
5953ul, 6427ul, 6949ul, 7517ul, 8123ul, 8783ul, 9497ul, 10273ul,
11113ul, 12011ul, 12983ul, 14033ul, 15173ul, 16411ul, 17749ul,
19183ul, 20753ul, 22447ul, 24281ul, 26267ul, 28411ul, 30727ul,
33223ul, 35933ul, 38873ul, 42043ul, 45481ul, 49201ul, 53201ul,
57557ul, 62233ul, 67307ul, 72817ul, 78779ul, 85229ul, 92203ul,
99733ul, 107897ul, 116731ul, 126271ul, 136607ul, 147793ul,
159871ul, 172933ul, 187091ul, 202409ul, 218971ul, 236897ul,
256279ul, 277261ul, 299951ul, 324503ul, 351061ul, 379787ul,
410857ul, 444487ul, 480881ul, 520241ul, 562841ul, 608903ul,
658753ul, 712697ul, 771049ul, 834181ul, 902483ul, 976369ul,
1056323ul, 1142821ul, 1236397ul, 1337629ul, 1447153ul, 1565659ul,
1693859ul, 1832561ul, 1982627ul, 2144977ul, 2320627ul, 2510653ul,
2716249ul, 2938679ul, 3179303ul, 3439651ul, 3721303ul, 4026031ul,
4355707ul, 4712381ul, 5098259ul, 5515729ul, 5967347ul, 6456007ul,
6984629ul, 7556579ul, 8175383ul, 8844859ul, 9569143ul, 10352717ul,
11200489ul, 12117689ul, 13109983ul, 14183539ul, 15345007ul,
16601593ul, 17961079ul, 19431899ul, 21023161ul, 22744717ul,
24607243ul, 26622317ul, 28802401ul, 31160981ul, 33712729ul,
36473443ul, 39460231ul, 42691603ul, 46187573ul, 49969847ul,
54061849ul, 58488943ul, 63278561ul, 68460391ul, 74066549ul,
80131819ul, 86693767ul, 93793069ul, 101473717ul, 109783337ul,
118773397ul, 128499677ul, 139022417ul, 150406843ul, 162723577ul,
176048909ul, 190465427ul, 206062531ul, 222936881ul, 241193053ul,
260944219ul, 282312799ul, 305431229ul, 330442829ul, 357502601ul,
386778277ul, 418451333ul, 452718089ul, 489790921ul, 529899637ul,
573292817ul, 620239453ul, 671030513ul, 725980837ul, 785430967ul,
849749479ul, 919334987ul, 994618837ul, 1076067617ul, 1164186217ul,
1259520799ul, 1362662261ul, 1474249943ul, 1594975441ul,
1725587117ul, 1866894511ul, 2019773507ul, 2185171673ul,
2364114217ul, 2557710269ul, 2767159799ul, 2993761039ul,
3238918481ul, 3504151727ul, 3791104843ul, 4101556399ul,
4294967291ul,
// Sentinel, so we don't have to test the result of lower_bound,
// or, on 64-bit machines, rest of the table.
sizeof(unsigned long) != 8 ? 4294967291ul : (unsigned long)6442450933ull,
(unsigned long)8589934583ull,
(unsigned long)12884901857ull, (unsigned long)17179869143ull,
(unsigned long)25769803693ull, (unsigned long)34359738337ull,
(unsigned long)51539607367ull, (unsigned long)68719476731ull,
(unsigned long)103079215087ull, (unsigned long)137438953447ull,
(unsigned long)206158430123ull, (unsigned long)274877906899ull,
(unsigned long)412316860387ull, (unsigned long)549755813881ull,
(unsigned long)824633720731ull, (unsigned long)1099511627689ull,
(unsigned long)1649267441579ull, (unsigned long)2199023255531ull,
(unsigned long)3298534883309ull, (unsigned long)4398046511093ull,
(unsigned long)6597069766607ull, (unsigned long)8796093022151ull,
(unsigned long)13194139533241ull, (unsigned long)17592186044399ull,
(unsigned long)26388279066581ull, (unsigned long)35184372088777ull,
(unsigned long)52776558133177ull, (unsigned long)70368744177643ull,
(unsigned long)105553116266399ull, (unsigned long)140737488355213ull,
(unsigned long)211106232532861ull, (unsigned long)281474976710597ull,
(unsigned long)562949953421231ull, (unsigned long)1125899906842597ull,
(unsigned long)2251799813685119ull, (unsigned long)4503599627370449ull,
(unsigned long)9007199254740881ull, (unsigned long)18014398509481951ull,
(unsigned long)36028797018963913ull, (unsigned long)72057594037927931ull,
(unsigned long)144115188075855859ull,
(unsigned long)288230376151711717ull,
(unsigned long)576460752303423433ull,
(unsigned long)1152921504606846883ull,
(unsigned long)2305843009213693951ull,
(unsigned long)4611686018427387847ull,
(unsigned long)9223372036854775783ull,
(unsigned long)18446744073709551557ull,
(unsigned long)18446744073709551557ull
};
} // namespace __detail
_GLIBCXX_END_NAMESPACE_TR1
}
// std::__detail definitions -*- 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.
#include "hashtable.cc"
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