home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 January / usenetsourcesnewsgroupsinfomagicjanuary1994.iso / sources / misc / volume6 / lookup.c++ / lookup.c next >
Encoding:
C/C++ Source or Header  |  1989-03-04  |  652 b   |  36 lines

  1. #include <stream.h>
  2. #include <string.h>
  3. #include "lookup.h"
  4.  
  5. proc lookup::operator[](const char *str)
  6.   {
  7.   int n;
  8.   entry
  9.     *upper = table + max - 1,
  10.     *lower = table,
  11.     *mid = lower + (upper-lower)/2;
  12.  
  13.  for(n=1; n && upper - lower > 1; )
  14.     {
  15.     n = strcmp(str, mid->name);
  16.     if(n == 0)
  17.       upper = lower = mid;
  18.     else
  19.       {
  20.       if(n < 0) upper = mid;
  21.       else      lower = mid;
  22.       mid = lower + (upper - lower)/2;
  23.       }
  24.     }
  25.  
  26.   if(n < 0) n = strcmp(str, mid->name);
  27.   else if(n > 0)
  28.     {
  29.     mid = upper;
  30.     n = strcmp(str, mid->name);
  31.     }
  32.  
  33.   if(n) return dflt;   // not in table
  34.   else  return mid->f; // found it
  35.   }
  36.