mirror of https://github.com/YosysHQ/abc.git
148 lines
4.2 KiB
C
148 lines
4.2 KiB
C
/*
|
|
* Revision Control Information
|
|
*
|
|
* /projects/hsis/CVS/utilities/st/st.h,v
|
|
* serdar
|
|
* 1.1
|
|
* 1993/07/29 01:00:21
|
|
*
|
|
*/
|
|
/* LINTLIBRARY */
|
|
|
|
/* /projects/hsis/CVS/utilities/st/st.h,v 1.1 1993/07/29 01:00:21 serdar Exp */
|
|
|
|
#ifndef ABC__misc__st__stmm_h
|
|
#define ABC__misc__st__stmm_h
|
|
|
|
#include "misc/util/abc_global.h"
|
|
|
|
ABC_NAMESPACE_HEADER_START
|
|
|
|
|
|
/* These are potential duplicates. */
|
|
#ifndef EXTERN
|
|
# ifdef __cplusplus
|
|
# ifdef ABC_NAMESPACE
|
|
# define EXTERN extern
|
|
# else
|
|
# define EXTERN extern "C"
|
|
# endif
|
|
# else
|
|
# define EXTERN extern
|
|
# endif
|
|
#endif
|
|
|
|
#ifndef ARGS
|
|
#define ARGS(protos) protos
|
|
#endif
|
|
|
|
typedef int (*stmm_compare_func_type)(const char*, const char*);
|
|
typedef int (*stmm_hash_func_type)(const char*, int);
|
|
|
|
typedef struct stmm_table_entry stmm_table_entry;
|
|
typedef struct stmm_table stmm_table;
|
|
typedef struct stmm_generator stmm_generator;
|
|
|
|
struct stmm_table_entry
|
|
{
|
|
char *key;
|
|
char *record;
|
|
stmm_table_entry *next;
|
|
};
|
|
|
|
struct stmm_table
|
|
{
|
|
stmm_compare_func_type compare;
|
|
stmm_hash_func_type hash;
|
|
int num_bins;
|
|
int num_entries;
|
|
int max_density;
|
|
int reorder_flag;
|
|
double grow_factor;
|
|
stmm_table_entry **bins;
|
|
// memory manager to improve runtime and prevent memory fragmentation
|
|
// added by alanmi - January 16, 2003
|
|
void * pMemMan;
|
|
};
|
|
|
|
struct stmm_generator
|
|
{
|
|
stmm_table *table;
|
|
stmm_table_entry *entry;
|
|
int index;
|
|
};
|
|
|
|
#define stmm_is_member(table,key) stmm_lookup(table,key,(char **) 0)
|
|
#define stmm_count(table) ((table)->num_entries)
|
|
|
|
enum stmm_retval
|
|
{ STMM_CONTINUE, STMM_STOP, STMM_DELETE };
|
|
|
|
typedef enum stmm_retval (*STMM_PFSR) (char *, char *, char *);
|
|
|
|
EXTERN stmm_table *stmm_init_table_with_params
|
|
ARGS ((stmm_compare_func_type compare, stmm_hash_func_type hash, int size, int density, double grow_factor, int reorder_flag));
|
|
EXTERN stmm_table *stmm_init_table ARGS ((stmm_compare_func_type, stmm_hash_func_type));
|
|
EXTERN void stmm_free_table ARGS ((stmm_table *));
|
|
EXTERN int stmm_lookup ARGS ((stmm_table *, char *, char **));
|
|
EXTERN int stmm_lookup_int ARGS ((stmm_table *, char *, int *));
|
|
EXTERN int stmm_insert ARGS ((stmm_table *, char *, char *));
|
|
EXTERN int stmm_add_direct ARGS ((stmm_table *, char *, char *));
|
|
EXTERN int stmm_find_or_add ARGS ((stmm_table *, char *, char ***));
|
|
EXTERN int stmm_find ARGS ((stmm_table *, char *, char ***));
|
|
EXTERN stmm_table *stmm_copy ARGS ((stmm_table *));
|
|
EXTERN int stmm_delete ARGS ((stmm_table *, char **, char **));
|
|
EXTERN int stmm_delete_int ARGS ((stmm_table *, long *, char **));
|
|
EXTERN int stmm_foreach ARGS ((stmm_table *, STMM_PFSR, char *));
|
|
EXTERN int stmm_strhash ARGS ((const char *, int));
|
|
EXTERN int stmm_numhash ARGS ((const char *, int));
|
|
EXTERN int stmm_ptrhash ARGS ((const char *, int));
|
|
EXTERN int stmm_numcmp ARGS ((const char *, const char *));
|
|
EXTERN int stmm_ptrcmp ARGS ((const char *, const char *));
|
|
EXTERN stmm_generator *stmm_init_gen ARGS ((stmm_table *));
|
|
EXTERN int stmm_gen ARGS ((stmm_generator *, char **, char **));
|
|
EXTERN int stmm_gen_int ARGS ((stmm_generator *, char **, long *));
|
|
EXTERN void stmm_free_gen ARGS ((stmm_generator *));
|
|
// additional functions
|
|
EXTERN void stmm_clean ARGS ((stmm_table *));
|
|
|
|
|
|
|
|
#define STMM_DEFAULT_MAX_DENSITY 5
|
|
#define STMM_DEFAULT_INIT_TABLE_SIZE 11
|
|
#define STMM_DEFAULT_GROW_FACTOR 2.0
|
|
#define STMM_DEFAULT_REORDER_FLAG 0
|
|
|
|
// added by Zhihong: no need for memory allocation
|
|
#define stmm_foreach_item2(tb, /* stmm_generator */gen, key, value) \
|
|
for(gen.table=(tb), gen.entry=NULL, gen.index=0; \
|
|
stmm_gen(&(gen),key,value);)
|
|
|
|
#define stmm_foreach_item(table, gen, key, value) \
|
|
for(gen=stmm_init_gen(table); stmm_gen(gen,key,value) || (stmm_free_gen(gen),0);)
|
|
|
|
#define stmm_foreach_item_int(table, gen, key, value) \
|
|
for(gen=stmm_init_gen(table); stmm_gen_int(gen,key,value) || (stmm_free_gen(gen),0);)
|
|
|
|
#define STMM_OUT_OF_MEM -10000
|
|
|
|
/*
|
|
|
|
// consider adding these other other similar definitions
|
|
#define st__table stmm_table
|
|
#define st__insert stmm_insert
|
|
#define st__delete stmm_delete
|
|
#define st__lookup stmm_lookup
|
|
#define st__init_table stmm_init_table
|
|
#define st__free_table stmm_free_table
|
|
|
|
*/
|
|
|
|
|
|
|
|
ABC_NAMESPACE_HEADER_END
|
|
|
|
|
|
|
|
#endif /* STMM_INCLUDED */
|