allocated = 1;
total_memory = num_buckets * sizeof(hash_bucket);
- fprintf(stderr, "Initial allocaton of %d buckets\n", (int)num_buckets);
+ // fprintf(stderr, "Initial allocaton of %d buckets\n", (int)num_buckets);
}
data_item* d = new data_item(key, val);
// OR it was less then half of the load factor
size_t min_buckets = 0;
if ((max_load > load_factor) || ((2 * max_load) < load_factor)) {
- min_buckets = _max_size / load_factor;
+ min_buckets = ceil(_max_size / load_factor);
}
-
- if (min_buckets) {
+
+
+ if (min_buckets) {
// find power-of-2 size large than min_buckets;
int nb;
for(nb=2;nb<min_buckets;nb*=2);
- num_buckets = nb;
-
- fprintf(stderr, "Resizing to %d buckets\n", (int)num_buckets);
- delete[] buckets;
- hash_mask = num_buckets-1;
-
- buckets = new hash_bucket[num_buckets];
- total_memory = num_buckets * sizeof(hash_bucket);
+ // make sure we actually changing the size
+ if (nb != num_buckets) {
+ fprintf(stderr, "Resizing from %d to %d buckets\n", (int)num_buckets, nb);
+ num_buckets = nb;
+ delete[] buckets;
+ hash_mask = num_buckets-1;
+
+ buckets = new hash_bucket[num_buckets];
+ total_memory = num_buckets * sizeof(hash_bucket);
+ }
}
return 0;
key_type key;
data_item* next; // next data item in overflow chain
- data_item(const key_type& k) : key(k), next(NULL) { }
+ data_item(const key_type& k) {
+ key = k;
+ next = NULL;
+ }
};
struct hash_bucket {
// OR it was less then half of the load factor
size_t min_buckets = 0;
if ((max_load > load_factor) || ((2 * max_load) < load_factor)) {
- min_buckets = _max_size / load_factor;
+ min_buckets = ceil(_max_size / load_factor);
}
if (min_buckets) {
// find power-of-2 size large than min_buckets;
int nb;
for(nb=2;nb<min_buckets;nb*=2);
- num_buckets = nb;
-
- fprintf(stderr, "Resizing to %d buckets\n", num_buckets);
- delete[] buckets;
- hash_mask = num_buckets-1;
-
- buckets = new hash_bucket[num_buckets];
+ // make sure we actually changing the size
+ if (nb != num_buckets) {
+ fprintf(stderr, "Resizing from %d to %d buckets\n", (int)num_buckets, nb);
+ num_buckets = nb;
+ delete[] buckets;
+ hash_mask = num_buckets-1;
+
+ buckets = new hash_bucket[num_buckets];
+ }
}
return 0;