56 lines
1.0 KiB
C
56 lines
1.0 KiB
C
#ifndef _assign_h_INCLUDED
|
|
#define _assign_h_INCLUDED
|
|
|
|
#include <stdbool.h>
|
|
|
|
#define DECISION UINT_MAX
|
|
#define UNIT (DECISION - 1)
|
|
|
|
#define ANALYZED 1
|
|
#define POISONED 2
|
|
#define REMOVABLE 3
|
|
|
|
#define LD_MAX_LEVEL 28
|
|
#define INFINITE_LEVEL UINT_MAX
|
|
#define INVALID_LEVEL UINT_MAX
|
|
#define MAX_LEVEL ((1u << LD_MAX_LEVEL) - 1)
|
|
|
|
typedef struct assigned assigned;
|
|
struct clause;
|
|
|
|
struct assigned
|
|
{
|
|
unsigned level:LD_MAX_LEVEL;
|
|
unsigned analyzed:2;
|
|
bool redundant:1;
|
|
bool binary:1;
|
|
unsigned reason;
|
|
};
|
|
|
|
#define ASSIGNED(LIT) \
|
|
(assert (VALID_INTERNAL_LITERAL (LIT)), \
|
|
solver->assigned + IDX (LIT))
|
|
|
|
#define LEVEL(LIT) \
|
|
(ASSIGNED(LIT)->level)
|
|
|
|
#define REASON(LIT) \
|
|
(ASSIGNED(LIT)->reason)
|
|
|
|
#ifndef INLINE_ASSIGN
|
|
|
|
struct kissat;
|
|
struct clause;
|
|
|
|
void kissat_assign_unit (struct kissat *, unsigned lit);
|
|
void kissat_assign_decision (struct kissat *, unsigned lit);
|
|
|
|
void kissat_assign_binary (struct kissat *, bool, unsigned, unsigned);
|
|
|
|
void kissat_assign_reference (struct kissat *, unsigned lit,
|
|
reference, struct clause *);
|
|
|
|
#endif
|
|
|
|
#endif
|