1: #include "../h/rt.h"
   2: 
   3: /*
   4:  * hash - compute hash value of arbitrary object for table and set accessing.
   5:  */
   6: 
   7: hash(d)
   8: struct descrip *d;
   9:    {
  10:    register int i, j;
  11:    register char *s;
  12: 
  13:    if (QUAL(*d)) {
  14:       /*
  15:        * Compute the hash value for the string by summing the value
  16:        *  of all the characters (up to a maximum of 10) plus the length.
  17:        */
  18:       i = 0;
  19:       s = STRLOC(*d);
  20:       j = STRLEN(*d);
  21:       for (j = (j <= 10) ? j : 10 ; j > 0; j--)
  22:          i += *s++ & 0377;
  23:       i += STRLEN(*d) & 0377;
  24:       }
  25:    else {
  26:       switch (TYPE(*d)) {
  27:          /*
  28:           * The hash value for numeric types is the bitstring representation
  29:           *  of the value.
  30:           */
  31:          case T_INTEGER:
  32:             i = INTVAL(*d);
  33:             break;
  34: 
  35: #ifdef LONGS
  36:          case T_LONGINT:
  37:             i = BLKLOC(*d)->longint.intval;
  38:             break;
  39: 
  40: #endif LONGS
  41:          case T_REAL:
  42:             i = BLKLOC(*d)->realblk.realval;
  43:             break;
  44: 
  45:          case T_CSET:
  46:             /*
  47:              * Compute the hash value for a cset by exclusive or-ing the
  48:              *  words in the bit array.
  49:              */
  50:             i = 0;
  51:             for (j = 0; j < CSETSIZE; j++)
  52:                i ^= BLKLOC(*d)->cset.bits[j];
  53:             break;
  54: 
  55:          default:
  56:             /*
  57:              * For other types, just use the type value as the hash
  58:              *  value.  This produces loads of collisions, but that's
  59:              *  why collision insurance is mandatory.
  60:              */
  61:             i = TYPE(*d);
  62:             break;
  63:          }
  64:       }
  65:    /*
  66:     * Return the hash value as a positive number.
  67:     */
  68:    return ((unsigned)i);
  69:    }

Defined functions

hash defined in line 7; never used
Last modified: 1984-11-18
Generated: 2016-12-26
Generated by src2html V0.67
page hit count: 637
Valid CSS Valid XHTML 1.0 Strict