63 static void es_write_log (
const char *fname,
const char *msg);
64 static int es_symcmp (
const void *p1,
const void *p2);
124 for (chain = tbl->
table, i = tbl->
size; --i >= 0; ++chain)
126 for (bucket = *chain; bucket; bucket =
next)
129 (*free_fn) ((
void *) (bucket + 1));
164 return (
void *) (bucket + 1);
211 while (p && (*tbl->
cmp) (sym, p + 1))
216 return (
void *) (p ? p + 1 :
NULL);
234 for (; last_bucket->
next; last_bucket = last_bucket->
next)
236 if ((tbl->
cmp) (last_bucket + 1, last_bucket->
next + 1) == 0)
238 return (
void *) (last_bucket->
next + 1);
263 BUCKET **outtab, **outp, *sym, **symtab;
274 for (symtab = tbl->
table, i = tbl->
size; --i >= 0; ++symtab)
281 for (sym = *symtab; sym; sym = sym->
next)
283 (*print) (sym + 1, param);
301 for (symtab = tbl->
table, i = tbl->
size; --i >= 0; ++symtab)
303 for (sym = *symtab; sym; sym = sym->
next)
305 if (outp > outtab + tbl->
numsyms)
321 for (outp = outtab, i = tbl->
numsyms; --i >= 0; ++outp)
323 (*print) ((*outp) + 1, param);
359 memset (sym, 0, size +
sizeof (
BUCKET));
360 return (
void *) (sym + 1);
395 memset ((
char *) p, 0, n);
407 p->
hash = hash_function;
408 p->
cmp = cmp_function;
HASH_TAB * es_ht_make_table(unsigned maxsym, HT_HASH_FN hash_function, HT_CMP_FN cmp_function)
int(* HT_CMP_FN)(void *, void *)
void *(* add_symbol)(HASH_TAB *tbl, void *sym)
char * pp_strdup(const char *str)
void *(* find_symbol)(HASH_TAB *tbl, void *sym)
int(* get_symbol_count)(HASH_TAB *tbl)
static int es_symcmp(const void *p1, const void *p2)
int(* print_table)(HASH_TAB *tbl, void(*prnt)(), void *par, int srt)
const char * pp_get_msg(int msg_set, int msg_num)
void *(* next_symbol)(HASH_TAB *tbl, void *last)
static void es_write_log(const char *fname, const char *msg)
void(* HT_FREE_FN)(void *)
void es_ht_free_symbol(void *sym)
struct hash_tab_impl HASH_TAB_IMPL
static void * es_ht_add_symbol(HASH_TAB *table, void *sym)
static void es_ht_free_table(HASH_TAB *table, HT_FREE_FN free_fn)
static void * es_ht_find_symbol(HASH_TAB *table, void *sym)
void(* remove_symbol)(HASH_TAB *tbl, void *sym)
unsigned(* HT_HASH_FN)(void *)
static int es_ht_print_table(HASH_TAB *table, void(*print)(BUCKET *, void *), void *param, int sort)
static void es_ht_remove_symbol(HASH_TAB *table, void *sym)
static void * es_ht_next_symbol(HASH_TAB *tbl, void *last_sym)
#define free_and_init(ptr)
static int es_ht_get_symbol_count(HASH_TAB *table)
static HT_CMP_FN es_User_cmp
void * es_ht_alloc_new_symbol(int size)
void(* free_table)(HASH_TAB *tbl, HT_FREE_FN free)