summaryrefslogtreecommitdiffhomepage
path: root/include/stc
diff options
context:
space:
mode:
authorTyge Løvset <[email protected]>2023-05-29 20:42:43 +0200
committerTyge Løvset <[email protected]>2023-05-29 20:42:43 +0200
commit80df921622c97634aeea31821a61f46885324d9c (patch)
treed755e6e3b1294f80ff068695a7b8c5096b3b8359 /include/stc
parent8497b5497ecba2c2f1d368c9161ec52d4f03ae30 (diff)
downloadSTC-modified-80df921622c97634aeea31821a61f46885324d9c.tar.gz
STC-modified-80df921622c97634aeea31821a61f46885324d9c.zip
Update extern benchmark maps.
Removed i_expandby in cmap. Always expand by 2 i.e 2^n buckets..
Diffstat (limited to 'include/stc')
-rw-r--r--include/stc/cmap.h22
1 files changed, 4 insertions, 18 deletions
diff --git a/include/stc/cmap.h b/include/stc/cmap.h
index 4ba6156b..837631f8 100644
--- a/include/stc/cmap.h
+++ b/include/stc/cmap.h
@@ -265,18 +265,7 @@ _cx_memb(_eq)(const _cx_self* self, const _cx_self* other) {
#ifndef i_max_load_factor
#define i_max_load_factor 0.80f
#endif
-#ifndef i_expandby
- #define i_expandby 2
-#endif
-
-#ifndef CMAP_H_INCLUDED
-STC_INLINE intptr_t fastrange_1(uint64_t x, uint64_t n)
- { return (intptr_t)((uint32_t)x*n >> 32); } // n < 2^32
-
-STC_INLINE intptr_t fastrange_2(uint64_t x, uint64_t n)
- { return (intptr_t)(x & (n - 1)); } // n power of 2.
-
-#endif // CMAP_H_INCLUDED
+#define fastrange_2(x, n) (intptr_t)((x) & (size_t)((n) - 1)) // n power of 2.
STC_DEF _cx_iter _cx_memb(_begin)(const _cx_self* self) {
_cx_iter it = {self->data, self->data+self->bucket_count, self->slot};
@@ -356,7 +345,7 @@ STC_DEF chash_bucket
_cx_memb(_bucket_)(const _cx_self* self, const _cx_keyraw* rkeyptr) {
const uint64_t _hash = i_hash(rkeyptr);
intptr_t _cap = self->bucket_count;
- chash_bucket b = {c_PASTE(fastrange_,i_expandby)(_hash, (uint64_t)_cap), (uint8_t)(_hash | 0x80)};
+ chash_bucket b = {fastrange_2(_hash, _cap), (uint8_t)(_hash | 0x80)};
const chash_slot* s = self->slot;
while (s[b.idx].hashx) {
if (s[b.idx].hashx == b.hashx) {
@@ -413,10 +402,8 @@ _cx_memb(_reserve)(_cx_self* self, const intptr_t _newcap) {
const intptr_t _oldbucks = self->bucket_count;
if (_newcap != self->size && _newcap <= _oldbucks)
return true;
- intptr_t _newbucks = (intptr_t)((float)_newcap / (i_max_load_factor)) | 1;
- #if i_expandby == 2
+ intptr_t _newbucks = (intptr_t)((float)_newcap / (i_max_load_factor)) + 4;
_newbucks = cnextpow2(_newbucks);
- #endif
_cx_self m = {
(_cx_value *)i_malloc(_newbucks*c_sizeof(_cx_value)),
(chash_slot *)i_calloc(_newbucks + 1, sizeof(chash_slot)),
@@ -452,7 +439,7 @@ _cx_memb(_erase_entry)(_cx_self* self, _cx_value* _val) {
if (! s[j].hashx)
break;
const _cx_keyraw _raw = i_keyto(_i_keyref(d + j));
- k = (intptr_t)c_PASTE(fastrange_,i_expandby)(i_hash((&_raw)), (uint64_t)_cap);
+ k = fastrange_2(i_hash((&_raw)), _cap);
if ((j < i) ^ (k <= i) ^ (k > j)) { // is k outside (i, j]?
d[i] = d[j];
s[i] = s[j];
@@ -464,7 +451,6 @@ _cx_memb(_erase_entry)(_cx_self* self, _cx_value* _val) {
}
#endif // i_implement
#undef i_max_load_factor
-#undef i_expandby
#undef _i_isset
#undef _i_ismap
#undef _i_keyref