/***************************************************
 *
 *  TYPE Declaration
 *
 ***************************************************/

struct trie { /* trie of clauses */
  int info;   /* info = (key<<1 + psign) */
  struct trie *bro, *pos, *neg;
};

/**********************
  MACROS
***********************/
#define print_x_subsume(k) \
  trace(7, printf("    [C%d] is subsumed by x%d.\n", Clause_num, lit_var(k)))

#define print_x_skip(k) \
  trace(7, printf("    %d in [C%d] is skipped.\n", lit_var(k), Clause_num))

#define MAX_CONFLICT 1
#define Level Branch_open

#define HAS_POS_CL(no) (no->pos == CLAUSE_MARK)
#define HAS_NEG_CL(no) (no->neg == CLAUSE_MARK)

#define set_key_psign(cl,k,s) cl->info = ((k<<1)+s)
#define set_key(cl,k) cl->info = (k<<1)
#define key_of(cl) (cl->info>>1)
#define set_psign(cl,s) cl->info = cl->info+s
#define psign_of(cl) ((cl->info>>1)&1)

#define free_trie_cell(no) free(no)
	 
struct trie *CLAUSE_MARK;
struct trie *Root;
struct trie **roots;
int Size;

