/* Symbol table support
Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005
James Bowman
This file is part of gputils.
gputils is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2, or (at your option)
any later version.
gputils is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with gputils; see the file COPYING. If not, write to
the Free Software Foundation, 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA. */
#ifndef __GPSYMBOL_H__
#define __GPSYMBOL_H__
#define HASH_SIZE 173 /* Too small and we get collisions. Too big
* and we use up memory and run slow.. */
struct symbol {
char *name;
void *annotation;
struct symbol *next;
};
struct symbol_table {
int count;
gp_boolean case_insensitive;
int (*compare)(const char *__s1, const char *__s2);
struct symbol *hash_table[HASH_SIZE];
struct symbol_table *prev;
};
struct symbol_table *push_symbol_table(struct symbol_table *,
gp_boolean case_insensitive);
struct symbol_table *pop_symbol_table(struct symbol_table *);
struct symbol *add_symbol(struct symbol_table *, char *name);
int remove_symbol(struct symbol_table *table, char *name);
struct symbol *get_symbol(struct symbol_table *, char *name);
void annotate_symbol(struct symbol *, void *);
char *get_symbol_name(struct symbol *);
void *get_symbol_annotation(struct symbol *);
int symbol_compare(const void *p0, const void *p1);
#endif
syntax highlighted by Code2HTML, v. 0.9.1