/* -*-c-*-
*
- * $Id: sym.h,v 1.8 1999/08/02 14:45:48 mdw Exp $
+ * $Id: sym.h,v 1.11 2000/06/17 10:37:39 mdw Exp $
*
* Symbol table management
*
/*----- Revision history --------------------------------------------------*
*
* $Log: sym.h,v $
+ * Revision 1.11 2000/06/17 10:37:39 mdw
+ * Add support for arena management.
+ *
+ * Revision 1.10 1999/12/10 23:42:04 mdw
+ * Change header file guard names.
+ *
+ * Revision 1.9 1999/08/02 16:53:48 mdw
+ * Improve type safety for sym_iter objects.
+ *
* Revision 1.8 1999/08/02 14:45:48 mdw
* Break low-level hashtable code out from sym.
*
*
*/
-#ifndef SYM_H
-#define SYM_H
+#ifndef MLIB_SYM_H
+#define MLIB_SYM_H
#ifdef __cplusplus
extern "C" {
#include <stddef.h>
-#ifndef BITS_H
+#ifndef MLIB_BITS_H
# include "bits.h"
#endif
-#ifndef HASH_H
+#ifndef MLIB_HASH_H
# include "hash.h"
#endif
+#ifndef MLIB_SUB_H
+# include "sub.h"
+#endif
+
/*----- Type definitions --------------------------------------------------*/
/* --- Symbol table --- *
typedef struct sym_table {
hash_table t;
+ subarena *s;
size_t load;
} sym_table;
/* --- An iterator block --- */
-typedef hash_iter sym_iter;
+typedef struct { hash_iter i; } sym_iter;
/*----- External functions ------------------------------------------------*/
/* --- @sym_remove@ --- *
*
- * Arguments: @sym_table *i@ = pointer to a symbol table object
+ * Arguments: @sym_table *t@ = pointer to a symbol table object
* @void *b@ = pointer to symbol table entry
*
* Returns: ---
* iterate through a symbol table.
*/
-#define SYM_MKITER(i, t) HASH_MKITER((i), &(t)->t)
+#define SYM_MKITER(i_, t_) HASH_MKITER(&(i_)->i, &(t_)->t)
extern void sym_mkiter(sym_iter */*i*/, sym_table */*t*/);
* returned in any particular order.
*/
-#define SYM_NEXT(i, p) do { \
+#define SYM_NEXT(i_, p) do { \
hash_base *_q; \
- HASH_NEXT((i), _q); \
+ HASH_NEXT(&(i_)->i, _q); \
(p) = (void *)_q; \
} while (0)