carl  24.04
Computer ARithmetic Library
PoolHelper.cpp
Go to the documentation of this file.
1 #include "PoolHelper.h"
2 #include <iostream>
3 
4 namespace carl {
5 namespace pool {
6 
7 std::size_t RehashPolicy::numBucketsFor(std::size_t numElements) const {
8  const float minBuckets = float(numElements) / mMaxLoadFactor;
9  const unsigned long* p = std::lower_bound(primes, primes + numPrimes, minBuckets);
10  mNextResize = static_cast<std::size_t>(std::ceil(float(*p) * mMaxLoadFactor));
11  return *p;
12 }
13 
14 std::pair<bool, std::size_t> RehashPolicy::needRehash(std::size_t numBuckets, std::size_t numElements) const {
15  if (numElements > mNextResize) {
16  float minBuckets = float(numElements) / mMaxLoadFactor;
17  if (minBuckets > float(numBuckets)) {
18  minBuckets = std::max(minBuckets, mGrowthFactor * float(numBuckets));
19  const unsigned long* p = std::lower_bound(primes, primes + numPrimes, minBuckets);
20  mNextResize = static_cast<std::size_t>(std::ceil(float(*p) * mMaxLoadFactor));
21  return std::make_pair(true, *p);
22  } else {
23  mNextResize = static_cast<std::size_t>(std::ceil(float(numBuckets) * mMaxLoadFactor));
24  return std::make_pair(false, 0);
25  }
26  } else {
27  return std::make_pair(false, 0);
28  }
29 }
30 
31 const unsigned long RehashPolicy::primes[256 + 48 + 1] = {
32  2ul, 3ul, 5ul, 7ul, 11ul, 13ul, 17ul, 19ul, 23ul, 29ul, 31ul,
33  37ul, 41ul, 43ul, 47ul, 53ul, 59ul, 61ul, 67ul, 71ul, 73ul, 79ul,
34  83ul, 89ul, 97ul, 103ul, 109ul, 113ul, 127ul, 137ul, 139ul, 149ul,
35  157ul, 167ul, 179ul, 193ul, 199ul, 211ul, 227ul, 241ul, 257ul,
36  277ul, 293ul, 313ul, 337ul, 359ul, 383ul, 409ul, 439ul, 467ul,
37  503ul, 541ul, 577ul, 619ul, 661ul, 709ul, 761ul, 823ul, 887ul,
38  953ul, 1031ul, 1109ul, 1193ul, 1289ul, 1381ul, 1493ul, 1613ul,
39  1741ul, 1879ul, 2029ul, 2179ul, 2357ul, 2549ul, 2753ul, 2971ul,
40  3209ul, 3469ul, 3739ul, 4027ul, 4349ul, 4703ul, 5087ul, 5503ul,
41  5953ul, 6427ul, 6949ul, 7517ul, 8123ul, 8783ul, 9497ul, 10273ul,
42  11113ul, 12011ul, 12983ul, 14033ul, 15173ul, 16411ul, 17749ul,
43  19183ul, 20753ul, 22447ul, 24281ul, 26267ul, 28411ul, 30727ul,
44  33223ul, 35933ul, 38873ul, 42043ul, 45481ul, 49201ul, 53201ul,
45  57557ul, 62233ul, 67307ul, 72817ul, 78779ul, 85229ul, 92203ul,
46  99733ul, 107897ul, 116731ul, 126271ul, 136607ul, 147793ul,
47  159871ul, 172933ul, 187091ul, 202409ul, 218971ul, 236897ul,
48  256279ul, 277261ul, 299951ul, 324503ul, 351061ul, 379787ul,
49  410857ul, 444487ul, 480881ul, 520241ul, 562841ul, 608903ul,
50  658753ul, 712697ul, 771049ul, 834181ul, 902483ul, 976369ul,
51  1056323ul, 1142821ul, 1236397ul, 1337629ul, 1447153ul, 1565659ul,
52  1693859ul, 1832561ul, 1982627ul, 2144977ul, 2320627ul, 2510653ul,
53  2716249ul, 2938679ul, 3179303ul, 3439651ul, 3721303ul, 4026031ul,
54  4355707ul, 4712381ul, 5098259ul, 5515729ul, 5967347ul, 6456007ul,
55  6984629ul, 7556579ul, 8175383ul, 8844859ul, 9569143ul, 10352717ul,
56  11200489ul, 12117689ul, 13109983ul, 14183539ul, 15345007ul,
57  16601593ul, 17961079ul, 19431899ul, 21023161ul, 22744717ul,
58  24607243ul, 26622317ul, 28802401ul, 31160981ul, 33712729ul,
59  36473443ul, 39460231ul, 42691603ul, 46187573ul, 49969847ul,
60  54061849ul, 58488943ul, 63278561ul, 68460391ul, 74066549ul,
61  80131819ul, 86693767ul, 93793069ul, 101473717ul, 109783337ul,
62  118773397ul, 128499677ul, 139022417ul, 150406843ul, 162723577ul,
63  176048909ul, 190465427ul, 206062531ul, 222936881ul, 241193053ul,
64  260944219ul, 282312799ul, 305431229ul, 330442829ul, 357502601ul,
65  386778277ul, 418451333ul, 452718089ul, 489790921ul, 529899637ul,
66  573292817ul, 620239453ul, 671030513ul, 725980837ul, 785430967ul,
67  849749479ul, 919334987ul, 994618837ul, 1076067617ul, 1164186217ul,
68  1259520799ul, 1362662261ul, 1474249943ul, 1594975441ul,
69  1725587117ul, 1866894511ul, 2019773507ul, 2185171673ul,
70  2364114217ul, 2557710269ul, 2767159799ul, 2993761039ul,
71  3238918481ul, 3504151727ul, 3791104843ul, 4101556399ul,
72  4294967291ul,
73  sizeof(unsigned long) != 8 ? 4294967291ul : (unsigned long)6442450933ull,
74  (unsigned long)8589934583ull,
75  (unsigned long)12884901857ull, (unsigned long)17179869143ull,
76  (unsigned long)25769803693ull, (unsigned long)34359738337ull,
77  (unsigned long)51539607367ull, (unsigned long)68719476731ull,
78  (unsigned long)103079215087ull, (unsigned long)137438953447ull,
79  (unsigned long)206158430123ull, (unsigned long)274877906899ull,
80  (unsigned long)412316860387ull, (unsigned long)549755813881ull,
81  (unsigned long)824633720731ull, (unsigned long)1099511627689ull,
82  (unsigned long)1649267441579ull, (unsigned long)2199023255531ull,
83  (unsigned long)3298534883309ull, (unsigned long)4398046511093ull,
84  (unsigned long)6597069766607ull, (unsigned long)8796093022151ull,
85  (unsigned long)13194139533241ull, (unsigned long)17592186044399ull,
86  (unsigned long)26388279066581ull, (unsigned long)35184372088777ull,
87  (unsigned long)52776558133177ull, (unsigned long)70368744177643ull,
88  (unsigned long)105553116266399ull, (unsigned long)140737488355213ull,
89  (unsigned long)211106232532861ull, (unsigned long)281474976710597ull,
90  (unsigned long)562949953421231ull, (unsigned long)1125899906842597ull,
91  (unsigned long)2251799813685119ull, (unsigned long)4503599627370449ull,
92  (unsigned long)9007199254740881ull, (unsigned long)18014398509481951ull,
93  (unsigned long)36028797018963913ull, (unsigned long)72057594037927931ull,
94  (unsigned long)144115188075855859ull,
95  (unsigned long)288230376151711717ull,
96  (unsigned long)576460752303423433ull,
97  (unsigned long)1152921504606846883ull,
98  (unsigned long)2305843009213693951ull,
99  (unsigned long)4611686018427387847ull,
100  (unsigned long)9223372036854775783ull,
101  (unsigned long)18446744073709551557ull,
102  (unsigned long)18446744073709551557ull};
103 
104 } // namespace pool
105 } // namespace carl
carl is the main namespace for the library.
Interval< Number > ceil(const Interval< Number > &_in)
Method which returns the next larger integer of the passed number or the number itself,...
Definition: Interval.h:1535
std::size_t mNextResize
Definition: PoolHelper.h:21
std::pair< bool, std::size_t > needRehash(std::size_t numBuckets, std::size_t numElements) const
Definition: PoolHelper.cpp:14
static const unsigned long primes[256+48+1]
Definition: PoolHelper.h:17
static const int numPrimes
Definition: PoolHelper.h:16
std::size_t numBucketsFor(std::size_t numElements) const
Definition: PoolHelper.cpp:7