Submitted-By: Esmond Pitt <ejp@ausmelb.oz.AU>
Archive-name: dynamic-hash
- ** Dynamic hashing, after CACM April 1988 pp 446-457, by Per-Ake Larson.
- ** Coded into C, with minor code improvements, and with hsearch(3) interface,
- ** by ejp@ausmelb.oz, Jul 26, 1988: 13:16;
+ * Dynamic hashing, after CACM April 1988 pp 446-457, by Per-Ake Larson.
+ * Coded into C, with minor code improvements, and with hsearch(3) interface,
+ * by ejp@ausmelb.oz, Jul 26, 1988: 13:16;
TODO: Fix Esmond's ugly MixedCapsIdentifiers ;->
*/
# include <config.h>
#endif
+#ifdef USE_GCC_INLINE
+#define INLINE inline
+#else
+#define INLINE
+#endif
+
+/* bcopy is not ISO C *
+#define bcopy(X, Y, Z) memcpy((Y), (X), (Z))
+*/
+
#ifdef PSET
# define SET pset
# define PMANGLE(pre) pre##_pset
table->naccess, table->ncollision, table->nkey, table->ndups, table->max_chain_len, nfree);
}
-static inline void
+static INLINE void
stat_chain_len (SET *table, int chain_len)
{
table->ncollision += chain_len;
const char *MANGLEP(tag);
-void
+static void
MANGLEP(describe) (SET *table)
{
int i, j, collide;
}
-static inline int
+static INLINE int
iter_step (SET *table)
{
if (++table->iter_j >= SEGMENT_SIZE) {
}
-static inline unsigned
+static INLINE unsigned
Hash (SET *table, unsigned h)
{
unsigned address;
}
-static inline int
+static INLINE int
loaded (SET *table)
{
return ( ++table->nkey
q->entry.dptr = (void *)key;
#else
obstack_blank (&table->obst, offsetof (Element, entry.dptr));
- obstack_grow (&table->obst, key, size);
+ if (action == _set_hinsert0)
+ obstack_grow0 (&table->obst, key, size);
+ else
+ obstack_grow (&table->obst, key, size);
q = obstack_finish (&table->obst);
q->entry.size = size;
#endif
}
if (!q) return NULL;
- if (action == MANGLE(_,_hinsert)) return &q->entry;
+#ifdef PSET
+ if (action == _pset_hinsert) return &q->entry;
+#else
+ if (action == _set_hinsert || action == _set_hinsert0) return &q->entry;
+#endif
return q->entry.dptr;
}