ESBMC
Efficient SMT-based Context-Bounded Model Checker
Loading...
Searching...
No Matches
literal.h
Go to the documentation of this file.
1#ifndef CPROVER_PROPDEC_LITERAL_H
2#define CPROVER_PROPDEC_LITERAL_H
3
4#include <cstdint>
5#include <vector>
6
8{
9public:
10 // constructors
11 literalt() = default;
12
13 literalt(unsigned v, bool sign)
14 {
15 set(v, sign);
16 }
17
18 class literalt negation() const
19 {
20 literalt result(*this);
21 result.invert();
22 return result;
23 }
24
26 {
27 literalt result(*this);
28 result.cond_invert(cond);
29 return result;
30 }
31
32 friend inline bool operator==(const literalt a, const literalt b)
33 {
34 return a.l == b.l;
35 }
36
37 friend inline bool operator!=(const literalt a, const literalt b)
38 {
39 return a.l != b.l;
40 }
41
42 // for sets
43 friend inline bool operator<(const literalt a, const literalt b)
44 {
45 return a.l < b.l;
46 }
47
48 inline unsigned var_no() const
49 {
50 return l >> 1;
51 }
52
53 inline bool sign() const
54 {
55 return l & 1;
56 }
57
58 inline void set(unsigned _l)
59 {
60 l = _l;
61 }
62
63 inline void set(unsigned v, bool sign)
64 {
65 l = (v << 1) | ((unsigned)sign);
66 }
67
68 inline unsigned get() const
69 {
70 return l;
71 }
72
73 inline void invert()
74 {
75 l ^= 1;
76 }
77
78 inline void cond_invert(bool a)
79 {
80 l ^= (a ? 1 : 0);
81 }
82
83 void clear()
84 {
85 l = 0;
86 }
87
88 inline void swap(literalt &x)
89 {
90 std::swap(x.l, l);
91 }
92
93 // constants
94 inline void make_true()
95 {
96 set(const_var_no(), true);
97 }
98
99 inline void make_false()
100 {
101 set(const_var_no(), false);
102 }
103
104 inline bool is_true() const
105 {
106 return is_constant() && sign();
107 }
108
109 inline bool is_false() const
110 {
111 return is_constant() && !sign();
112 }
113
114 friend inline literalt const_literal(bool value)
115 {
116 literalt l;
118 return l;
119 }
120
121 inline bool is_constant() const
122 {
123 return var_no() == const_var_no();
124 }
125
126 friend inline literalt neg(literalt a)
127 {
128 return a.negation();
129 }
130 friend inline literalt pos(literalt a)
131 {
132 return a;
133 }
134
135 static inline unsigned const_var_no()
136 {
137 return (unsigned(-1) << 1) >> 1;
138 }
139
140protected:
141 uint64_t l;
142};
143
144// constants
146
149
150typedef std::vector<literalt> bvt;
151
152#endif
Definition literal.h:8
void set(unsigned v, bool sign)
Definition literal.h:63
class literalt cond_negation(bool cond) const
Definition literal.h:25
bool is_true() const
Definition literal.h:104
unsigned var_no() const
Definition literal.h:48
static unsigned const_var_no()
Definition literal.h:135
literalt(unsigned v, bool sign)
Definition literal.h:13
bool sign() const
Definition literal.h:53
bool is_constant() const
Definition literal.h:121
friend bool operator==(const literalt a, const literalt b)
Definition literal.h:32
friend literalt neg(literalt a)
Definition literal.h:126
unsigned get() const
Definition literal.h:68
void set(unsigned _l)
Definition literal.h:58
void swap(literalt &x)
Definition literal.h:88
void invert()
Definition literal.h:73
class literalt negation() const
Definition literal.h:18
friend bool operator!=(const literalt a, const literalt b)
Definition literal.h:37
void make_false()
Definition literal.h:99
bool is_false() const
Definition literal.h:109
void clear()
Definition literal.h:83
friend literalt const_literal(bool value)
Definition literal.h:114
friend bool operator<(const literalt a, const literalt b)
Definition literal.h:43
void cond_invert(bool a)
Definition literal.h:78
void make_true()
Definition literal.h:94
uint64_t l
Definition literal.h:141
literalt()=default
friend literalt pos(literalt a)
Definition literal.h:130
Definition toml.hpp:1531
pthread_cond_t cond
Definition cuda.h:50
literalt neg(literalt a)
Definition literal.h:126
literalt const_literal(bool value)
Definition literal.h:114
literalt pos(literalt a)
Definition literal.h:130
std::vector< literalt > bvt
Definition minisat_conv.h:20
#define bool
Definition stdbool.h:9