ABC: A System for Sequential Synthesis and Verification
 
Loading...
Searching...
No Matches
st.h File Reference
Include dependency graph for st.h:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Classes

struct  st__table_entry
 
struct  st__table
 
struct  st__generator
 

Macros

#define st__INCLUDED
 
#define EXTERN   extern
 
#define ARGS(protos)
 
#define st__is_member(table, key)
 
#define st__count(table)
 
#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__foreach_item(table, gen, key, value)
 
#define st__foreach_item_int(table, gen, key, value)
 
#define st__OUT_OF_MEM   -10000
 

Typedefs

typedef int(* st__compare_func_type) (const char *, const char *)
 
typedef int(* st__hash_func_type) (const char *, int)
 
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__PFI) ()
 

Enumerations

enum  st__retval { st__CONTINUE , st__STOP , st__DELETE }
 

Functions

st__tablest__init_table_with_params (st__compare_func_type compare, st__hash_func_type hash, int size, int density, double grow_factor, int reorder_flag)
 
st__tablest__init_table (st__compare_func_type, st__hash_func_type)
 
void st__free_table (st__table *)
 
int st__lookup (st__table *, const char *, char **)
 
int st__lookup_int (st__table *, char *, int *)
 
int st__insert (st__table *, const char *, char *)
 
int st__add_direct (st__table *, char *, char *)
 
int st__find_or_add (st__table *, char *, char ***)
 
int st__find (st__table *, char *, char ***)
 
st__tablest__copy (st__table *)
 
int st__delete (st__table *, const char **, char **)
 
int st__delete_int (st__table *, long *, char **)
 
int st__foreach (st__table *, st__PFSR, char *)
 
int st__strhash (const char *, int)
 
int st__numhash (const char *, int)
 
int st__ptrhash (const char *, int)
 
int st__numcmp (const char *, const char *)
 
int st__ptrcmp (const char *, const char *)
 
st__generatorst__init_gen (st__table *)
 
int st__gen (st__generator *, const char **, char **)
 
int st__gen_int (st__generator *, const char **, long *)
 
void st__free_gen (st__generator *)
 

Macro Definition Documentation

◆ ARGS

#define ARGS ( protos)
Value:
protos

Definition at line 37 of file st.h.

◆ EXTERN

#define EXTERN   extern

Definition at line 32 of file st.h.

◆ st__count

#define st__count ( table)
Value:
((table)->num_entries)

Definition at line 71 of file st.h.

◆ st__DEFAULT_GROW_FACTOR

#define st__DEFAULT_GROW_FACTOR   2.0

Definition at line 104 of file st.h.

◆ st__DEFAULT_INIT_TABLE_SIZE

#define st__DEFAULT_INIT_TABLE_SIZE   11

Definition at line 103 of file st.h.

◆ st__DEFAULT_MAX_DENSITY

#define st__DEFAULT_MAX_DENSITY   5

Definition at line 102 of file st.h.

◆ st__DEFAULT_REORDER_FLAG

#define st__DEFAULT_REORDER_FLAG   0

Definition at line 105 of file st.h.

◆ st__foreach_item

#define st__foreach_item ( table,
gen,
key,
value )
Value:
for(gen= st__init_gen(table); st__gen(gen,key,value) || ( st__free_gen(gen),0);)
ABC_NAMESPACE_IMPL_START typedef signed char value
enum keys key
Definition main.h:25
int st__gen(st__generator *gen, const char **key_p, char **value_p)
Definition st.c:501
void st__free_gen(st__generator *gen)
Definition st.c:555
st__generator * st__init_gen(st__table *table)
Definition st.c:485

Definition at line 107 of file st.h.

107#define st__foreach_item(table, gen, key, value) \
108 for(gen= st__init_gen(table); st__gen(gen,key,value) || ( st__free_gen(gen),0);)

◆ st__foreach_item_int

#define st__foreach_item_int ( table,
gen,
key,
value )
Value:
for(gen= st__init_gen(table); st__gen_int(gen,key,value) || ( st__free_gen(gen),0);)
int st__gen_int(st__generator *gen, const char **key_p, long *value_p)
Definition st.c:528

Definition at line 110 of file st.h.

110#define st__foreach_item_int(table, gen, key, value) \
111 for(gen= st__init_gen(table); st__gen_int(gen,key,value) || ( st__free_gen(gen),0);)

◆ st__INCLUDED

#define st__INCLUDED

Definition at line 16 of file st.h.

◆ st__is_member

#define st__is_member ( table,
key )
Value:
st__lookup(table,key,(char **) 0)
int st__lookup(st__table *table, const char *key, char **value)
Definition st.c:114

Definition at line 70 of file st.h.

◆ st__OUT_OF_MEM

#define st__OUT_OF_MEM   -10000

Definition at line 113 of file st.h.

Typedef Documentation

◆ st__compare_func_type

typedef int(* st__compare_func_type) (const char *, const char *)

Definition at line 41 of file st.h.

◆ st__generator

typedef struct st__generator st__generator

Definition at line 63 of file st.h.

◆ st__hash_func_type

typedef int(* st__hash_func_type) (const char *, int)

Definition at line 42 of file st.h.

◆ st__PFI

typedef int(* st__PFI) ()

Definition at line 76 of file st.h.

◆ st__PFSR

typedef enum st__retval(* st__PFSR) (char *, char *, char *)

Definition at line 63 of file st.h.

◆ st__table

typedef struct st__table st__table

Definition at line 51 of file st.h.

◆ st__table_entry

typedef struct st__table_entry st__table_entry

Definition at line 44 of file st.h.

Enumeration Type Documentation

◆ st__retval

enum st__retval
Enumerator
st__CONTINUE 
st__STOP 
st__DELETE 

Definition at line 73 of file st.h.

@ st__DELETE
Definition st.h:73
@ st__CONTINUE
Definition st.h:73
@ st__STOP
Definition st.h:73

Function Documentation

◆ st__add_direct()

int st__add_direct ( st__table * table,
char * key,
char * value )
extern

Definition at line 205 of file st.c.

206{
207 int hash_val;
208 st__table_entry *newEntry;
209
210 hash_val = do_hash(key, table);
211 if (table->num_entries / table->num_bins >= table->max_density) {
212 if (rehash(table) == st__OUT_OF_MEM) {
213 return st__OUT_OF_MEM;
214 }
215 }
216 hash_val = do_hash(key, table);
217 newEntry = ABC_ALLOC( st__table_entry, 1);
218 if (newEntry == NULL) {
219 return st__OUT_OF_MEM;
220 }
221 newEntry->key = key;
222 newEntry->record = value;
223 newEntry->next = table->bins[hash_val];
224 table->bins[hash_val] = newEntry;
225 table->num_entries++;
226 return 1;
227}
#define ABC_ALLOC(type, num)
Definition abc_global.h:264
#define do_hash(key, table)
Definition st.c:28
#define st__OUT_OF_MEM
Definition st.h:113
Definition st.h:45
char * key
Definition st.h:46
st__table_entry * next
Definition st.h:48
char * record
Definition st.h:47

◆ st__copy()

st__table * st__copy ( st__table * old_table)
extern

Definition at line 330 of file st.c.

331{
332 st__table *newEntry_table;
333 st__table_entry *ptr, *newEntryptr, *next, *newEntry;
334 int i, j, num_bins = old_table->num_bins;
335
336 newEntry_table = ABC_ALLOC( st__table, 1);
337 if (newEntry_table == NULL) {
338 return NULL;
339 }
340
341 *newEntry_table = *old_table;
342 newEntry_table->bins = ABC_ALLOC( st__table_entry *, num_bins);
343 if (newEntry_table->bins == NULL) {
344 ABC_FREE(newEntry_table);
345 return NULL;
346 }
347 for(i = 0; i < num_bins ; i++) {
348 newEntry_table->bins[i] = NULL;
349 ptr = old_table->bins[i];
350 while (ptr != NULL) {
351 newEntry = ABC_ALLOC( st__table_entry, 1);
352 if (newEntry == NULL) {
353 for (j = 0; j <= i; j++) {
354 newEntryptr = newEntry_table->bins[j];
355 while (newEntryptr != NULL) {
356 next = newEntryptr->next;
357 ABC_FREE(newEntryptr);
358 newEntryptr = next;
359 }
360 }
361 ABC_FREE(newEntry_table->bins);
362 ABC_FREE(newEntry_table);
363 return NULL;
364 }
365 *newEntry = *ptr;
366 newEntry->next = newEntry_table->bins[i];
367 newEntry_table->bins[i] = newEntry;
368 ptr = ptr->next;
369 }
370 }
371 return newEntry_table;
372}
#define ABC_FREE(obj)
Definition abc_global.h:267
Definition st.h:52
int num_bins
Definition st.h:55
st__table_entry ** bins
Definition st.h:60

◆ st__delete()

int st__delete ( st__table * table,
const char ** keyp,
char ** value )
extern

Definition at line 375 of file st.c.

376{
377 int hash_val;
378 const char *key = *keyp;
379 st__table_entry *ptr, **last;
380
381 hash_val = do_hash(key, table);
382
383 FIND_ENTRY(table, hash_val, key, ptr ,last);
384
385 if (ptr == NULL) {
386 return 0;
387 }
388
389 *last = ptr->next;
390 if (value != NULL) *value = ptr->record;
391 *keyp = ptr->key;
392 ABC_FREE(ptr);
393 table->num_entries--;
394 return 1;
395}
#define FIND_ENTRY(table, hash_val, key, ptr, last)
Definition st.c:101
Here is the caller graph for this function:

◆ st__delete_int()

int st__delete_int ( st__table * table,
long * keyp,
char ** value )
extern

Definition at line 398 of file st.c.

399{
400 int hash_val;
401 char *key = (char *) *keyp;
402 st__table_entry *ptr, **last;
403
404 hash_val = do_hash(key, table);
405
406 FIND_ENTRY(table, hash_val, key, ptr ,last);
407
408 if (ptr == NULL) {
409 return 0;
410 }
411
412 *last = ptr->next;
413 if (value != NULL) *value = ptr->record;
414 *keyp = (long) ptr->key;
415 ABC_FREE(ptr);
416 table->num_entries--;
417 return 1;
418}

◆ st__find()

int st__find ( st__table * table,
char * key,
char *** slot )
extern

Definition at line 264 of file st.c.

265{
266 int hash_val;
267 st__table_entry *ptr, **last;
268
269 hash_val = do_hash(key, table);
270
271 FIND_ENTRY(table, hash_val, key, ptr, last);
272
273 if (ptr == NULL) {
274 return 0;
275 } else {
276 if (slot != NULL) {
277 *slot = &ptr->record;
278 }
279 return 1;
280 }
281}
Here is the caller graph for this function:

◆ st__find_or_add()

int st__find_or_add ( st__table * table,
char * key,
char *** slot )
extern

Definition at line 230 of file st.c.

231{
232 int hash_val;
233 st__table_entry *newEntry, *ptr, **last;
234
235 hash_val = do_hash(key, table);
236
237 FIND_ENTRY(table, hash_val, key, ptr, last);
238
239 if (ptr == NULL) {
240 if (table->num_entries / table->num_bins >= table->max_density) {
241 if (rehash(table) == st__OUT_OF_MEM) {
242 return st__OUT_OF_MEM;
243 }
244 hash_val = do_hash(key, table);
245 }
246 newEntry = ABC_ALLOC( st__table_entry, 1);
247 if (newEntry == NULL) {
248 return st__OUT_OF_MEM;
249 }
250 newEntry->key = key;
251 newEntry->record = (char *) 0;
252 newEntry->next = table->bins[hash_val];
253 table->bins[hash_val] = newEntry;
254 table->num_entries++;
255 if (slot != NULL) *slot = &newEntry->record;
256 return 0;
257 } else {
258 if (slot != NULL) *slot = &ptr->record;
259 return 1;
260 }
261}
Here is the caller graph for this function:

◆ st__foreach()

int st__foreach ( st__table * ,
st__PFSR ,
char *  )
extern

◆ st__free_gen()

void st__free_gen ( st__generator * gen)
extern

Definition at line 555 of file st.c.

556{
557 ABC_FREE(gen);
558}
Here is the caller graph for this function:

◆ st__free_table()

void st__free_table ( st__table * table)
extern

Definition at line 81 of file st.c.

82{
83 st__table_entry *ptr, *next;
84 int i;
85
86 for(i = 0; i < table->num_bins ; i++) {
87 ptr = table->bins[i];
88 while (ptr != NULL) {
89 next = ptr->next;
90 ABC_FREE(ptr);
91 ptr = next;
92 }
93 }
94 ABC_FREE(table->bins);
95 ABC_FREE(table);
96}
Here is the caller graph for this function:

◆ st__gen()

int st__gen ( st__generator * gen,
const char ** key_p,
char ** value_p )
extern

Definition at line 501 of file st.c.

502{
503 int i;
504
505 if (gen->entry == NULL) {
506 /* try to find next entry */
507 for(i = gen->index; i < gen->table->num_bins; i++) {
508 if (gen->table->bins[i] != NULL) {
509 gen->index = i+1;
510 gen->entry = gen->table->bins[i];
511 break;
512 }
513 }
514 if (gen->entry == NULL) {
515 return 0; /* that's all folks ! */
516 }
517 }
518 *key_p = gen->entry->key;
519 if (value_p != 0) {
520 *value_p = gen->entry->record;
521 }
522 gen->entry = gen->entry->next;
523 return 1;
524}
st__table_entry * entry
Definition st.h:66
st__table * table
Definition st.h:65
int index
Definition st.h:67
Here is the caller graph for this function:

◆ st__gen_int()

int st__gen_int ( st__generator * gen,
const char ** key_p,
long * value_p )
extern

Definition at line 528 of file st.c.

529{
530 int i;
531
532 if (gen->entry == NULL) {
533 /* try to find next entry */
534 for(i = gen->index; i < gen->table->num_bins; i++) {
535 if (gen->table->bins[i] != NULL) {
536 gen->index = i+1;
537 gen->entry = gen->table->bins[i];
538 break;
539 }
540 }
541 if (gen->entry == NULL) {
542 return 0; /* that's all folks ! */
543 }
544 }
545 *key_p = gen->entry->key;
546 if (value_p != 0) {
547 *value_p = (long) gen->entry->record;
548 }
549 gen->entry = gen->entry->next;
550 return 1;
551}

◆ st__init_gen()

st__generator * st__init_gen ( st__table * table)
extern

Definition at line 485 of file st.c.

486{
487 st__generator *gen;
488
489 gen = ABC_ALLOC( st__generator, 1);
490 if (gen == NULL) {
491 return NULL;
492 }
493 gen->table = table;
494 gen->entry = NULL;
495 gen->index = 0;
496 return gen;
497}
Here is the caller graph for this function:

◆ st__init_table()

st__table * st__init_table ( st__compare_func_type compare,
st__hash_func_type hash )
extern

Definition at line 72 of file st.c.

73{
78}
st__table * st__init_table_with_params(st__compare_func_type compare, st__hash_func_type hash, int size, int density, double grow_factor, int reorder_flag)
Definition st.c:41
#define st__DEFAULT_GROW_FACTOR
Definition st.h:104
#define st__DEFAULT_MAX_DENSITY
Definition st.h:102
#define st__DEFAULT_REORDER_FLAG
Definition st.h:105
#define st__DEFAULT_INIT_TABLE_SIZE
Definition st.h:103
Here is the call graph for this function:
Here is the caller graph for this function:

◆ st__init_table_with_params()

st__table * st__init_table_with_params ( st__compare_func_type compare,
st__hash_func_type hash,
int size,
int density,
double grow_factor,
int reorder_flag )
extern

Definition at line 41 of file st.c.

42{
43 int i;
44 st__table *newTable;
45
46 newTable = ABC_ALLOC( st__table, 1);
47 if (newTable == NULL) {
48 return NULL;
49 }
50 newTable->compare = compare;
51 newTable->hash = hash;
52 newTable->num_entries = 0;
53 newTable->max_density = density;
54 newTable->grow_factor = grow_factor;
55 newTable->reorder_flag = reorder_flag;
56 if (size <= 0) {
57 size = 1;
58 }
59 newTable->num_bins = size;
60 newTable->bins = ABC_ALLOC( st__table_entry *, size);
61 if (newTable->bins == NULL) {
62 ABC_FREE(newTable);
63 return NULL;
64 }
65 for(i = 0; i < size; i++) {
66 newTable->bins[i] = 0;
67 }
68 return newTable;
69}
unsigned long long size
Definition giaNewBdd.h:39
int reorder_flag
Definition st.h:58
int max_density
Definition st.h:57
st__compare_func_type compare
Definition st.h:53
double grow_factor
Definition st.h:59
int num_entries
Definition st.h:56
st__hash_func_type hash
Definition st.h:54
Here is the caller graph for this function:

◆ st__insert()

int st__insert ( st__table * table,
const char * key,
char * value )
extern

Definition at line 171 of file st.c.

172{
173 int hash_val;
174 st__table_entry *newEntry;
175 st__table_entry *ptr, **last;
176
177 hash_val = do_hash(key, table);
178
179 FIND_ENTRY(table, hash_val, key, ptr, last);
180
181 if (ptr == NULL) {
182 if (table->num_entries/table->num_bins >= table->max_density) {
183 if (rehash(table) == st__OUT_OF_MEM) {
184 return st__OUT_OF_MEM;
185 }
186 hash_val = do_hash(key, table);
187 }
188 newEntry = ABC_ALLOC( st__table_entry, 1);
189 if (newEntry == NULL) {
190 return st__OUT_OF_MEM;
191 }
192 newEntry->key = (char *)key;
193 newEntry->record = value;
194 newEntry->next = table->bins[hash_val];
195 table->bins[hash_val] = newEntry;
196 table->num_entries++;
197 return 0;
198 } else {
199 ptr->record = value;
200 return 1;
201 }
202}
Here is the caller graph for this function:

◆ st__lookup()

int st__lookup ( st__table * table,
const char * key,
char ** value )
extern

Definition at line 114 of file st.c.

115{
116 int hash_val;
117 st__table_entry *ptr, **last;
118
119 hash_val = do_hash(key, table);
120
121 FIND_ENTRY(table, hash_val, key, ptr, last);
122
123 if (ptr == NULL) {
124 return 0;
125 } else {
126 if (value != NULL) {
127 *value = ptr->record;
128 }
129 return 1;
130 }
131}
Here is the caller graph for this function:

◆ st__lookup_int()

int st__lookup_int ( st__table * table,
char * key,
int * value )
extern

Definition at line 134 of file st.c.

135{
136 int hash_val;
137 st__table_entry *ptr, **last;
138
139 hash_val = do_hash(key, table);
140
141 FIND_ENTRY(table, hash_val, key, ptr, last);
142
143 if (ptr == NULL) {
144 return 0;
145 } else {
146 if (value != 0) {
147 *value = (long) ptr->record;
148 }
149 return 1;
150 }
151}
Here is the caller graph for this function:

◆ st__numcmp()

int st__numcmp ( const char * x,
const char * y )
extern

Definition at line 473 of file st.c.

474{
475 return st__NUMCMP(x, y);
476}
#define st__NUMCMP(x, y)
Definition st.c:19
Here is the caller graph for this function:

◆ st__numhash()

int st__numhash ( const char * x,
int size )
extern

Definition at line 461 of file st.c.

462{
463 return st__NUMHASH(x, size);
464}
#define st__NUMHASH(x, size)
Definition st.c:20
Here is the caller graph for this function:

◆ st__ptrcmp()

int st__ptrcmp ( const char * x,
const char * y )
extern

Definition at line 479 of file st.c.

480{
481 return st__NUMCMP(x, y);
482}
Here is the caller graph for this function:

◆ st__ptrhash()

int st__ptrhash ( const char * x,
int size )
extern

Definition at line 467 of file st.c.

468{
469 return st__PTRHASH(x, size);
470}
#define st__PTRHASH(x, size)
Definition st.c:22
Here is the caller graph for this function:

◆ st__strhash()

int st__strhash ( const char * string,
int modulus )
extern

Definition at line 449 of file st.c.

450{
451 unsigned char * ustring = (unsigned char *)string;
452 unsigned c, val = 0;
453 assert( modulus > 0 );
454 while ((c = *ustring++) != '\0') {
455 val = val*997 + c;
456 }
457 return (int)(val%modulus);
458}
#define assert(ex)
Definition util_old.h:213
Here is the caller graph for this function: