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
52
53
|
#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];
int item_count; // vf?
const char* alloc_file; // DB?t@C
int alloc_line; // DB?s
};
#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
#define strdb_init(a) strdb_init_(a,__FILE__,__LINE__)
#define numdb_init() numdb_init_(__FILE__,__LINE__)
struct dbt* strdb_init_(int maxlen,const char *file,int line);
struct dbt* numdb_init_(const char *file,int line);
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
|