| #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) ALLOC(unsigned int, SET_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 |