From de2c53f473a7dfb9199d598e97f93fc58e16150b Mon Sep 17 00:00:00 2001 From: MrGeorgen Date: Wed, 22 Jul 2020 22:11:05 +0200 Subject: [PATCH] hash function --- include/acl/array.h | 4 ++-- include/acl/file.h | 4 ++-- include/acl/hashmap.h | 4 ++++ src/array.c | 3 ++- src/hashmap.c | 6 ++++++ 5 files changed, 16 insertions(+), 5 deletions(-) create mode 100644 include/acl/hashmap.h create mode 100644 src/hashmap.c diff --git a/include/acl/array.h b/include/acl/array.h index 8787265..64cbb3c 100644 --- a/include/acl/array.h +++ b/include/acl/array.h @@ -1,5 +1,5 @@ -#ifndef array_h -#define array_h +#ifndef _acl_array_h +#define _acl_array_h #include size_t acl_arraylist_len(void *arraylist); void acl_arraylist_free(void *arraylist); diff --git a/include/acl/file.h b/include/acl/file.h index a4ab280..b9061ae 100644 --- a/include/acl/file.h +++ b/include/acl/file.h @@ -1,5 +1,5 @@ -#ifndef acl_file_h -#define acl_file_h +#ifndef _acl_file_h +#define _acl_file_h #include char* acl_ReadTextFile(const char *filePath, bool *sucess); #endif diff --git a/include/acl/hashmap.h b/include/acl/hashmap.h new file mode 100644 index 0000000..d65a400 --- /dev/null +++ b/include/acl/hashmap.h @@ -0,0 +1,4 @@ +#ifndef _acl_hashmap_h +#define _acl_hashmap_h +unsigned hash(unsigned K); +#endif diff --git a/src/array.c b/src/array.c index d7a808a..c46f229 100644 --- a/src/array.c +++ b/src/array.c @@ -28,7 +28,8 @@ void* acl_arraylist_append(void *arraylist_void, void *element) { union arraylist_meta *arraylist = arraylist_void; --arraylist; if(arraylist->len == arraylist->cap) { - arraylist->cap = arraylist->len + 10; + if(arraylist->len > 10) arraylist->cap = arraylist->len + 10; + else arraylist->cap = arraylist->len * 2; arraylist = realloc(arraylist, arraylist->cap * arraylist->sizeof_one_element + sizeof *arraylist); if(!arraylist) return NULL; } diff --git a/src/hashmap.c b/src/hashmap.c new file mode 100644 index 0000000..07f2f94 --- /dev/null +++ b/src/hashmap.c @@ -0,0 +1,6 @@ +#include +const unsigned acl_w = sizeof (unsigned) * 8; +const unsigned acl_m = 9; +unsigned hash(unsigned K) { + return (149695736*K) >> (acl_w-acl_m); +}