|
|
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.