Change EBO accessors from static to non-static member functions

* include/bits/hashtable_policy.h (_Hashtable_ebo_helper::_S_get):
	Replace with _M_get non-static member function.
	(_Hashtable_ebo_helper::_S_cget): Replace with _M_cget non-static
	member function.
	(_Hash_code_base, _Local_iterator_base, _Hashtable_base):
	(_Hashtable_alloc): Adjust to use non-static members of EBO helper.

From-SVN: r271290
This commit is contained in:
Jonathan Wakely 2019-05-16 15:18:45 +01:00 committed by Jonathan Wakely
parent a61b003fbd
commit 1f6ea96860
2 changed files with 35 additions and 38 deletions

View File

@ -1,5 +1,12 @@
2019-05-16 Jonathan Wakely <jwakely@redhat.com>
* include/bits/hashtable_policy.h (_Hashtable_ebo_helper::_S_get):
Replace with _M_get non-static member function.
(_Hashtable_ebo_helper::_S_cget): Replace with _M_cget non-static
member function.
(_Hash_code_base, _Local_iterator_base, _Hashtable_base):
(_Hashtable_alloc): Adjust to use non-static members of EBO helper.
* include/bits/hashtable_policy.h (_Hash_code_base::_M_swap): Use
_S_get accessors for members in EBO helpers.
(_Hash_code_base::_M_extract(), _Hash_code_base::_M_ranged_hash())

View File

@ -1112,13 +1112,8 @@ namespace __detail
: _Tp(std::forward<_OtherTp>(__tp))
{ }
static const _Tp&
_S_cget(const _Hashtable_ebo_helper& __eboh)
{ return static_cast<const _Tp&>(__eboh); }
static _Tp&
_S_get(_Hashtable_ebo_helper& __eboh)
{ return static_cast<_Tp&>(__eboh); }
const _Tp& _M_cget() const { return static_cast<const _Tp&>(*this); }
_Tp& _M_get() { return static_cast<_Tp&>(*this); }
};
/// Specialization not using EBO.
@ -1132,13 +1127,8 @@ namespace __detail
: _M_tp(std::forward<_OtherTp>(__tp))
{ }
static const _Tp&
_S_cget(const _Hashtable_ebo_helper& __eboh)
{ return __eboh._M_tp; }
static _Tp&
_S_get(_Hashtable_ebo_helper& __eboh)
{ return __eboh._M_tp; }
const _Tp& _M_cget() const { return _M_tp; }
_Tp& _M_get() { return _M_tp; }
private:
_Tp _M_tp;
@ -1229,16 +1219,16 @@ namespace __detail
void
_M_swap(_Hash_code_base& __x)
{
std::swap(__ebo_extract_key::_S_get(*this),
__ebo_extract_key::_S_get(__x));
std::swap(__ebo_hash::_S_get(*this), __ebo_hash::_S_get(__x));
std::swap(__ebo_extract_key::_M_get(),
__x.__ebo_extract_key::_M_get());
std::swap(__ebo_hash::_M_get(), __x.__ebo_hash::_M_get());
}
const _ExtractKey&
_M_extract() const { return __ebo_extract_key::_S_cget(*this); }
_M_extract() const { return __ebo_extract_key::_M_cget(); }
const _Hash&
_M_ranged_hash() const { return __ebo_hash::_S_cget(*this); }
_M_ranged_hash() const { return __ebo_hash::_M_cget(); }
};
// No specialization for ranged hash function while caching hash codes.
@ -1317,20 +1307,20 @@ namespace __detail
void
_M_swap(_Hash_code_base& __x)
{
std::swap(__ebo_extract_key::_S_get(*this),
__ebo_extract_key::_S_get(__x));
std::swap(__ebo_h1::_S_get(*this), __ebo_h1::_S_get(__x));
std::swap(__ebo_h2::_S_get(*this), __ebo_h2::_S_get(__x));
std::swap(__ebo_extract_key::_M_get(),
__x.__ebo_extract_key::_M_get());
std::swap(__ebo_h1::_M_get(), __x.__ebo_h1::_M_get());
std::swap(__ebo_h2::_M_get(), __x.__ebo_h2::_M_get());
}
const _ExtractKey&
_M_extract() const { return __ebo_extract_key::_S_cget(*this); }
_M_extract() const { return __ebo_extract_key::_M_cget(); }
const _H1&
_M_h1() const { return __ebo_h1::_S_cget(*this); }
_M_h1() const { return __ebo_h1::_M_cget(); }
const _H2&
_M_h2() const { return __ebo_h2::_S_cget(*this); }
_M_h2() const { return __ebo_h2::_M_cget(); }
};
/// Specialization: hash function and range-hashing function,
@ -1397,20 +1387,20 @@ namespace __detail
void
_M_swap(_Hash_code_base& __x)
{
std::swap(__ebo_extract_key::_S_get(*this),
__ebo_extract_key::_S_get(__x));
std::swap(__ebo_h1::_S_get(*this), __ebo_h1::_S_get(__x));
std::swap(__ebo_h2::_S_get(*this), __ebo_h2::_S_get(__x));
std::swap(__ebo_extract_key::_M_get(),
__x.__ebo_extract_key::_M_get());
std::swap(__ebo_h1::_M_get(), __x.__ebo_h1::_M_get());
std::swap(__ebo_h2::_M_get(), __x.__ebo_h2::_M_get());
}
const _ExtractKey&
_M_extract() const { return __ebo_extract_key::_S_cget(*this); }
_M_extract() const { return __ebo_extract_key::_M_cget(); }
const _H1&
_M_h1() const { return __ebo_h1::_S_cget(*this); }
_M_h1() const { return __ebo_h1::_M_cget(); }
const _H2&
_M_h2() const { return __ebo_h2::_S_cget(*this); }
_M_h2() const { return __ebo_h2::_M_cget(); }
};
/**
@ -1471,7 +1461,7 @@ namespace __detail
if (_M_cur)
{
std::size_t __bkt
= __base_type::_S_get(*this)(_M_cur->_M_hash_code,
= __base_type::_M_get()(_M_cur->_M_hash_code,
_M_bucket_count);
if (__bkt != _M_bucket)
_M_cur = nullptr;
@ -1819,11 +1809,11 @@ namespace __detail
_M_swap(_Hashtable_base& __x)
{
__hash_code_base::_M_swap(__x);
std::swap(_EqualEBO::_S_get(*this), _EqualEBO::_S_get(__x));
std::swap(_EqualEBO::_M_get(), __x._EqualEBO::_M_get());
}
const _Equal&
_M_eq() const { return _EqualEBO::_S_cget(*this); }
_M_eq() const { return _EqualEBO::_M_cget(); }
};
/**
@ -2021,11 +2011,11 @@ namespace __detail
__node_alloc_type&
_M_node_allocator()
{ return __ebo_node_alloc::_S_get(*this); }
{ return __ebo_node_alloc::_M_get(); }
const __node_alloc_type&
_M_node_allocator() const
{ return __ebo_node_alloc::_S_cget(*this); }
{ return __ebo_node_alloc::_M_cget(); }
template<typename... _Args>
__node_type*