Update of /cvsroot/pure-data/pd/src In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv20547
Modified Files: Tag: devel_0_38 m_class.c Log Message: larger hash table
Index: m_class.c =================================================================== RCS file: /cvsroot/pure-data/pd/src/m_class.c,v retrieving revision 1.3.4.4 retrieving revision 1.3.4.5 diff -C2 -d -r1.3.4.4 -r1.3.4.5 *** m_class.c 24 Nov 2004 16:29:02 -0000 1.3.4.4 --- m_class.c 2 Jan 2005 14:48:33 -0000 1.3.4.5 *************** *** 502,506 **** --- 502,514 ---- /* ---------------- the symbol table ------------------------ */
+ /* tb: new 16 bit hash table: multiplication hash */ + #define NEWHASH + + #ifndef NEWHASH #define HASHSIZE 1024 + #else + #define HASHSIZE 65536 + #define HASHFACTOR 40503 /* donald knuth: (sqrt(5) - 1)/2*pow(2,16) */ + #endif
/* tb: made dogensym() threadsafe */ *************** *** 513,517 **** t_symbol **sym1, *sym2; ! unsigned int hash1 = 0, hash2 = 0; int length = 0; char *s2 = s; --- 521,529 ---- t_symbol **sym1, *sym2; ! #ifdef NEWHASH ! unsigned short hash1 = 0, hash2 = 0; ! #else ! unsigned int hash1 = 0, hash2 = 0; ! #endif int length = 0; char *s2 = s; *************** *** 523,527 **** s2++; } ! sym1 = symhash + (hash2 & (HASHSIZE-1)); while (sym2 = *sym1) { --- 535,544 ---- s2++; } ! #ifdef NEWHASH ! hash2 = hash2 * HASHFACTOR; ! sym1 = symhash + hash2; ! #else ! sym1 = symhash + (hash2 & (HASHSIZE-1)); ! #endif while (sym2 = *sym1) {