#ifndef __STRING_CACHE_H__
#define __STRING_CACHE_H__

/*
 * Copyright (c) 2001 Vladimir Dergachev (volodya@users.sourceforge.net)
 *
 *    This source code is free software; you can redistribute it
 *    and/or modify it in source code form under the terms of the GNU
 *    General Public License as published by the Free Software
 *    Foundation; either version 2 of the License, or (at your option)
 *    any later version.
 *
 *    This program 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 this program; if not, write to the Free Software
 *    Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
 */


struct STRING_CACHE{
	long size;
	long string_hash_size;
	long free;
	long mod;
	long mul;
	char **string;
	void **data;
	long *string_hash;
	long *next_string;
};

struct STRING_CACHE_LIST{
	STRING_CACHE *local_param_table_sc;
	STRING_CACHE *local_symbol_table_sc;
	STRING_CACHE *function_local_symbol_table_sc;

	struct ast_node_t **local_symbol_table;
	struct ast_node_t **function_local_symbol_table;
	int num_local_symbol_table;
	int function_num_local_symbol_table;

	char *instance_name_prefix;
};

/* creates the hash where it is indexed by a string and the void ** holds the data */
STRING_CACHE *sc_new_string_cache(void);
/* returns an index of the spot where string is */
long sc_lookup_string(STRING_CACHE *sc, const char * string);
/* adds an element into the cache and returns and id...check with cache_name->data[i] == NULL to see if already added */
long sc_add_string(STRING_CACHE *sc, const char *string);
int sc_valid_id(STRING_CACHE *sc, long string_id);
void * sc_do_alloc(long, long);
bool sc_remove_string(STRING_CACHE * sc, const char *string);

/* free the cache */
STRING_CACHE * sc_free_string_cache(STRING_CACHE *sc);

#endif
