1 /* generic_hash.c: Generic hash function that hashes on a maximum of three keys
2 * $Id: generic_hash.c,v 1.5 2002/08/21 22:08:01 ningning Exp $
5 * $Log: generic_hash.c,v $
6 * Revision 1.5 2002/08/21 22:08:01 ningning
7 * *** empty log message ***
12 #include "generic_hash.h"
14 /* create an entry for a block */
15 void generic_insert(char * key1, unsigned int key1_size, unsigned int key3, struct generic_entry **htable, int hsize)
18 struct generic_entry *p,*q;
20 unsigned int * tmp =(unsigned int *)key1;
23 for (i=0; i<(key1_size/4); i++)
27 //printf ("generic_insert index %d key %s\n", index, key1);
29 p = q = htable[index];
31 if ((!memcmp(p->key1, key1, key1_size))
39 p = (struct generic_entry *)malloc(sizeof(struct generic_entry));
40 memcpy(p->key1, key1, key1_size);
51 void generic_delete(char * key1, unsigned int key1_size, unsigned int key3, struct generic_entry **htable, int hsize)
55 struct generic_entry *p,*q;
57 unsigned int * tmp =(unsigned int *)key1;
60 for (i=0; i<(key1_size/4); i++)
64 p = q = htable[index];
67 if ((!memcmp(p->key1, key1, key1_size))
77 htable[index] = p->next;
88 struct generic_entry *generic_lookup(char * key1, unsigned int key1_size, unsigned int key3, struct generic_entry **htable, int hsize)
91 struct generic_entry *p;
93 unsigned int * tmp =(unsigned int *)key1;
96 for (i=0; i<(key1_size/4); i++)
100 //printf ("generic_lookup index %d key %s\n", index, key1);
105 if (!memcmp(p->key1, key1, key1_size))
115 struct generic_entry *generic_lookup1(unsigned int key1, unsigned int key2, unsigned int key3, struct generic_entry **htable, int hsize)
118 struct generic_entry *p;
120 index = ((unsigned int)key1)%hsize;
131 struct generic_entry *generic_lookup2(unsigned int key1, unsigned int key2, unsigned int key3, struct generic_entry **htable, int hsize)
134 struct generic_entry *p;
136 index = (key1 + key2)%hsize;
149 void generic_display(struct generic_entry **htable, int hsize, int numkeys)
152 struct generic_entry *p;
155 for (i=0;i<hsize;i++) {
158 printf ("htable[%d]", i);
161 printf("%d, ", p->key1);
163 printf("(%d,%x), ", p->key1,p->key2);
165 printf("(%d,%d,%d), ", p->key1,p->key2,p->key3);
172 printf("\ncounter was %d\n",counter);
175 /* create an entry for a block */
176 void generic_long_insert4(unsigned int key1, unsigned int key2, unsigned int key3, unsigned int key4, unsigned int key5, unsigned int key6, struct generic_long_entry **htable, int hsize)
179 struct generic_long_entry *p,*q;
181 index = (key1 + key2 + key3 + key4)%hsize;
182 p = q = htable[index];
189 && (p->key6==key6)) {
196 p = (struct generic_long_entry *)malloc(sizeof(struct generic_long_entry));
212 struct generic_entry *generic_long_lookup4(unsigned int key1, unsigned int key2, unsigned int key3, unsigned int key4, struct generic_long_entry **htable, int hsize)
215 struct generic_long_entry *p;
217 index = (key1 + key2 + key3 + key4 )%hsize;