forked from boostorg/unordered
Some compilers don't like the use of sizeof with a static template member
array, so I'm hardcoding the prime number list length. Pity. [SVN r45620]
This commit is contained in:
@@ -81,6 +81,7 @@ namespace boost {
|
|||||||
template<typename T> struct prime_list_template
|
template<typename T> struct prime_list_template
|
||||||
{
|
{
|
||||||
static std::size_t const value[];
|
static std::size_t const value[];
|
||||||
|
static std::ptrdiff_t const length;
|
||||||
};
|
};
|
||||||
|
|
||||||
template<typename T>
|
template<typename T>
|
||||||
@@ -92,13 +93,16 @@ namespace boost {
|
|||||||
50331653ul, 100663319ul, 201326611ul, 402653189ul, 805306457ul,
|
50331653ul, 100663319ul, 201326611ul, 402653189ul, 805306457ul,
|
||||||
1610612741ul, 3221225473ul, 4294967291ul };
|
1610612741ul, 3221225473ul, 4294967291ul };
|
||||||
|
|
||||||
|
template<typename T>
|
||||||
|
std::ptrdiff_t const prime_list_template<T>::length = 28;
|
||||||
|
|
||||||
typedef prime_list_template<std::size_t> prime_list;
|
typedef prime_list_template<std::size_t> prime_list;
|
||||||
|
|
||||||
// no throw
|
// no throw
|
||||||
inline std::size_t next_prime(std::size_t n) {
|
inline std::size_t next_prime(std::size_t n) {
|
||||||
std::size_t const* const prime_list_begin = prime_list::value;
|
std::size_t const* const prime_list_begin = prime_list::value;
|
||||||
std::size_t const* const prime_list_end = prime_list_begin +
|
std::size_t const* const prime_list_end = prime_list_begin +
|
||||||
sizeof(prime_list::value) / sizeof(*prime_list::value);
|
prime_list::length;
|
||||||
std::size_t const* bound =
|
std::size_t const* bound =
|
||||||
std::lower_bound(prime_list_begin, prime_list_end, n);
|
std::lower_bound(prime_list_begin, prime_list_end, n);
|
||||||
if(bound == prime_list_end)
|
if(bound == prime_list_end)
|
||||||
@@ -110,7 +114,7 @@ namespace boost {
|
|||||||
inline std::size_t prev_prime(std::size_t n) {
|
inline std::size_t prev_prime(std::size_t n) {
|
||||||
std::size_t const* const prime_list_begin = prime_list::value;
|
std::size_t const* const prime_list_begin = prime_list::value;
|
||||||
std::size_t const* const prime_list_end = prime_list_begin +
|
std::size_t const* const prime_list_end = prime_list_begin +
|
||||||
sizeof(prime_list::value) / sizeof(*prime_list::value);
|
prime_list::length;
|
||||||
std::size_t const* bound =
|
std::size_t const* bound =
|
||||||
std::upper_bound(prime_list_begin,prime_list_end, n);
|
std::upper_bound(prime_list_begin,prime_list_end, n);
|
||||||
if(bound != prime_list_begin)
|
if(bound != prime_list_begin)
|
||||||
|
Reference in New Issue
Block a user