2024-06-28 22:37:51 +00:00
|
|
|
#include <stdlib.h>
|
|
|
|
#include <stdbool.h>
|
|
|
|
|
2024-08-16 19:08:58 +00:00
|
|
|
#ifndef HASHTABLE_H
|
|
|
|
#define HASHTABLE_H
|
|
|
|
|
2024-06-28 22:37:51 +00:00
|
|
|
typedef struct {
|
|
|
|
bool exists;
|
|
|
|
size_t sizet;
|
|
|
|
} size_t_optional;
|
|
|
|
|
|
|
|
typedef struct {
|
2024-08-16 19:08:58 +00:00
|
|
|
size_t size;
|
2024-06-28 22:37:51 +00:00
|
|
|
char* name;
|
|
|
|
void* data;
|
2024-08-16 19:27:19 +00:00
|
|
|
} HashTable_item;
|
2024-06-28 22:37:51 +00:00
|
|
|
|
|
|
|
typedef struct {
|
|
|
|
size_t capacity;
|
|
|
|
size_t filled;
|
2024-08-16 19:27:19 +00:00
|
|
|
HashTable_item* items;
|
|
|
|
} HashTable;
|
2024-06-28 22:37:51 +00:00
|
|
|
|
2024-08-16 19:27:19 +00:00
|
|
|
bool hashtable_recreate(HashTable* table);
|
2024-07-28 20:22:58 +00:00
|
|
|
|
2024-08-16 19:27:19 +00:00
|
|
|
HashTable* hashtable_create(void);
|
2024-06-28 22:37:51 +00:00
|
|
|
|
2024-08-16 19:27:19 +00:00
|
|
|
void hashtable_destroy(HashTable*);
|
2024-06-28 22:37:51 +00:00
|
|
|
|
2024-08-16 19:27:19 +00:00
|
|
|
size_t_optional hashtable_key(HashTable*, char*, size_t);
|
2024-08-16 19:08:58 +00:00
|
|
|
|
2024-08-16 19:27:19 +00:00
|
|
|
size_t_optional hashtable_insert(HashTable*, char*, size_t);
|
2024-06-28 22:37:51 +00:00
|
|
|
|
2024-08-16 19:27:19 +00:00
|
|
|
void* hashtable_get(HashTable* table, char* name, size_t);
|
2024-06-28 22:37:51 +00:00
|
|
|
|
2024-08-16 19:27:19 +00:00
|
|
|
void hashtable_set(HashTable* table, char* name, size_t, void* data);
|
2024-06-28 22:37:51 +00:00
|
|
|
|
2024-08-16 19:27:19 +00:00
|
|
|
bool hashtable_delete(HashTable*, char*, size_t);
|
2024-07-28 19:57:08 +00:00
|
|
|
|
2024-08-16 19:27:19 +00:00
|
|
|
void hashtable_forall(HashTable*, void (*)(char*, size_t, void*, void*), void*);
|
2024-07-28 19:57:08 +00:00
|
|
|
|
2024-08-16 19:08:58 +00:00
|
|
|
#endif
|