summaryrefslogtreecommitdiff
path: root/src/common/db.h
diff options
context:
space:
mode:
authorDennis Friis <peavey@placid.dk>2008-04-02 15:09:18 +0000
committerDennis Friis <peavey@placid.dk>2008-04-02 15:09:18 +0000
commit97bb21a79949779df76269b087f3bce7ef8179ee (patch)
tree08b3bdee2f3596581dd8d8f051afd37ee648cee7 /src/common/db.h
parentdafdbbe9f1db3e6943003a79a6e23c00da2f2fe1 (diff)
downloadtmwa-97bb21a79949779df76269b087f3bce7ef8179ee.tar.gz
tmwa-97bb21a79949779df76269b087f3bce7ef8179ee.tar.bz2
tmwa-97bb21a79949779df76269b087f3bce7ef8179ee.tar.xz
tmwa-97bb21a79949779df76269b087f3bce7ef8179ee.zip
initial checkin
Diffstat (limited to 'src/common/db.h')
-rw-r--r--src/common/db.h47
1 files changed, 47 insertions, 0 deletions
diff --git a/src/common/db.h b/src/common/db.h
new file mode 100644
index 0000000..ea9acea
--- /dev/null
+++ b/src/common/db.h
@@ -0,0 +1,47 @@
+#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