Hanstable  1.0.0
Simple hash table implementation in C
hanstable.h
Go to the documentation of this file.
1 // Hanstable
2 // Copyright (c) 2014 - 2015 Luc Everse
3 // MIT License
4 
10 #ifndef _HANSTABLE_H
11 #define _HANSTABLE_H
12 
13 #include <stdlib.h>
14 #include <stdint.h>
15 #include <limits.h>
16 
17 #if defined HT_HENTAI
18  #warning "What the hell."
19  #define ht_createHentaible(numEntries) ht_createHashtable(numEntries)
20  #define ht_createHentaibleEntry ht_createHashtableEntry
21  #define ht_addHentaibleEntry(hentaible, key, entry) \
22  ht_addHashtableEntry(hentaible, key, entry)
23  #define ht_removeHentaibleEntry(hentaible, key) \
24  ht_removeHashtableEntry(hentaible, key)
25  #define ht_getHentaibleEntry(hentaible, key) \
26  ht_getHashtableEntry(hentaible, key)
27  #define ht_destroyHentaible(hentaible) ht_destroyHashtable(hentaible)
28  #define ht_destroyHentaibleEntry(entry) ht_destroyHashtableEntry(entry)
29  #define ht_resizeHentaible(hentaible) ht_resizeHashtable(hentaible)
30 #endif
31 
35 typedef enum ht_HashtableError {
36  HT_INTERNAL = INT_MIN,
48  HT_OK = 0
51 
55 typedef struct ht_Hashtable {
60  unsigned int numEntries;
62  unsigned int numBuckets;
65  unsigned int initialCapacity;
70 } ht_Hashtable;
71 
75 typedef struct ht_HashtableEntry {
76  uint64_t hash;
78  const char * key;
81  void * content;
87 
93 const char * ht_strerror(int errorCode);
94 
102 
109 ht_Hashtable * ht_createHashtable(size_t initialCapacity);
110 
121 int ht_addHashtableEntry(ht_Hashtable * hashtable, const char * key,
122  ht_HashtableEntry * entry);
123 
133  const char * key);
134 
144  const char * key);
145 
154 void ht_destroyHashtable(ht_Hashtable * hashtable);
155 
161 
167 int ht_resizeHashtable(ht_Hashtable * hashtable);
168 
175 
176 #endif
Definition: hanstable.h:37
const char * key
Definition: hanstable.h:78
int ht_addHashtableEntry(ht_Hashtable *hashtable, const char *key, ht_HashtableEntry *entry)
Definition: hanstable.c:91
struct ht_HashtableEntry ** buckets
Definition: hanstable.h:56
void ht_destroyHashtable(ht_Hashtable *hashtable)
Definition: hanstable.c:266
void ht_destroyHashtableEntry(ht_HashtableEntry *entry)
Definition: hanstable.c:281
struct ht_HashtableEntry ht_HashtableEntry
void * content
Definition: hanstable.h:81
ht_HashtableEntry * ht_removeHashtableEntry(ht_Hashtable *hashtable, const char *key)
Definition: hanstable.c:131
struct ht_Hashtable ht_Hashtable
struct ht_HashtableEntry * next
Definition: hanstable.h:83
Definition: hanstable.h:48
ht_HashtableEntry * ht_getHashtableEntry(ht_Hashtable *hashtable, const char *key)
Definition: hanstable.c:157
Definition: hanstable.h:75
Definition: hanstable.h:40
unsigned int initialCapacity
Definition: hanstable.h:65
Definition: hanstable.h:42
unsigned int numEntries
Definition: hanstable.h:60
Definition: hanstable.h:43
unsigned int numBuckets
Definition: hanstable.h:62
ht_HashtableEntry * ht_createHashtableEntry(void)
Definition: hanstable.c:51
ht_Hashtable * ht_createHashtable(size_t initialCapacity)
Definition: hanstable.c:63
int ht_resizeHashtable(ht_Hashtable *hashtable)
Definition: hanstable.c:175
ht_HashtableError
Definition: hanstable.h:35
Definition: hanstable.h:45
const char * ht_strerror(int errorCode)
Definition: hanstable.c:28
ht_HashtableEntry ** ht_toIteratable(ht_Hashtable *hashtable)
Definition: hanstable.c:243
Definition: hanstable.h:36
Definition: hanstable.h:39
Definition: hanstable.h:55
uint64_t hash
Definition: hanstable.h:76