--- ray/src/common/lookup.h 1997/09/17 14:46:48 2.3 +++ ray/src/common/lookup.h 1998/09/02 18:42:11 2.5 @@ -1,25 +1,25 @@ -/* Copyright (c) 1994 Regents of the University of California */ +/* Copyright (c) 1998 Silicon Graphics, Inc. */ -/* SCCSid "$SunId$ LBL" */ +/* SCCSid "$SunId$ SGI" */ /* * Header file for general associative table lookup routines */ typedef struct { - char *key; /* key name */ - long hval; /* key hash value (for efficiency) */ - char *data; /* pointer to client data */ + char *key; /* key name */ + unsigned long hval; /* key hash value (for efficiency) */ + char *data; /* pointer to client data */ } LUENT; typedef struct { - long (*hashf)(); /* key hash function */ - int (*keycmp)(); /* key comparison function */ - void (*freek)(); /* free a key */ - void (*freed)(); /* free the data */ - int tsiz; /* current table size */ - LUENT *tabl; /* table, if allocated */ - int ndel; /* number of deleted entries */ + unsigned long (*hashf)(); /* key hash function */ + int (*keycmp)(); /* key comparison function */ + void (*freek)(); /* free a key */ + void (*freed)(); /* free the data */ + int tsiz; /* current table size */ + LUENT *tabl; /* table, if allocated */ + int ndel; /* number of deleted entries */ } LUTAB; #undef strcmp @@ -60,6 +60,12 @@ typedef struct { * It is therefore an error to reuse or do anything with the key * field after calling lu_delete. * + * The lu_doall routine loops through every filled table entry, calling + * the given function once on each entry. If a NULL pointer is passed + * for this function, then lu_doall simply returns the total number of + * active entries. Otherwise, it returns the sum of all the function + * evaluations. + * * The lu_done routine calls the given free function once for each * assigned table entry (i.e. each entry with an assigned key value). * The user must define these routines to free the key and the data @@ -70,7 +76,8 @@ typedef struct { extern int lu_init(); extern LUENT *lu_find(); extern void lu_delete(); +extern int lu_doall(); extern void lu_done(); -extern long lu_shash(); +extern unsigned long lu_shash(); extern int strcmp();