blob: 833daeee355f13689d0e29f8c41f0ba5a0fb2f3b (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
|
#ifndef HASH_TABLE_H
#define HASH_TABLE_H
#include "./ast.h"
typedef struct {
char *key;
ast_t *value;
} pair_t;
typedef struct SL_NODE_STRUCT {
pair_t *value;
struct SL_NODE_STRUCT *next;
} sl_node_t;
typedef struct {
sl_node_t *head;
int size;
} sl_list_t;
typedef struct {
int size;
sl_list_t **buckets;
} hash_table_t;
pair_t *init_pair(char *key, ast_t *value);
sl_node_t *init_sl_node(char *key, ast_t *value);
sl_list_t *init_sl_list();
void sl_list_add(sl_list_t *l, char *key, ast_t *value);
ast_t *sl_list_get(sl_list_t *l, char *key);
bool sl_list_exists(sl_list_t *l, char *key);
void sl_list_free(sl_list_t *l);
hash_table_t *init_hash_table(int size);
void hash_table_add(hash_table_t *h, char *key, ast_t *value);
ast_t *hash_table_get(hash_table_t *h, char *key);
bool hash_table_exists(hash_table_t *h, char *key);
unsigned long hash(char *key, int size);
void hash_table_free(hash_table_t *h);
#endif
|