/*
* htab.c - table hashing routines
*/
#include "copyright.h"
#include "config.h"
#include "db.h"
#include "externs.h"
#include "htab.h"
#include "alloc.h"
#include "mudconf.h"
static int nhrbtab_compare(int left, int right, void *arg)
{
return (right - left);
}
void nhashinit(RBTAB * htab, int size)
{
memset(htab, 0, sizeof(RBTAB));
htab->tree = rb_init((void *) nhrbtab_compare, NULL);
htab->last = NULL;
}
void nhashreset(RBTAB * htab)
{
htab->checks = 0;
htab->scans = 0;
htab->hits = 0;
};
/*
* ---------------------------------------------------------------------------
* * hashfind: Look up an entry in a hash table and return a pointer to its
* * hash data.
*/
void *nhashfind(int val, RBTAB * htab)
{
htab->checks++;
return rb_find(htab->tree, (void *) val);
}
/*
* ---------------------------------------------------------------------------
* * hashadd: Add a new entry to a hash table.
*/
int nhashadd(int val, void *hashdata, RBTAB * htab)
{
if(rb_exists(htab->tree, (void *) val))
return (-1);
rb_insert(htab->tree, (void *) val, hashdata);
return 0;
}
/*
* ---------------------------------------------------------------------------
* * hashdelete: Remove an entry from a hash table.
*/
void nhashdelete(int val, RBTAB * htab)
{
rb_delete(htab->tree, (void *) val);
return;
}
/*
* ---------------------------------------------------------------------------
* * hashflush: free all the entries in a hashtable.
*/
void nhashflush(RBTAB * htab, int size)
{
rb_destroy(htab->tree);
htab->tree = rb_init((void *)nhrbtab_compare, NULL);
htab->last = NULL;
}
/*
* ---------------------------------------------------------------------------
* * hashrepl: replace the data part of a hash entry.
*/
int nhashrepl(int val, void *hashdata, RBTAB * htab)
{
struct int_dict_entry *ent;
rb_insert(htab->tree, (void *) val, hashdata);
return 1;
}