58 lines
1.5 KiB
C
58 lines
1.5 KiB
C
|
#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
|