hashtable_policy.h: Uglify all the names.

2006-09-19  Paolo Carlini  <pcarlini@suse.de>

	* include/tr1/hashtable_policy.h: Uglify all the names.
	* include/tr1/hashtable: Likewise.
	* include/tr1/unordered_map: Likewise.
	* include/tr1/unordered_set: Likewise.
	* include/tr1/functional: Uglify struct hash names.
	* include/tr1/cmath: Uglify namespace detail to __detail.

From-SVN: r117052
This commit is contained in:
Paolo Carlini 2006-09-19 09:07:56 +00:00 committed by Paolo Carlini
parent b538773352
commit 95cefe5f0e
7 changed files with 1391 additions and 1240 deletions

View file

@ -1,3 +1,12 @@
2006-09-19 Paolo Carlini <pcarlini@suse.de>
* include/tr1/hashtable_policy.h: Uglify all the names.
* include/tr1/hashtable: Likewise.
* include/tr1/unordered_map: Likewise.
* include/tr1/unordered_set: Likewise.
* include/tr1/functional: Uglify struct hash names.
* include/tr1/cmath: Uglify namespace detail to __detail.
2006-09-18 Benjamin Kosnik <bkoz@redhat.com>
* testsuite/util/regression/res_mng: Remove.

View file

@ -368,21 +368,23 @@ _GLIBCXX_BEGIN_NAMESPACE(tr1)
using std::atan;
// Workaround for c++/21682.
namespace detail
namespace __detail
{
template<typename _Tp, typename _Up>
inline typename __gnu_cxx::__enable_if<std::__is_floating<_Tp>::__value
|| std::__is_floating<_Up>::__value,
typename std::tr1::__promote_2<_Tp, _Up>::__type>::__type
atan2(_Tp __y, _Up __x)
{
typedef typename std::tr1::__promote_2<_Tp, _Up>::__type __type;
return std::atan2(__type(__y), __type(__x));
}
} // namespace detail
inline typename
__gnu_cxx::__enable_if<std::__is_floating<_Tp>::__value
|| std::__is_floating<_Up>::__value,
typename
std::tr1::__promote_2<_Tp, _Up>::__type>::__type
atan2(_Tp __y, _Up __x)
{
typedef typename std::tr1::__promote_2<_Tp, _Up>::__type __type;
return std::atan2(__type(__y), __type(__x));
}
} // namespace __detail
using std::atan2;
using detail::atan2;
using __detail::atan2;
inline float
atanh(float __x)

View file

@ -1,6 +1,6 @@
// TR1 functional header -*- C++ -*-
// Copyright (C) 2004, 2005 Free Software Foundation, Inc.
// Copyright (C) 2004, 2005, 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
@ -106,7 +106,7 @@ _GLIBCXX_BEGIN_NAMESPACE(tr1)
*/
template<typename _Functor>
struct _Weak_result_type_impl
: _Maybe_get_result_type<_Has_result_type<_Functor>::value, _Functor>
: _Maybe_get_result_type<_Has_result_type<_Functor>::value, _Functor>
{
};
@ -214,33 +214,33 @@ _GLIBCXX_BEGIN_NAMESPACE(tr1)
// Not a unary_function or binary_function, so try a weak result type
template<typename _Tp>
struct _Reference_wrapper_base_impl<false, false, _Tp>
: _Weak_result_type<_Tp>
: _Weak_result_type<_Tp>
{ };
// unary_function but not binary_function
template<typename _Tp>
struct _Reference_wrapper_base_impl<true, false, _Tp>
: unary_function<typename _Tp::argument_type,
typename _Tp::result_type>
: unary_function<typename _Tp::argument_type,
typename _Tp::result_type>
{ };
// binary_function but not unary_function
template<typename _Tp>
struct _Reference_wrapper_base_impl<false, true, _Tp>
: binary_function<typename _Tp::first_argument_type,
typename _Tp::second_argument_type,
typename _Tp::result_type>
: binary_function<typename _Tp::first_argument_type,
typename _Tp::second_argument_type,
typename _Tp::result_type>
{ };
// both unary_function and binary_function. import result_type to
// avoid conflicts.
template<typename _Tp>
struct _Reference_wrapper_base_impl<true, true, _Tp>
: unary_function<typename _Tp::argument_type,
typename _Tp::result_type>,
binary_function<typename _Tp::first_argument_type,
typename _Tp::second_argument_type,
typename _Tp::result_type>
: unary_function<typename _Tp::argument_type,
typename _Tp::result_type>,
binary_function<typename _Tp::first_argument_type,
typename _Tp::second_argument_type,
typename _Tp::result_type>
{
typedef typename _Tp::result_type result_type;
};
@ -255,82 +255,82 @@ _GLIBCXX_BEGIN_NAMESPACE(tr1)
*/
template<typename _Tp>
struct _Reference_wrapper_base
: _Reference_wrapper_base_impl<
_Derives_from_unary_function<_Tp>::value,
_Derives_from_binary_function<_Tp>::value,
_Tp>
: _Reference_wrapper_base_impl<
_Derives_from_unary_function<_Tp>::value,
_Derives_from_binary_function<_Tp>::value,
_Tp>
{ };
// - a function type (unary)
template<typename _Res, typename _T1>
struct _Reference_wrapper_base<_Res(_T1)>
: unary_function<_T1, _Res>
: unary_function<_T1, _Res>
{ };
// - a function type (binary)
template<typename _Res, typename _T1, typename _T2>
struct _Reference_wrapper_base<_Res(_T1, _T2)>
: binary_function<_T1, _T2, _Res>
: binary_function<_T1, _T2, _Res>
{ };
// - a function pointer type (unary)
template<typename _Res, typename _T1>
struct _Reference_wrapper_base<_Res(*)(_T1)>
: unary_function<_T1, _Res>
: unary_function<_T1, _Res>
{ };
// - a function pointer type (binary)
template<typename _Res, typename _T1, typename _T2>
struct _Reference_wrapper_base<_Res(*)(_T1, _T2)>
: binary_function<_T1, _T2, _Res>
: binary_function<_T1, _T2, _Res>
{ };
// - a pointer to member function type (unary, no qualifiers)
template<typename _Res, typename _T1>
struct _Reference_wrapper_base<_Res (_T1::*)()>
: unary_function<_T1*, _Res>
: unary_function<_T1*, _Res>
{ };
// - a pointer to member function type (binary, no qualifiers)
template<typename _Res, typename _T1, typename _T2>
struct _Reference_wrapper_base<_Res (_T1::*)(_T2)>
: binary_function<_T1*, _T2, _Res>
: binary_function<_T1*, _T2, _Res>
{ };
// - a pointer to member function type (unary, const)
template<typename _Res, typename _T1>
struct _Reference_wrapper_base<_Res (_T1::*)() const>
: unary_function<const _T1*, _Res>
: unary_function<const _T1*, _Res>
{ };
// - a pointer to member function type (binary, const)
template<typename _Res, typename _T1, typename _T2>
struct _Reference_wrapper_base<_Res (_T1::*)(_T2) const>
: binary_function<const _T1*, _T2, _Res>
: binary_function<const _T1*, _T2, _Res>
{ };
// - a pointer to member function type (unary, volatile)
template<typename _Res, typename _T1>
struct _Reference_wrapper_base<_Res (_T1::*)() volatile>
: unary_function<volatile _T1*, _Res>
: unary_function<volatile _T1*, _Res>
{ };
// - a pointer to member function type (binary, volatile)
template<typename _Res, typename _T1, typename _T2>
struct _Reference_wrapper_base<_Res (_T1::*)(_T2) volatile>
: binary_function<volatile _T1*, _T2, _Res>
: binary_function<volatile _T1*, _T2, _Res>
{ };
// - a pointer to member function type (unary, const volatile)
template<typename _Res, typename _T1>
struct _Reference_wrapper_base<_Res (_T1::*)() const volatile>
: unary_function<const volatile _T1*, _Res>
: unary_function<const volatile _T1*, _Res>
{ };
// - a pointer to member function type (binary, const volatile)
template<typename _Res, typename _T1, typename _T2>
struct _Reference_wrapper_base<_Res (_T1::*)(_T2) const volatile>
: binary_function<const volatile _T1*, _T2, _Res>
: binary_function<const volatile _T1*, _T2, _Res>
{ };
template<typename _Tp>
@ -452,10 +452,10 @@ _GLIBCXX_BEGIN_NAMESPACE(tr1)
public:
template<typename _Tp>
struct _Result_type
: _Mem_fn_const_or_non<
_Res,
(sizeof(__sfinae_types::__two)
== sizeof(__check_const<_Tp>(__get_ref<_Tp>(), (_Tp*)0)))>
: _Mem_fn_const_or_non<
_Res,
(sizeof(__sfinae_types::__two)
== sizeof(__check_const<_Tp>(__get_ref<_Tp>(), (_Tp*)0)))>
{ };
template<typename _Signature>
@ -463,11 +463,11 @@ _GLIBCXX_BEGIN_NAMESPACE(tr1)
template<typename _CVMem, typename _Tp>
struct result<_CVMem(_Tp)>
: public _Result_type<_Tp> { };
: public _Result_type<_Tp> { };
template<typename _CVMem, typename _Tp>
struct result<_CVMem(_Tp&)>
: public _Result_type<_Tp> { };
: public _Result_type<_Tp> { };
explicit _Mem_fn(_Res _Class::*__pm) : __pm(__pm) { }
@ -1100,37 +1100,37 @@ _GLIBCXX_BEGIN_NAMESPACE(tr1)
template<typename T>
struct hash;
#define tr1_hashtable_define_trivial_hash(T) \
#define _TR1_hashtable_define_trivial_hash(_Tp) \
template<> \
struct hash<T> \
: public std::unary_function<T, std::size_t> \
struct hash<_Tp> \
: public std::unary_function<_Tp, std::size_t> \
{ \
std::size_t \
operator()(T val) const \
{ return static_cast<std::size_t>(val); } \
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(unsigned short);
tr1_hashtable_define_trivial_hash(unsigned int);
tr1_hashtable_define_trivial_hash(unsigned long);
_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(unsigned short);
_TR1_hashtable_define_trivial_hash(unsigned int);
_TR1_hashtable_define_trivial_hash(unsigned long);
#undef tr1_hashtable_define_trivial_hash
#undef _TR1_hashtable_define_trivial_hash
template<typename T>
struct hash<T*>
: public std::unary_function<T*, std::size_t>
template<typename _Tp>
struct hash<_Tp*>
: public std::unary_function<_Tp*, std::size_t>
{
std::size_t
operator()(T* p) const
{ return reinterpret_cast<std::size_t>(p); }
operator()(_Tp* __p) const
{ return reinterpret_cast<std::size_t>(__p); }
};
// Fowler / Noll / Vo (FNV) Hash (type FNV-1a)
@ -1138,47 +1138,48 @@ _GLIBCXX_BEGIN_NAMESPACE(tr1)
// Dummy generic implementation (for sizeof(size_t) != 4, 8).
template<std::size_t = sizeof(std::size_t)>
struct Fnv_hash
struct _Fnv_hash
{
static std::size_t
hash(const char* first, std::size_t length)
hash(const char* __first, std::size_t __length)
{
std::size_t result = 0;
for (; length > 0; --length)
result = (result * 131) + *first++;
return result;
std::size_t __result = 0;
for (; __length > 0; --__length)
__result = (__result * 131) + *__first++;
return __result;
}
};
template<>
struct Fnv_hash<4>
struct _Fnv_hash<4>
{
static std::size_t
hash(const char* first, std::size_t length)
hash(const char* __first, std::size_t __length)
{
std::size_t result = static_cast<std::size_t>(2166136261UL);
for (; length > 0; --length)
std::size_t __result = static_cast<std::size_t>(2166136261UL);
for (; __length > 0; --__length)
{
result ^= (std::size_t)*first++;
result *= 16777619UL;
__result ^= (std::size_t)*__first++;
__result *= 16777619UL;
}
return result;
return __result;
}
};
template<>
struct Fnv_hash<8>
struct _Fnv_hash<8>
{
static std::size_t
hash(const char* first, std::size_t length)
hash(const char* __first, std::size_t __length)
{
std::size_t result = static_cast<std::size_t>(14695981039346656037ULL);
for (; length > 0; --length)
std::size_t __result =
static_cast<std::size_t>(14695981039346656037ULL);
for (; __length > 0; --__length)
{
result ^= (std::size_t)*first++;
result *= 1099511628211ULL;
__result ^= (std::size_t)*__first++;
__result *= 1099511628211ULL;
}
return result;
return __result;
}
};
@ -1190,8 +1191,8 @@ _GLIBCXX_BEGIN_NAMESPACE(tr1)
: 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()); }
operator()(const std::string& __s) const
{ return _Fnv_hash<>::hash(__s.data(), __s.length()); }
};
#ifdef _GLIBCXX_USE_WCHAR_T
@ -1200,10 +1201,10 @@ _GLIBCXX_BEGIN_NAMESPACE(tr1)
: public std::unary_function<std::wstring, std::size_t>
{
std::size_t
operator()(const std::wstring& s) const
operator()(const std::wstring& __s) const
{
return Fnv_hash<>::hash(reinterpret_cast<const char*>(s.data()),
s.length() * sizeof(wchar_t));
return _Fnv_hash<>::hash(reinterpret_cast<const char*>(__s.data()),
__s.length() * sizeof(wchar_t));
}
};
#endif
@ -1213,15 +1214,15 @@ _GLIBCXX_BEGIN_NAMESPACE(tr1)
: public std::unary_function<float, std::size_t>
{
std::size_t
operator()(float fval) const
operator()(float __fval) const
{
std::size_t result = 0;
std::size_t __result = 0;
// 0 and -0 both hash to zero.
if (fval != 0.0f)
result = Fnv_hash<>::hash(reinterpret_cast<const char*>(&fval),
sizeof(fval));
return result;
if (__fval != 0.0f)
__result = _Fnv_hash<>::hash(reinterpret_cast<const char*>(&__fval),
sizeof(__fval));
return __result;
}
};
@ -1230,15 +1231,15 @@ _GLIBCXX_BEGIN_NAMESPACE(tr1)
: public std::unary_function<double, std::size_t>
{
std::size_t
operator()(double dval) const
operator()(double __dval) const
{
std::size_t result = 0;
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;
if (__dval != 0.0)
__result = _Fnv_hash<>::hash(reinterpret_cast<const char*>(&__dval),
sizeof(__dval));
return __result;
}
};
@ -1249,29 +1250,30 @@ _GLIBCXX_BEGIN_NAMESPACE(tr1)
: public std::unary_function<long double, std::size_t>
{
std::size_t
operator()(long double ldval) const
operator()(long double __ldval) const
{
std::size_t result = 0;
std::size_t __result = 0;
int exponent;
ldval = std::frexp(ldval, &exponent);
ldval = ldval < 0.0l ? -(ldval + 0.5l) : ldval;
int __exponent;
__ldval = std::frexp(__ldval, &__exponent);
__ldval = __ldval < 0.0l ? -(__ldval + 0.5l) : __ldval;
const long double mult = std::numeric_limits<std::size_t>::max() + 1.0l;
ldval *= mult;
const long double __mult =
std::numeric_limits<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 __hibits = (std::size_t)__ldval;
__ldval = (__ldval - (long double)__hibits) * __mult;
const std::size_t coeff =
const std::size_t __coeff =
(std::numeric_limits<std::size_t>::max()
/ std::numeric_limits<long double>::max_exponent);
result = hibits + (std::size_t)ldval + coeff * exponent;
__result = __hibits + (std::size_t)__ldval + __coeff * __exponent;
return result;
return __result;
}
};

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -43,120 +43,124 @@ _GLIBCXX_BEGIN_NAMESPACE(tr1)
// XXX When we get typedef templates these class definitions
// will be unnecessary.
template<class Key, class T,
class Hash = hash<Key>,
class Pred = std::equal_to<Key>,
class Alloc = std::allocator<std::pair<const Key, T> >,
bool cache_hash_code = false>
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_map
: public hashtable<Key, std::pair<const Key, T>, Alloc,
std::_Select1st<std::pair<const Key, T> >, Pred,
Hash, detail::mod_range_hashing,
detail::default_ranged_hash,
detail::prime_rehash_policy,
cache_hash_code, false, true>
: 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, true>
{
typedef hashtable<Key, std::pair<const Key, T>, Alloc,
std::_Select1st<std::pair<const Key, T> >, Pred,
Hash, detail::mod_range_hashing,
detail::default_ranged_hash,
detail::prime_rehash_policy,
cache_hash_code, false, true>
Base;
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;
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, T> >(), a)
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, T> >(), 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 T,
class Hash = hash<Key>,
class Pred = std::equal_to<Key>,
class Alloc = std::allocator<std::pair<const Key, T> >,
bool cache_hash_code = false>
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, T>,
Alloc,
std::_Select1st<std::pair<const Key, T> >, Pred,
Hash, detail::mod_range_hashing,
detail::default_ranged_hash,
detail::prime_rehash_policy,
cache_hash_code, false, false>
: 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, T>,
Alloc,
std::_Select1st<std::pair<const Key, T> >, Pred,
Hash, detail::mod_range_hashing,
detail::default_ranged_hash,
detail::prime_rehash_policy,
cache_hash_code, false, false>
Base;
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;
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, T> >(), a)
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, T> >(), 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 T, class Hash, class Pred, class Alloc,
bool cache_hash_code>
template<class _Key, class _Tp, class _Hash, class _Pred, class _Alloc,
bool __cache_hash_code>
inline void
swap(unordered_map<Key, T, Hash, Pred, Alloc, cache_hash_code>& x,
unordered_map<Key, T, Hash, Pred, Alloc, cache_hash_code>& y)
{ x.swap(y); }
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 T, class Hash, class Pred, class Alloc,
bool cache_hash_code>
template<class _Key, class _Tp, class _Hash, class _Pred, class _Alloc,
bool __cache_hash_code>
inline void
swap(unordered_multimap<Key, T, Hash, Pred, Alloc, cache_hash_code>& x,
unordered_multimap<Key, T, Hash, Pred, Alloc, cache_hash_code>& y)
{ x.swap(y); }
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); }
_GLIBCXX_END_NAMESPACE
}

View file

@ -43,114 +43,122 @@ _GLIBCXX_BEGIN_NAMESPACE(tr1)
// XXX When we get typedef templates these class definitions
// will be unnecessary.
template<class Value,
class Hash = hash<Value>,
class Pred = std::equal_to<Value>,
class Alloc = std::allocator<Value>,
bool cache_hash_code = false>
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_set
: 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, true>
: 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, 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;
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;
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)
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<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>
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>
: 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;
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;
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)
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<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>
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); }
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>
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); }
swap(unordered_multiset<_Value, _Hash, _Pred,
_Alloc, __cache_hash_code>& __x,
unordered_multiset<_Value, _Hash, _Pred,
_Alloc, __cache_hash_code>& __y)
{ __x.swap(__y); }
_GLIBCXX_END_NAMESPACE
}