#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;
};

/* 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);

void sc_merge_string_cache(STRING_CACHE **source_ref, STRING_CACHE *destination);

#endif
