Main Page | Modules | Data Structures | Directories | File List | Data Fields | Globals | Related Pages

db.h

Go to the documentation of this file.
00001 
00013 // $Id: db.h 179 2006-02-03 10:41:40Z MagicalTux $
00014 #ifndef OA_DB_H
00015 #define OA_DB_H
00016 
00017 #include <stdarg.h>
00018 #include <config.h>
00019 
00023 #define HASH_SIZE (256 + 27)
00024 
00025 /* WTF??? */
00026 #define RED 0
00027 #define BLACK 1
00028 
00032 struct dbn {
00033         struct dbn *parent;     
00034         struct dbn *left;       
00035         struct dbn *right;      
00036         int color;              
00037         void *key;              
00038         void *data;             
00039         int deleted;            
00040 };
00041 
00045 struct dbt {
00046         int (*cmp)(struct dbt*, void*, void*);  
00047         uintptr_t (*hash)(struct dbt*, void*);  
00048         // which 1 - key,   2 - data,  3 - both
00049         void (*release)(struct dbn*, int which);
00050         int maxlen;                             
00051         struct dbn *ht[HASH_SIZE];              
00052         int item_count;                         
00053         const char* alloc_file;                 
00054         int alloc_line;                         
00055         struct db_free {
00056                 struct dbn *z;                  
00057                 struct dbn **root;              
00058         } *free_list;                           
00059         int free_count;                         
00060         int free_max;                           
00061         int free_lock;                          
00062 };
00063 
00064 #define strdb_search(t,k)   db_search((t), (void*)(k))
00065 #define strdb_insert(t,k,d) db_insert((t), (void*)(k), (void*)(d))
00066 #define strdb_erase(t,k)    db_erase((t), (void*)(k))
00067 #define strdb_foreach       db_foreach
00068 #define strdb_final         db_final
00069 #define numdb_search(t,k)   db_search((t), (void*)(k))
00070 #define numdb_insert(t,k,d) db_insert((t), (void*)(k), (void*)(d))
00071 #define numdb_erase(t,k)    db_erase((t), (void*)(k))
00072 #define numdb_foreach       db_foreach
00073 #define numdb_final         db_final
00074 
00075 #define strdb_init(a)       strdb_init_(a,__FILE__, __LINE__)
00076 #define numdb_init()        numdb_init_(__FILE__, __LINE__)
00077 
00078 struct dbt* strdb_init_(int maxlen, const char *file, int line);
00079 struct dbt* numdb_init_(const char *file, int line);
00080 
00081 void* db_search(struct dbt *table, void* key);
00082 struct dbn* db_insert(struct dbt *table, void* key, void* data);
00083 void* db_erase(struct dbt *table, void* key);
00084 void db_foreach(struct dbt*, int(*)(void*, void*, va_list), ...);
00085 void db_final(struct dbt*, int(*)(void*, void*, va_list), ...);
00086 
00089 #endif // OA_DB_H_
00090 

Generated on Fri Apr 28 10:20:04 2006 for OpenAthena by  doxygen 1.4.4