home *** CD-ROM | disk | FTP | other *** search
- #include <stream.h>
- #include <string.h>
- #include "lookup.h"
-
- proc lookup::operator[](const char *str)
- {
- int n;
- entry
- *upper = table + max - 1,
- *lower = table,
- *mid = lower + (upper-lower)/2;
-
- for(n=1; n && upper - lower > 1; )
- {
- n = strcmp(str, mid->name);
- if(n == 0)
- upper = lower = mid;
- else
- {
- if(n < 0) upper = mid;
- else lower = mid;
- mid = lower + (upper - lower)/2;
- }
- }
-
- if(n < 0) n = strcmp(str, mid->name);
- else if(n > 0)
- {
- mid = upper;
- n = strcmp(str, mid->name);
- }
-
- if(n) return dflt; // not in table
- else return mid->f; // found it
- }
-