
/*
 * HASH.C
 * (c) 1992 J.Harper
 *
 * open hashing module
 */

#include "hash.h"
#include <string.h>

static UBYTE hash(STRPTR);

VOID
inserthash(HASHNODE **hashTab, HASHNODE *node)
{
    HASHNODE *lastchain;
    UBYTE index = hash(node->h_Name);
    lastchain = hashTab[index];
    hashTab[index] = node;
    node->h_Next = lastchain;
    node->h_Prev = NULL;
    if(lastchain)
	lastchain->h_Prev = node;
}

VOID
removehash(HASHNODE **hashTab, HASHNODE *node)
{
    HASHNODE *next = node->h_Next;
    HASHNODE *prev = node->h_Prev;
    if(!prev)
	hashTab[hash(node->h_Name)] = next;
    else
	prev->h_Next = next;
    if(next)
	next->h_Prev = prev;
}

HASHNODE *
findhash(HASHNODE **hashTab, STRPTR name)
{
    HASHNODE *node;
    for(node = hashTab[hash(name)]; node; node = node->h_Next)
    {
	if(!(stricmp(name, node->h_Name)))
	    break;
    }
    return(node);
}

UBYTE
hash(STRPTR name)
{
    UBYTE total = 0;
    UBYTE c;
    while(c = *name++)
	total += c;
    return(total);
}

