better hashing

This commit is contained in:
2020-08-02 15:11:32 +02:00
parent debf0daf33
commit 14009a6e25
3 changed files with 2 additions and 20 deletions

View File

@ -9,6 +9,7 @@ union acl_hashmap_meta {
size_t keyBits;
};
};
/* set keySize to NULL for a dynamic keySize */
union acl_hashmap_meta* acl_hashmap_create(size_t bucketCount, size_t sizeOneElement, size_t keySize);
void acl_hashmap_put(union acl_hashmap_meta *hashmap_meta, void *key, void *element);
#endif

View File

@ -42,7 +42,7 @@ void* acl_arraylist_append_ptr(void *arraylist_void, void **append_element) {
if(arraylist->len > 10) arraylist->cap = arraylist->len + 10;
else arraylist->cap = arraylist->len * 2 + 1;
arraylist = realloc(arraylist, arraylist->cap * arraylist->sizeof_one_element + sizeof *arraylist);
if(!arraylist) return NULL;
if(arraylist == NULL) return NULL;
}
*append_element = (char*)(arraylist + 1) + arraylist->sizeof_one_element * arraylist->len;
++arraylist->len;

View File

@ -7,18 +7,8 @@
#include <stdint.h>
#include <string.h>
#include <stdio.h>
#ifdef ACL_LITTLE_ENDIAN
#define LEFT_OR_RIGHT_SHIFT >>
#else
#ifdef ACL_BIG_ENDIAN
#define LEFT_OR_RIGHT_SHIFT <<
#else
#error "endianiss not specified. make sure to properly add the cmake subdirectory."
#endif
#endif
#define acl_hashVarLen(type)\
if(((uintptr_t)data & (alignof(type) - 1)) == 0) {\
printf(#type);\
type *src;\
for(uint64_t *keySrc = data; (char*)(keySrc + 1) <= dest; ++keySrc) {\
src = (type*)keySrc;\
@ -79,14 +69,5 @@ void acl_hashmap_put(union acl_hashmap_meta *hashmap_meta, void *key, void *elem
void **hashmap_buckets = (void**)(hashmap_meta + 1);
}
#include <stdio.h>
int main() {
char baum[10] = {1};
char blau[10] = {1};
char green[10] = {1};
char w[10] = {1};
printf("Hash: %lu\n", acl_hash(baum, 9 * sizeof *baum , 5));
printf("Hash: %lu\n", acl_hash(blau, 9 * sizeof *baum , 5));
printf("Hash: %lu\n", acl_hash(green, 9 * sizeof *baum , 5));
printf("Hash: %lu\n", acl_hash(w, 9 * sizeof *baum , 5));
}