From 0bc229dbbe2a109ea39d08ced1bb296c59bcd120 Mon Sep 17 00:00:00 2001 From: Jonathan Wakely Date: Thu, 16 May 2019 11:04:50 +0100 Subject: [PATCH] Remove unnecessary non-const accessors in hash table bases The const accessors are OK (and arguably more correct) for most callers to use. The _M_swap functions that use the non-const overloads can just directly use the _S_get members of the EBO helpers. * 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()) (_Hash_code_base::_M_h1(), _Hash_code_base::_M_h2()): Remove non-const overloads. (_Hashtable_base::_M_swap): Use _S_get accessors for members in EBO helpers. (_Hashtable_base::_M_eq()): Remove non-const overload. From-SVN: r271286 --- libstdc++-v3/ChangeLog | 11 +++++ libstdc++-v3/include/bits/hashtable_policy.h | 48 +++++--------------- 2 files changed, 23 insertions(+), 36 deletions(-) diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog index b5e6c973e64..acb6b176695 100644 --- a/libstdc++-v3/ChangeLog +++ b/libstdc++-v3/ChangeLog @@ -1,3 +1,14 @@ +2019-05-16 Jonathan Wakely + + * 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()) + (_Hash_code_base::_M_h1(), _Hash_code_base::_M_h2()): Remove non-const + overloads. + (_Hashtable_base::_M_swap): Use _S_get accessors for members in EBO + helpers. + (_Hashtable_base::_M_eq()): Remove non-const overload. + 2019-05-15 Jonathan Wakely * include/std/variant (visit, visit): Qualify calls to __do_visit. diff --git a/libstdc++-v3/include/bits/hashtable_policy.h b/libstdc++-v3/include/bits/hashtable_policy.h index c7f466cd686..b417a7d442c 100644 --- a/libstdc++-v3/include/bits/hashtable_policy.h +++ b/libstdc++-v3/include/bits/hashtable_policy.h @@ -1229,21 +1229,16 @@ namespace __detail void _M_swap(_Hash_code_base& __x) { - std::swap(_M_extract(), __x._M_extract()); - std::swap(_M_ranged_hash(), __x._M_ranged_hash()); + 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)); } const _ExtractKey& _M_extract() const { return __ebo_extract_key::_S_cget(*this); } - _ExtractKey& - _M_extract() { return __ebo_extract_key::_S_get(*this); } - const _Hash& _M_ranged_hash() const { return __ebo_hash::_S_cget(*this); } - - _Hash& - _M_ranged_hash() { return __ebo_hash::_S_get(*this); } }; // No specialization for ranged hash function while caching hash codes. @@ -1322,28 +1317,20 @@ namespace __detail void _M_swap(_Hash_code_base& __x) { - std::swap(_M_extract(), __x._M_extract()); - std::swap(_M_h1(), __x._M_h1()); - std::swap(_M_h2(), __x._M_h2()); + 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)); } const _ExtractKey& _M_extract() const { return __ebo_extract_key::_S_cget(*this); } - _ExtractKey& - _M_extract() { return __ebo_extract_key::_S_get(*this); } - const _H1& _M_h1() const { return __ebo_h1::_S_cget(*this); } - _H1& - _M_h1() { return __ebo_h1::_S_get(*this); } - const _H2& _M_h2() const { return __ebo_h2::_S_cget(*this); } - - _H2& - _M_h2() { return __ebo_h2::_S_get(*this); } }; /// Specialization: hash function and range-hashing function, @@ -1410,28 +1397,20 @@ namespace __detail void _M_swap(_Hash_code_base& __x) { - std::swap(_M_extract(), __x._M_extract()); - std::swap(_M_h1(), __x._M_h1()); - std::swap(_M_h2(), __x._M_h2()); + 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)); } const _ExtractKey& _M_extract() const { return __ebo_extract_key::_S_cget(*this); } - _ExtractKey& - _M_extract() { return __ebo_extract_key::_S_get(*this); } - const _H1& _M_h1() const { return __ebo_h1::_S_cget(*this); } - _H1& - _M_h1() { return __ebo_h1::_S_get(*this); } - const _H2& _M_h2() const { return __ebo_h2::_S_cget(*this); } - - _H2& - _M_h2() { return __ebo_h2::_S_get(*this); } }; /** @@ -1840,14 +1819,11 @@ namespace __detail _M_swap(_Hashtable_base& __x) { __hash_code_base::_M_swap(__x); - std::swap(_M_eq(), __x._M_eq()); + std::swap(_EqualEBO::_S_get(*this), _EqualEBO::_S_get(__x)); } const _Equal& _M_eq() const { return _EqualEBO::_S_cget(*this); } - - _Equal& - _M_eq() { return _EqualEBO::_S_get(*this); } }; /** -- 2.30.2