|
|
1.1 root 1: /* Compiler interface to hash tables from odi library. */
2: /*
3: $Source: /usr3/lang/benson/work/stripped_cfront/RCS/hash.h,v $ $RCSfile: hash.h,v $
4: $Revision: 1.1 $ $Date: 89/11/20 08:50:36 $
5: $Author: benson $ $Locker: $
6: $State: Exp $
7: */
8:
9: #include <hash.H>
10: #include <string.h>
11:
12: inline int pointer_hasheq (int a, int b)
13: {
14: return a == b;
15: };
16:
17: inline unsigned int pointer_hash_fcn (int x)
18: {
19: unsigned X = (unsigned) x;
20: return ((X << 16) | (X >> 16)) ^ x;
21: }
22:
23:
24: class pointer_hash : public Hash {
25: public:
26: pointer_hash (int sz = 0) : Hash (sz) {
27: key_hash_function = pointer_hash_fcn;
28: key_key_equality_function = pointer_hasheq;
29: }
30:
31: pointer_hash (pointer_hash& h) : Hash (h) {};
32: };
33:
34: inline int string_hasheq (int a, int b)
35: {
36: return !strcmp((char *)a, (char *) b);
37: };
38:
39: static unsigned int string_hash_fcn (int x)
40: {
41: char * str = (char *)x;
42: int l = strlen(str);
43:
44: if(x <= 4) return str[0];
45: else {
46: unsigned int * f4 = (unsigned int *) str;
47: if (l < 8) return ((*f4 << 16) | (*f4 >> 16)) ^ *f4;
48: else {
49: unsigned int * s4 = f4 ++;
50: return ((*f4 << 16) | (*f4 >> 16)) ^ *s4;
51: }
52: }
53: };
54:
55:
56: class string_hash : public Hash {
57: public:
58:
59: string_hash (int sz = 0) : Hash (sz) {
60: key_hash_function = string_hash_fcn;
61: key_key_equality_function = string_hasheq;
62: };
63:
64: string_hash (string_hash& h) : Hash (h) {};
65: };
66:
67:
68: /*
69: $Log: hash.h,v $
70: * Revision 1.1 89/11/20 08:50:36 benson
71: * Initial revision
72: *
73: * Revision 1.1 89/09/26 10:11:51 benson
74: * Initial revision
75: *
76:
77:
78: end_log
79: */
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.