aboutsummaryrefslogtreecommitdiff
path: root/advent-of-code/2022/lib/htable.h
blob: 3bde74f3ada2b941243b6d0021131a9882a610e2 (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
#ifndef HTABLE_H_
#define HTABLE_H_

#include <stdbool.h>
#include <stdint.h>

typedef struct {
    void *buf;
    int size;
    int cap;
    int taken;
    void* begin;
    int elemsz;
    uint32_t (*hash)(void*);
    bool (*eq)(void*, void*);
} HTable;

void htable_init(HTable *ht, int elemsz, int cap, uint32_t (*hash)(void*),
                 bool (*eq)(void*, void*));
bool htable_insert(HTable *ht, void* elem);
void htable_del(HTable *ht, void* iter);

// return a iterator
void* htable_find(HTable *ht, void* elem);
void* htable_begin(HTable *ht);
void* htable_next(HTable *ht, void *iter);

#endif