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 ***
14 #include "generic_hash.h"
16 /* create an entry for a block */
17 void generic_insert(char * key1, unsigned int key1_size, unsigned int key3, struct generic_entry **htable, int hsize)
20 struct generic_entry *p,*q;
22 unsigned int * tmp =(unsigned int *)key1;
25 for (i=0; i<(key1_size/4); i++)
29 //printf ("generic_insert index %d key %s\n", index, key1);
31 p = q = htable[index];
33 if ((!memcmp(p->key1, key1, key1_size))
41 p = (struct generic_entry *)malloc(sizeof(struct generic_entry));
42 memcpy(p->key1, key1, key1_size);
53 void generic_delete(char * key1, unsigned int key1_size, unsigned int key3, struct generic_entry **htable, int hsize)
57 struct generic_entry *p,*q;
59 unsigned int * tmp =(unsigned int *)key1;
62 for (i=0; i<(key1_size/4); i++)
66 p = q = htable[index];
69 if ((!memcmp(p->key1, key1, key1_size))
79 htable[index] = p->next;
90 struct generic_entry *generic_lookup(char * key1, unsigned int key1_size, unsigned int key3, struct generic_entry **htable, int hsize)
93 struct generic_entry *p;
95 unsigned int * tmp =(unsigned int *)key1;
98 for (i=0; i<(key1_size/4); i++)
102 //printf ("generic_lookup index %d key %s\n", index, key1);
107 if (!memcmp(p->key1, key1, key1_size))
117 struct generic_entry *generic_lookup1(unsigned int key1, unsigned int key2, unsigned int key3, struct generic_entry **htable, int hsize)
120 struct generic_entry *p;
122 index = ((unsigned int)key1)%hsize;
133 struct generic_entry *generic_lookup2(unsigned int key1, unsigned int key2, unsigned int key3, struct generic_entry **htable, int hsize)
136 struct generic_entry *p;
138 index = (key1 + key2)%hsize;
151 void generic_display(struct generic_entry **htable, int hsize, int numkeys)
154 struct generic_entry *p;
157 for (i=0;i<hsize;i++) {
160 printf ("htable[%d]", i);
163 printf("%d, ", p->key1);
165 printf("(%d,%x), ", p->key1,p->key2);
167 printf("(%d,%d,%d), ", p->key1,p->key2,p->key3);
174 printf("\ncounter was %d\n",counter);
177 /* create an entry for a block */
178 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)
181 struct generic_long_entry *p,*q;
183 index = (key1 + key2 + key3 + key4)%hsize;
184 p = q = htable[index];
191 && (p->key6==key6)) {
198 p = (struct generic_long_entry *)malloc(sizeof(struct generic_long_entry));
214 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)
217 struct generic_long_entry *p;
219 index = (key1 + key2 + key3 + key4 )%hsize;