SVF
|
Go to the source code of this file.
Classes | |
struct | st_table_entry |
struct | st_table |
struct | st_generator |
Macros | |
#define | ST_DEFAULT_MAX_DENSITY 5 |
#define | ST_DEFAULT_INIT_TABLE_SIZE 11 |
#define | ST_DEFAULT_GROW_FACTOR 2.0 |
#define | ST_DEFAULT_REORDER_FLAG 0 |
#define | ST_OUT_OF_MEM -10000 |
#define | st_is_member(table, key) st_lookup(table,key,(char **) 0) |
#define | st_count(table) ((table)->num_entries) |
#define | st_foreach_item(table, gen, key, value) for(gen=st_init_gen(table); st_gen(gen,key,value) || (st_free_gen(gen),0);) |
#define | st_foreach_item_int(table, gen, key, value) for(gen=st_init_gen(table); st_gen_int(gen,key,value) || (st_free_gen(gen),0);) |
Typedefs | |
typedef struct st_table_entry | st_table_entry |
typedef struct st_table | st_table |
typedef struct st_generator | st_generator |
typedef enum st_retval(* | ST_PFSR) (char *, char *, char *) |
typedef int(* | ST_PFICPCP) (const char *, const char *) |
typedef int(* | ST_PFICPI) (char *, int) |
Enumerations | |
enum | st_retval { ST_CONTINUE, ST_STOP, ST_DELETE } |
Functions | |
st_table * | st_init_table_with_params (ST_PFICPCP, ST_PFICPI, int, int, double, int) |
st_table * | st_init_table (ST_PFICPCP, ST_PFICPI) |
void | st_free_table (st_table *) |
int | st_lookup (st_table *, void *, void *) |
int | st_lookup_int (st_table *, void *, int *) |
int | st_insert (st_table *, void *, void *) |
int | st_add_direct (st_table *, void *, void *) |
int | st_find_or_add (st_table *, void *, void *) |
int | st_find (st_table *, void *, void *) |
st_table * | st_copy (st_table *) |
int | st_delete (st_table *, void *, void *) |
int | st_delete_int (st_table *, void *, int *) |
int | st_foreach (st_table *, ST_PFSR, char *) |
int | st_strhash (char *, int) |
int | st_numhash (char *, int) |
int | st_ptrhash (char *, int) |
int | st_numcmp (const char *, const char *) |
int | st_ptrcmp (const char *, const char *) |
st_generator * | st_init_gen (st_table *) |
int | st_gen (st_generator *, void *, void *) |
int | st_gen_int (st_generator *, void *, int *) |
void | st_free_gen (st_generator *) |
#define st_count | ( | table | ) | ((table)->num_entries) |
#define ST_DEFAULT_MAX_DENSITY 5 |
CHeaderFile*****************************************************************
FileName [st.h]
PackageName [st]
Synopsis [Symbol table package.]
Description [The st library provides functions to create, maintain, and query symbol tables.]
SeeAlso []
Author []
Copyright []
Revision [
]
#define st_foreach_item | ( | table, | |
gen, | |||
key, | |||
value | |||
) | for(gen=st_init_gen(table); st_gen(gen,key,value) || (st_free_gen(gen),0);) |
Macro***********************************************************************
Synopsis [Iteration macro.]
Description [An iteration macro which loops over all the entries in `table', setting `key' to point to the key and `value' to the associated value (if it is not nil). `gen' is a generator variable used internally. Sample usage:
char *key, *value;
st_generator *gen;
st_foreach_item(table, gen, &key, &value) {
process_item(value);
}
]
SideEffects [None]
SeeAlso [st_foreach_item_int st_foreach]
#define st_foreach_item_int | ( | table, | |
gen, | |||
key, | |||
value | |||
) | for(gen=st_init_gen(table); st_gen_int(gen,key,value) || (st_free_gen(gen),0);) |
Macro***********************************************************************
Synopsis [Iteration macro.]
Description [An iteration macro which loops over all the entries in `table', setting `key' to point to the key and `value' to the associated value (if it is not nil). `value' is assumed to be a pointer to an integer. `gen' is a generator variable used internally. Sample usage:
char *key;
int value;
st_generator *gen;
st_foreach_item_int(table, gen, &key, &value) {
process_item(value);
}
]
SideEffects [None]
SeeAlso [st_foreach_item st_foreach]
#define st_is_member | ( | table, | |
key | |||
) | st_lookup(table,key,(char **) 0) |
typedef struct st_generator st_generator |
typedef struct st_table_entry st_table_entry |
enum st_retval |
int st_add_direct | ( | st_table * | table, |
void * | key, | ||
void * | value | ||
) |
Function********************************************************************
Synopsis [Place 'value' in 'table' under the key 'key'.]
Description [Place 'value' in 'table' under the key 'key'. This is done without checking if 'key' is in 'table' already. This should only be used if you are sure there is not already an entry for 'key', since it is undefined which entry you would later get from st_lookup or st_find_or_add. Returns 1 if successful; ST_OUT_OF_MEM otherwise.]
SideEffects [None]
SeeAlso []
Definition at line 410 of file st.c.
Function********************************************************************
Synopsis [Return a copy of old_table and all its members.]
Description [Return a copy of old_table and all its members. (st_table *) 0 is returned if there was insufficient memory to do the copy.]
SideEffects [None]
SeeAlso []
Definition at line 571 of file st.c.
int st_delete | ( | st_table * | table, |
void * | keyp, | ||
void * | value | ||
) |
Function********************************************************************
Synopsis [Delete the entry with the key pointed to by `keyp'.]
Description [Delete the entry with the key pointed to by `keyp'. If the entry is found, 1 is returned, the variable pointed by `keyp' is set to the actual key and the variable pointed by `value' is set to the corresponding entry. (This allows the freeing of the associated storage.) If the entry is not found, then 0 is returned and nothing is changed.]
SideEffects [None]
SeeAlso [st_delete_int]
Definition at line 634 of file st.c.
int st_delete_int | ( | st_table * | table, |
void * | keyp, | ||
int * | value | ||
) |
Function********************************************************************
Synopsis [Delete the entry with the key pointed to by `keyp'.]
Description [Delete the entry with the key pointed to by `keyp'. `value' must be a pointer to an integer. If the entry is found, 1 is returned, the variable pointed by `keyp' is set to the actual key and the variable pointed by `value' is set to the corresponding entry. (This allows the freeing of the associated storage.) If the entry is not found, then 0 is returned and nothing is changed.]
SideEffects [None]
SeeAlso [st_delete]
Definition at line 675 of file st.c.
int st_find | ( | st_table * | table, |
void * | key, | ||
void * | slot | ||
) |
int st_find_or_add | ( | st_table * | table, |
void * | key, | ||
void * | slot | ||
) |
Function********************************************************************
Synopsis [Lookup `key' in `table'.]
Description [Lookup `key' in `table'. If not found, create an entry. In either case set slot to point to the field in the entry where the value is stored. The value associated with `key' may then be changed by accessing directly through slot. Returns 1 if an entry already existed, 0 if it did not exist and creation was successful; ST_OUT_OF_MEM otherwise. As an example:
char **slot;
char *key;
char *value = (char *) item_ptr <-- ptr to a malloc'd structure
if (st_find_or_add(table, key, &slot) == 1) {
FREE(*slot); <-- free the old value of the record
}
*slot = value; <-- attach the new value to the record
This replaces the equivelent code:
if (st_lookup(table, key, &ovalue) == 1) {
FREE(ovalue);
}
st_insert(table, key, value);
]
SideEffects [None]
SeeAlso [st_find]
Definition at line 488 of file st.c.
Function********************************************************************
Synopsis [Iterates over the elements of a table.]
Description [For each (key, value) record in `table', st_foreach call func with the arguments
(*func)(key, value, arg)
If func returns ST_CONTINUE, st_foreach continues processing entries. If func returns ST_STOP, st_foreach stops processing and returns immediately. If func returns ST_DELETE, then the entry is deleted from the symbol table and st_foreach continues. In the case of ST_DELETE, it is func's responsibility to free the key and value, if necessary.
The routine returns 1 if all items in the table were generated and 0 if the generation sequence was aborted using ST_STOP. The order in which the records are visited will be seemingly random.]
SideEffects [None]
SeeAlso [st_foreach_item st_foreach_item_int]
void st_free_gen | ( | st_generator * | gen | ) |
Function********************************************************************
Synopsis [Reclaims the resources associated with `gen'.]
Description [After generating all items in a generation sequence, this routine must be called to reclaim the resources associated with `gen'.]
SideEffects [None]
SeeAlso [st_init_gen]
void st_free_table | ( | st_table * | table | ) |
Function********************************************************************
Synopsis [Free a table.]
Description [Any internal storage associated with table is freed. It is the user's responsibility to free any storage associated with the pointers he placed in the table (by perhaps using st_foreach).]
SideEffects [None]
SeeAlso [st_init_table st_init_table_with_params]
Definition at line 252 of file st.c.
int st_gen | ( | st_generator * | gen, |
void * | key_p, | ||
void * | value_p | ||
) |
Function********************************************************************
Synopsis [returns the next (key, value) pair in the generation sequence. ]
Description [Given a generator returned by st_init_gen(), this routine returns the next (key, value) pair in the generation sequence. The pointer `value_p' can be zero which means no value will be returned. When there are no more items in the generation sequence, the routine returns 0.
While using a generation sequence, deleting any (key, value) pair other than the one just generated may cause a fatal error when st_gen() is called later in the sequence and is therefore not recommended.]
SideEffects [None]
SeeAlso [st_gen_int]
Definition at line 908 of file st.c.
int st_gen_int | ( | st_generator * | gen, |
void * | key_p, | ||
int * | value_p | ||
) |
Function********************************************************************
Synopsis [Returns the next (key, value) pair in the generation sequence.]
Description [Given a generator returned by st_init_gen(), this routine returns the next (key, value) pair in the generation sequence. `value_p' must be a pointer to an integer. The pointer `value_p' can be zero which means no value will be returned. When there are no more items in the generation sequence, the routine returns 0.]
SideEffects [None]
SeeAlso [st_gen]
Definition at line 953 of file st.c.
st_generator* st_init_gen | ( | st_table * | table | ) |
Function********************************************************************
Synopsis [Initializes a generator.]
Description [Returns a generator handle which when used with st_gen() will progressively return each (key, value) record in `table'.]
SideEffects [None]
SeeAlso [st_free_gen]
st_table* st_init_table | ( | ST_PFICPCP | compare, |
ST_PFICPI | hash | ||
) |
AutomaticEnd Function********************************************************************
Synopsis [Create and initialize a table.]
Description [Create and initialize a table with the comparison function compare_fn and hash function hash_fn. compare_fn is
int compare_fn(const char *key1, const char *key2)
It returns <,=,> 0 depending on whether key1 <,=,> key2 by some measure.
hash_fn is
int hash_fn(char *key, int modulus)
It returns a integer between 0 and modulus-1 such that if compare_fn(key1,key2) == 0 then hash_fn(key1) == hash_fn(key2).
There are five predefined hash and comparison functions in st. For keys as numbers:
st_numhash(key, modulus) { return (unsigned int) key % modulus; }
st_numcmp(x,y) { return (int) x - (int) y; }
For keys as pointers:
st_ptrhash(key, modulus) { return ((unsigned int) key/4) % modulus }
st_ptrcmp(x,y) { return (int) x - (int) y; }
For keys as strings:
st_strhash(x,y) - a reasonable hashing function for strings
strcmp(x,y) - the standard library function
It is recommended to use these particular functions if they fit your needs, since st will recognize certain of them and run more quickly because of it.]
SideEffects [None]
SeeAlso [st_init_table_with_params st_free_table]
Definition at line 163 of file st.c.
st_table* st_init_table_with_params | ( | ST_PFICPCP | compare, |
ST_PFICPI | hash, | ||
int | size, | ||
int | density, | ||
double | grow_factor, | ||
int | reorder_flag | ||
) |
AutomaticStart
Function********************************************************************
Synopsis [Create a table with given parameters.]
Description [The full blown table initializer. compare and hash are the same as in st_init_table. density is the largest the average number of entries per hash bin there should be before the table is grown. grow_factor is the factor the table is grown by when it becomes too full. size is the initial number of bins to be allocated for the hash table. If reorder_flag is non-zero, then every time an entry is found, it is moved to the top of the chain.
st_init_table(compare, hash) is equivelent to
st_init_table_with_params(compare, hash, ST_DEFAULT_INIT_TABLE_SIZE, ST_DEFAULT_MAX_DENSITY, ST_DEFAULT_GROW_FACTOR, ST_DEFAULT_REORDER_FLAG);
]
SideEffects [None]
SeeAlso [st_init_table st_free_table]
Definition at line 199 of file st.c.
int st_insert | ( | st_table * | table, |
void * | key, | ||
void * | value | ||
) |
Function********************************************************************
Synopsis [Insert value in table under the key 'key'.]
Description [Insert value in table under the key 'key'. Returns 1 if there was an entry already under the key; 0 if there was no entry under the key and insertion was successful; ST_OUT_OF_MEM otherwise. In either of the first two cases the new value is added.]
SideEffects [None]
SeeAlso []
Definition at line 358 of file st.c.
int st_lookup | ( | st_table * | table, |
void * | key, | ||
void * | value | ||
) |
Function********************************************************************
Synopsis [Lookup up `key' in `table'.]
Description [Lookup up `key' in `table'. If an entry is found, 1 is returned and if `value' is not nil, the variable it points to is set to the associated value. If an entry is not found, 0 is returned and the variable pointed by value is unchanged.]
SideEffects [None]
SeeAlso [st_lookup_int]
Definition at line 286 of file st.c.
int st_lookup_int | ( | st_table * | table, |
void * | key, | ||
int * | value | ||
) |
Function********************************************************************
Synopsis [Lookup up `key' in `table'.]
Description [Lookup up `key' in `table'. If an entry is found, 1 is returned and if `value' is not nil, the variable it points to is set to the associated integer value. If an entry is not found, 0 is return and the variable pointed by `value' is unchanged.]
SideEffects [None]
SeeAlso [st_lookup]
Definition at line 322 of file st.c.
int st_numcmp | ( | const char * | x, |
const char * | y | ||
) |
Function********************************************************************
Synopsis [Number comparison function.]
Description [integer number comparison function.]
SideEffects [None]
SeeAlso [st_init_table st_numhash]
int st_numhash | ( | char * | x, |
int | size | ||
) |
int st_ptrcmp | ( | const char * | x, |
const char * | y | ||
) |
Function********************************************************************
Synopsis [Pointer comparison function.]
Description [Pointer comparison function.]
SideEffects [None]
SeeAlso [st_init_table st_ptrhash]
int st_ptrhash | ( | char * | x, |
int | size | ||
) |
int st_strhash | ( | char * | string, |
int | modulus | ||
) |
Function********************************************************************
Synopsis [String hash function.]
Description [String hash function.]
SideEffects [None]
SeeAlso [st_init_table]