| #ifndef __ACE_CUBE_H__ | |
| #define __ACE_CUBE_H__ | |
| #include "ace.h" | |
| //#include "avl.h" | |
| //#include "espresso.h" | |
| //////////////// Espresso Cube Functions ////////////////// | |
| #define fail(why) {\ | |
| (void) fprintf(stderr, "Fatal error: file %s, line %d\n%s\n",\ | |
| __FILE__, __LINE__, why);\ | |
| (void) fflush(stdout);\ | |
| abort();\ | |
| } | |
| #define LOOPINIT(size) ((size <= BPI) ? 1 : WHICH_WORD((size)-1)) | |
| #define BPI 32 | |
| #define LOGBPI 5 | |
| #define WHICH_WORD(element) (((element) >> LOGBPI) + 1) | |
| #define WHICH_BIT(element) ((element) & (BPI-1)) | |
| #define GETINPUT(c, pos)\ | |
| ((c[WHICH_WORD(2*pos)] >> WHICH_BIT(2*pos)) & 3) | |
| #define node_get_literal(c_, j_) \ | |
| ((c_) ? GETINPUT((c_), (j_)) : node_error(2)) | |
| #define TWO 3 | |
| #define DASH 3 | |
| #define ONE 2 | |
| #define ZERO 1 | |
| typedef unsigned int *pset; | |
| #define ALLOC(type, num) \ | |
| ((type *) malloc(sizeof(type) * (num))) | |
| #define set_remove(set, e) (set[WHICH_WORD(e)] &= ~ (1 << WHICH_BIT(e))) | |
| #define set_insert(set, e) (set[WHICH_WORD(e)] |= 1 << WHICH_BIT(e)) | |
| #define set_new(size) set_clear(ALLOC(unsigned int, SET_SIZE(size)), size) | |
| /* # of ints needed to allocate a set with "size" elements */ | |
| #define SET_SIZE(size) ((size) <= BPI ? 2 : (WHICH_WORD((size)-1) + 1)) | |
| typedef struct { | |
| pset cube; | |
| int num_literals; | |
| double static_prob; | |
| } ace_cube_t; | |
| ace_cube_t * ace_cube_new_dc(int num_literals); | |
| ace_cube_t * ace_cube_dup(ace_cube_t * cube); | |
| void ace_cube_free(ace_cube_t * cube); | |
| #endif |