00001
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022 #ifndef __HASHLIB_H
00023 #define __HASHLIB_H
00024
00025 typedef u_int32_t ub4;
00026 typedef u_char ub1;
00031 #define CF_HASH_SIZE 9
00032
00038 #define CF_HASH_MAX_DOUBLES 5
00039
00043 typedef void (*t_cf_hash_cleanup)(void *);
00044
00048 typedef struct s_cf_hashentry {
00049 unsigned char *key;
00050 size_t keylen;
00051 int stat;
00053 void *data;
00055 ub4 hashval;
00061 struct s_cf_hashentry *next;
00062
00067 struct s_cf_hashentry *prev;
00068 } t_cf_hash_entry;
00069
00074 typedef struct s_cf_hash {
00081 ub4 tablesize;
00082
00087 t_cf_hash_cleanup destroy;
00088
00093 t_cf_hash_entry **table;
00094 } t_cf_hash;
00095
00099 #define hashsize(n) ((ub4)1<<(n))
00100
00104 #define hashmask(n) (hashsize(n)-1)
00105
00113 ub4 lookup(register ub1 *k, register ub4 length, register ub4 level);
00114
00126 t_cf_hash *cf_hash_new(t_cf_hash_cleanup cl);
00127
00141 int cf_hash_set(t_cf_hash *hsh,unsigned char *key,size_t keylen,void *data,size_t datalen);
00142
00158 int cf_hash_set_static(t_cf_hash *hsh,unsigned char *key,size_t keylen,void *data);
00159
00168 void *cf_hash_get(t_cf_hash *hsh,unsigned char *key,size_t keylen);
00169
00177 int cf_hash_entry_delete(t_cf_hash *hsh,unsigned char *key,size_t keylen);
00178
00185 void cf_hash_destroy(t_cf_hash *hsh);
00186
00187 #endif