51static const int primes [nprimes] = { 31, 73, 151, 313, 643, 1291, 2593, 5233, 10501, 21013, 42073, 84181, 168451, 337219, 674701, 1349473, 2699299, 5398891, 10798093, 21596719, 43193641, 86387383, 172775299, 345550609, 691101253 };
71 Map<K,D,H,E>& operator = (Map<K,D,H,E>& other) {
assert(0); }
74 bool checkCap(
int new_size)
const {
return new_size > cap; }
76 int32_t index (
const K& k)
const {
return hash(k) % cap; }
77 void _insert (
const K& k,
const D& d) {
78 vec<Pair>& ps = table[index(k)];
79 ps.push(); ps.last().key = k; ps.last().data = d; }
82 const vec<Pair>* old = table;
85 int newsize = primes[0];
86 for (
int i = 1; newsize <= cap && i < nprimes; i++)
89 table =
new vec<Pair>[newsize];
92 for (
int i = 0; i < old_cap; i++){
93 for (
int j = 0; j < old[i].size(); j++){
94 _insert(old[i][j].
key, old[i][j].data); }}
104 Map () : table(NULL), cap(0), size(0) {}
105 Map (
const H& h,
const E& e) : hash(h), equals(e), table(NULL), cap(0), size(0){}
114 for (
int i = 0; i < ps.
size(); i++)
115 if (equals(ps[i].
key, k))
127 for (
int i = 0; i < ps.
size(); i++)
128 if (equals(ps[i].
key, k))
135 void insert (
const K& k,
const D& d) {
if (checkCap(size+1)) rehash(); _insert(k, d); size++; }
136 bool peek (
const K& k, D& d)
const {
137 if (size == 0)
return false;
139 for (
int i = 0; i < ps.
size(); i++)
140 if (equals(ps[i].
key, k)){
146 bool has (
const K& k)
const {
147 if (size == 0)
return false;
149 for (
int i = 0; i < ps.
size(); i++)
150 if (equals(ps[i].
key, k))
160 for (; j < ps.
size() && !equals(ps[j].
key, k); j++);
178 delete [] other.table;