#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 |