This is the mail archive of the
libstdc++@gcc.gnu.org
mailing list for the libstdc++ project.
Re: Hide _S_n_primes from user code
- From: FranÃois Dumont <frs dot dumont at gmail dot com>
- To: "libstdc++ at gcc dot gnu dot org" <libstdc++ at gcc dot gnu dot org>, gcc-patches <gcc-patches at gcc dot gnu dot org>
- Date: Wed, 22 Apr 2015 22:11:37 +0200
- Subject: Re: Hide _S_n_primes from user code
- Authentication-results: sourceware.org; auth=none
- References: <5537F904 dot 4010405 at gmail dot com>
With the patch this time.
On 22/04/2015 21:39, FranÃois Dumont wrote:
Hello
Here is a rather trivial patch, just code cleanup. Since we export
_Prime_rehash_policy we do not need to expose the _S_n_primes anymore.
* include/bits/hashtable_policy.h
(_Prime_rehash_policy::_S_n_primes):
Delete.
* src/c++11/hashtable_c++0x.cc (_Prime_rehash_policy::_M_next_bkt):
Remove usage of latter and compute size of the prime numbers array
locally.
Tested under Linux x86_64.
Ok to commit ?
FranÃois
diff --git a/libstdc++-v3/include/bits/hashtable_policy.h b/libstdc++-v3/include/bits/hashtable_policy.h
index 14bcca6..a9ad7dd 100644
--- a/libstdc++-v3/include/bits/hashtable_policy.h
+++ b/libstdc++-v3/include/bits/hashtable_policy.h
@@ -495,8 +495,6 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
_M_reset(_State __state)
{ _M_next_resize = __state; }
- enum { _S_n_primes = sizeof(unsigned long) != 8 ? 256 : 256 + 48 };
-
static const std::size_t _S_growth_factor = 2;
float _M_max_load_factor;
diff --git a/libstdc++-v3/src/c++11/hashtable_c++0x.cc b/libstdc++-v3/src/c++11/hashtable_c++0x.cc
index 22de51b..69f999f 100644
--- a/libstdc++-v3/src/c++11/hashtable_c++0x.cc
+++ b/libstdc++-v3/src/c++11/hashtable_c++0x.cc
@@ -56,8 +56,10 @@ namespace __detail
return __fast_bkt[__n];
}
+ constexpr auto __n_primes
+ = sizeof(__prime_list) / sizeof(unsigned long) - 1;
const unsigned long* __next_bkt =
- std::lower_bound(__prime_list + 5, __prime_list + _S_n_primes, __n);
+ std::lower_bound(__prime_list + 5, __prime_list + __n_primes, __n);
_M_next_resize =
__builtin_ceil(*__next_bkt * (long double)_M_max_load_factor);
return *__next_bkt;