summaryrefslogtreecommitdiff
path: root/src/common/db.h
blob: 8de32d5be1738a9971709d89e40d1ebc61c29a7b (plain) (blame)
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
#ifndef _DB_H_
#define _DB_H_

#include <stdarg.h>

#define HASH_SIZE (256+27)

#define RED 0
#define BLACK 1

struct dbn
{
    struct dbn *parent, *left, *right;
    int  color;
    void *key;
    void *data;
};

struct dbt
{
    int  (*cmp) (struct dbt *, void *, void *);
    unsigned int (*hash) (struct dbt *, void *);
    // which 1 - key,   2 - data,  3 - both
    void (*release) (struct dbn *, int which);
    int  maxlen;
    struct dbn *ht[HASH_SIZE];
};

#define strdb_search(t,k)   db_search((t),(void*)(k))
#define strdb_insert(t,k,d) db_insert((t),(void*)(k),(void*)(d))
#define strdb_erase(t,k)    db_erase ((t),(void*)(k))
#define strdb_foreach       db_foreach
#define strdb_final         db_final
#define numdb_search(t,k)   db_search((t),(void*)(k))
#define numdb_insert(t,k,d) db_insert((t),(void*)(k),(void*)(d))
#define numdb_erase(t,k)    db_erase ((t),(void*)(k))
#define numdb_foreach       db_foreach
#define numdb_final         db_final

struct dbt *strdb_init (int maxlen);
struct dbt *numdb_init (void);
void *db_search (struct dbt *table, void *key);
void *db_search2 (struct dbt *table, const char *key);  // [MouseJstr]
struct dbn *db_insert (struct dbt *table, void *key, void *data);
void *db_erase (struct dbt *table, void *key);
void db_foreach (struct dbt *, int (*)(void *, void *, va_list), ...);
void db_final (struct dbt *, int (*)(void *, void *, va_list), ...);

#endif