replace modulo with if to check for wraparound in hashmap

Integer division is slow, and this improves the speed of all operations on the hashmap.

Benchmarked this patch on the rciorba/master-bench branch:
9e5d61e03c/results.html

(cherry picked from commit 12e0f55991)
This commit is contained in:
Radu Ciorba 2017-07-16 14:28:01 +03:00 committed by Thomas Waldmann
parent 39f876229f
commit 2cdd4353b6

View file

@ -143,7 +143,10 @@ hashindex_lookup(HashIndex *index, const void *key)
}
return idx;
}
idx = (idx + 1) % index->num_buckets;
idx++;
if (idx >= index->num_buckets) {
idx -= index->num_buckets;
}
if(idx == start) {
return -1;
}
@ -434,7 +437,10 @@ hashindex_set(HashIndex *index, const void *key, const void *value)
}
idx = hashindex_index(index, key);
while(!BUCKET_IS_EMPTY(index, idx) && !BUCKET_IS_DELETED(index, idx)) {
idx = (idx + 1) % index->num_buckets;
idx++;
if (idx >= index->num_buckets){
idx -= index->num_buckets;
}
}
if(BUCKET_IS_EMPTY(index, idx)){
index->num_empty--;