ABC: A System for Sequential Synthesis and Verification
 
Loading...
Searching...
No Matches
clause.h
Go to the documentation of this file.
1#ifndef _clause_h_INCLUDED
2#define _clause_h_INCLUDED
3
4#include "arena.h"
5#include "literal.h"
6#include "reference.h"
7#include "utilities.h"
8
9#include <stdbool.h>
10
11#include "global.h"
13
14typedef struct clause clause;
15
16#define LD_MAX_GLUE 19
17#define LD_MAX_USED 5
18
19#define MAX_GLUE ((1u << LD_MAX_GLUE) - 1)
20#define MAX_USED ((1u << LD_MAX_USED) - 1)
21
22struct clause {
23 unsigned glue : LD_MAX_GLUE;
24
25 bool garbage : 1;
26 bool quotient : 1;
27 bool reason : 1;
28 bool redundant : 1;
29 bool shrunken : 1;
30 bool subsume : 1;
31 bool swept : 1;
32 bool vivify : 1;
33
34 unsigned used : LD_MAX_USED;
35
36 unsigned searched;
37 unsigned size;
38
39 unsigned lits[3];
40};
41
42#define SIZE_OF_CLAUSE_HEADER ((size_t) & ((clause *) 0)->searched)
43
44#define BEGIN_LITS(C) ((C)->lits)
45#define END_LITS(C) (BEGIN_LITS (C) + (C)->size)
46
47#define all_literals_in_clause(LIT, C) \
48 unsigned LIT, \
49 *LIT##_PTR = BEGIN_LITS (C), *const LIT##_END = END_LITS (C); \
50 LIT##_PTR != LIT##_END && ((LIT = *LIT##_PTR), true); \
51 ++LIT##_PTR
52
53static inline size_t kissat_bytes_of_clause (unsigned size) {
54 const size_t res = sizeof (clause) + (size - 3) * sizeof (unsigned);
55 return kissat_align_ward (res);
56}
57
58static inline size_t kissat_actual_bytes_of_clause (clause *c) {
59 unsigned const *p = END_LITS (c);
60 if (c->shrunken)
61 while (*p++ != INVALID_LIT)
62 ;
63 return kissat_align_ward ((char *) p - (char *) c);
64}
65
66static inline clause *kissat_next_clause (clause *c) {
67 word bytes = kissat_actual_bytes_of_clause (c);
68 return (clause *) ((char *) c + bytes);
69}
70
71struct kissat;
72
73void kissat_new_binary_clause (struct kissat *, unsigned, unsigned);
74void kissat_new_unwatched_binary_clause (struct kissat *, unsigned,
75 unsigned);
76
79reference kissat_new_redundant_clause (struct kissat *, unsigned glue);
80
81#ifndef INLINE_SORT
82void kissat_sort_literals (struct kissat *, unsigned size, unsigned *lits);
83#endif
84
85void kissat_connect_clause (struct kissat *, clause *);
87
89void kissat_delete_binary (struct kissat *, unsigned, unsigned);
90
92
94
95#endif
#define ABC_NAMESPACE_HEADER_END
#define ABC_NAMESPACE_HEADER_START
NAMESPACES ///.
#define INVALID_LIT
Cube * p
Definition exorList.c:222
reference kissat_new_irredundant_clause(struct kissat *)
Definition clause.c:140
void kissat_connect_clause(struct kissat *, clause *)
Definition clause.c:60
reference kissat_new_redundant_clause(struct kissat *, unsigned glue)
Definition clause.c:146
reference kissat_new_original_clause(struct kissat *)
Definition clause.c:132
void kissat_delete_binary(struct kissat *, unsigned, unsigned)
Definition clause.c:181
void kissat_sort_literals(struct kissat *, unsigned size, unsigned *lits)
Definition sort.c:85
clause * kissat_delete_clause(struct kissat *, clause *)
Definition clause.c:171
void kissat_connect_referenced(struct kissat *solver, reference)
Definition clause.c:54
void kissat_new_binary_clause(struct kissat *, unsigned, unsigned)
Definition clause.c:122
#define LD_MAX_USED
Definition clause.h:17
void kissat_new_unwatched_binary_clause(struct kissat *, unsigned, unsigned)
Definition clause.c:127
#define LD_MAX_GLUE
Definition clause.h:16
void kissat_mark_clause_as_garbage(struct kissat *, clause *)
Definition clause.c:164
#define END_LITS(C)
Definition clause.h:45
unsigned __int64 word
DECLARATIONS ///.
Definition kitPerm.c:36
#define solver
Definition kitten.c:211
ABC_NAMESPACE_HEADER_START typedef unsigned reference
Definition reference.h:9
bool quotient
Definition clause.h:26
bool vivify
Definition clause.h:32
bool reason
Definition clause.h:27
unsigned glue
Definition clause.h:23
bool swept
Definition clause.h:31
unsigned lits[3]
Definition clause.h:39
bool redundant
Definition clause.h:28
unsigned searched
Definition clause.h:36
bool subsume
Definition clause.h:30
unsigned used
Definition clause.h:34
unsigned size
Definition clause.h:37
bool shrunken
Definition clause.h:29
bool garbage
Definition clause.h:25
unsigned size
Definition internal.h:107