cprover
Toggle main menu visibility
Loading...
Searching...
No Matches
smt_responses.cpp
Go to the documentation of this file.
1
// Author: Diffblue Ltd.
2
3
#include "
smt_responses.h
"
4
5
#include <
util/range.h
>
6
7
// Define the irep_idts for responses.
8
#define RESPONSE_ID(the_id, the_base) \
9
const irep_idt ID_smt_##the_id##_response{"smt_" #the_id "_response"};
10
#include "smt_responses.def"
11
12
#undef RESPONSE_ID
13
14
bool
smt_responset::operator==
(
const
smt_responset
&other)
const
15
{
16
return
irept::operator==
(other);
17
}
18
19
bool
smt_responset::operator!=
(
const
smt_responset
&other)
const
20
{
21
return
!(*
this
== other);
22
}
23
24
#define RESPONSE_ID(the_id, the_base) \
25
template <> \
26
const smt_##the_id##_responset *the_base::cast<smt_##the_id##_responset>() \
27
const & \
28
{ \
29
return id() == ID_smt_##the_id##_response \
30
? static_cast<const smt_##the_id##_responset *>(this) \
31
: nullptr; \
32
}
33
#include "smt_responses.def"
// NOLINT(build/include)
34
#undef RESPONSE_ID
35
36
template
<
typename
sub_
class
t>
37
const
sub_classt *
smt_responset::cast
() const &
38
{
39
return
nullptr
;
40
}
41
42
bool
smt_check_sat_response_kindt::operator==
(
43
const
smt_check_sat_response_kindt
&other)
const
44
{
45
return
irept::operator==
(other);
46
}
47
48
bool
smt_check_sat_response_kindt::operator!=
(
49
const
smt_check_sat_response_kindt
&other)
const
50
{
51
return
!(*
this
== other);
52
}
53
54
smt_success_responset::smt_success_responset
()
55
:
smt_responset
{ID_smt_success_response}
56
{
57
}
58
59
smt_sat_responset::smt_sat_responset
()
60
:
smt_check_sat_response_kindt
{ID_smt_sat_response}
61
{
62
}
63
64
smt_unsat_responset::smt_unsat_responset
()
65
:
smt_check_sat_response_kindt
{ID_smt_unsat_response}
66
{
67
}
68
69
smt_unknown_responset::smt_unknown_responset
()
70
:
smt_check_sat_response_kindt
{ID_smt_unknown_response}
71
{
72
}
73
74
template
<
typename
derivedt>
75
smt_check_sat_response_kindt::storert<derivedt>::storert
()
76
{
77
static_assert
(
78
std::is_base_of<irept, derivedt>::value &&
79
std::is_base_of<storert<derivedt>, derivedt>::value,
80
"Only irept based classes need to upcast smt_termt to store it."
);
81
}
82
83
template
<
typename
derivedt>
84
irept
smt_check_sat_response_kindt::storert<derivedt>::upcast
(
85
smt_check_sat_response_kindt
check_sat_response_kind)
86
{
87
return
static_cast<
irept
&&
>
(std::move(check_sat_response_kind));
88
}
89
90
template
<
typename
derivedt>
91
const
smt_check_sat_response_kindt
&
92
smt_check_sat_response_kindt::storert<derivedt>::downcast
(
const
irept
&irep)
93
{
94
return
static_cast<
const
smt_check_sat_response_kindt
&
>
(irep);
95
}
96
97
smt_check_sat_responset::smt_check_sat_responset
(
98
smt_check_sat_response_kindt
kind
)
99
:
smt_responset
{ID_smt_check_sat_response}
100
{
101
set
(ID_value,
upcast
(std::move(
kind
)));
102
}
103
104
const
smt_check_sat_response_kindt
&
smt_check_sat_responset::kind
()
const
105
{
106
return
downcast
(
find
(ID_value));
107
}
108
109
smt_get_value_responset::valuation_pairt::valuation_pairt
(
110
smt_termt
descriptor
,
111
smt_termt
value
)
112
{
113
INVARIANT
(
114
descriptor
.get_sort() ==
value
.get_sort(),
115
"SMT valuation pair must have matching sort for the descriptor and value."
);
116
get_sub
().push_back(
upcast
(std::move(
descriptor
)));
117
get_sub
().push_back(
upcast
(std::move(
value
)));
118
}
119
120
smt_get_value_responset::valuation_pairt::valuation_pairt
(
121
irep_idt
descriptor
,
122
const
smt_termt
&
value
)
123
:
valuation_pairt
(
smt_identifier_termt
{
descriptor
,
value
.get_sort()},
value
)
124
{
125
}
126
127
const
smt_termt
&
smt_get_value_responset::valuation_pairt::descriptor
()
const
128
{
129
return
downcast
(
get_sub
().at(0));
130
}
131
132
const
smt_termt
&
smt_get_value_responset::valuation_pairt::value
()
const
133
{
134
return
downcast
(
get_sub
().at(1));
135
}
136
137
bool
smt_get_value_responset::valuation_pairt::operator==
(
138
const
smt_get_value_responset::valuation_pairt
&other)
const
139
{
140
return
irept::operator==
(other);
141
}
142
143
bool
smt_get_value_responset::valuation_pairt::operator!=
(
144
const
smt_get_value_responset::valuation_pairt
&other)
const
145
{
146
return
!(*
this
== other);
147
}
148
149
smt_get_value_responset::smt_get_value_responset
(
150
std::vector<valuation_pairt>
pairs
)
151
:
smt_responset
(ID_smt_get_value_response)
152
{
153
// SMT-LIB standard version 2.6 requires one or more pairs.
154
// See page 47, figure 3.9: Command responses.
155
INVARIANT
(
156
!
pairs
.empty(),
"Get value response must contain one or more pairs."
);
157
for
(
auto
&pair :
pairs
)
158
{
159
get_sub
().push_back(std::move(pair));
160
}
161
}
162
163
std::vector<
164
std::reference_wrapper<const smt_get_value_responset::valuation_pairt>>
165
smt_get_value_responset::pairs
()
const
166
{
167
return
make_range
(
get_sub
()).map([](
const
irept
&pair) {
168
return
std::cref(
static_cast<
const
valuation_pairt
&
>
(pair));
169
});
170
}
171
172
smt_unsupported_responset::smt_unsupported_responset
()
173
:
smt_responset
{ID_smt_unsupported_response}
174
{
175
}
176
177
smt_error_responset::smt_error_responset
(
irep_idt
message
)
178
:
smt_responset
{ID_smt_error_response}
179
{
180
set
(ID_value,
message
);
181
}
182
183
const
irep_idt
&
smt_error_responset::message
()
const
184
{
185
return
get
(ID_value);
186
}
irept::operator==
bool operator==(const irept &other) const
Definition
irep.cpp:133
irept::find
const irept & find(const irep_idt &name) const
Definition
irep.cpp:93
irept::get
const irep_idt & get(const irep_idt &name) const
Definition
irep.cpp:44
irept::set
void set(const irep_idt &name, const irep_idt &value)
Definition
irep.h:412
irept::get_sub
subt & get_sub()
Definition
irep.h:448
smt_check_sat_response_kindt::storert::upcast
static irept upcast(smt_check_sat_response_kindt check_sat_response_kind)
Definition
smt_responses.cpp:84
smt_check_sat_response_kindt::storert::storert
storert()
Definition
smt_responses.cpp:75
smt_check_sat_response_kindt::storert::downcast
static const smt_check_sat_response_kindt & downcast(const irept &)
Definition
smt_responses.cpp:92
smt_check_sat_response_kindt
Definition
smt_responses.h:36
smt_check_sat_response_kindt::operator==
bool operator==(const smt_check_sat_response_kindt &) const
Definition
smt_responses.cpp:42
smt_check_sat_response_kindt::irept
irept(const irep_idt &_id)
Definition
irep.h:377
smt_check_sat_response_kindt::operator!=
bool operator!=(const smt_check_sat_response_kindt &) const
Definition
smt_responses.cpp:48
smt_check_sat_response_kindt::smt_check_sat_response_kindt
smt_check_sat_response_kindt()=delete
smt_check_sat_responset::smt_check_sat_responset
smt_check_sat_responset(smt_check_sat_response_kindt kind)
Definition
smt_responses.cpp:97
smt_check_sat_responset::kind
const smt_check_sat_response_kindt & kind() const
Definition
smt_responses.cpp:104
smt_error_responset::message
const irep_idt & message() const
Definition
smt_responses.cpp:183
smt_error_responset::smt_error_responset
smt_error_responset(irep_idt message)
Definition
smt_responses.cpp:177
smt_get_value_responset::valuation_pairt
Definition
smt_responses.h:103
smt_get_value_responset::valuation_pairt::valuation_pairt
valuation_pairt()=delete
smt_get_value_responset::valuation_pairt::descriptor
const smt_termt & descriptor() const
Definition
smt_responses.cpp:127
smt_get_value_responset::valuation_pairt::operator==
bool operator==(const valuation_pairt &) const
Definition
smt_responses.cpp:137
smt_get_value_responset::valuation_pairt::value
const smt_termt & value() const
Definition
smt_responses.cpp:132
smt_get_value_responset::valuation_pairt::operator!=
bool operator!=(const valuation_pairt &) const
Definition
smt_responses.cpp:143
smt_get_value_responset::smt_get_value_responset
smt_get_value_responset(std::vector< valuation_pairt > pairs)
Definition
smt_responses.cpp:149
smt_get_value_responset::pairs
std::vector< std::reference_wrapper< const valuation_pairt > > pairs() const
Definition
smt_responses.cpp:165
smt_identifier_termt
Stores identifiers in unescaped and unquoted form.
Definition
smt_terms.h:93
smt_responset::smt_responset
smt_responset()=delete
smt_responset::irept
irept(const irep_idt &_id)
Definition
irep.h:377
smt_responset::operator!=
bool operator!=(const smt_responset &) const
Definition
smt_responses.cpp:19
smt_responset::operator==
bool operator==(const smt_responset &) const
Definition
smt_responses.cpp:14
smt_responset::cast
const sub_classt * cast() const &
Definition
smt_responses.cpp:37
smt_sat_responset::smt_sat_responset
smt_sat_responset()
Definition
smt_responses.cpp:59
smt_success_responset::smt_success_responset
smt_success_responset()
Definition
smt_responses.cpp:54
smt_termt::storert< valuation_pairt >::upcast
static irept upcast(smt_termt term)
Definition
smt_terms.h:65
smt_termt::storert< smt_get_value_responset >::downcast
static const smt_termt & downcast(const irept &)
Definition
smt_terms.h:71
smt_termt
Definition
smt_terms.h:21
smt_unknown_responset::smt_unknown_responset
smt_unknown_responset()
Definition
smt_responses.cpp:69
smt_unsat_responset::smt_unsat_responset
smt_unsat_responset()
Definition
smt_responses.cpp:64
smt_unsupported_responset::smt_unsupported_responset
smt_unsupported_responset()
Definition
smt_responses.cpp:172
range.h
Ranges: pair of begin and end iterators, which can be initialized from containers,...
make_range
ranget< iteratort > make_range(iteratort begin, iteratort end)
Definition
range.h:522
smt_responses.h
INVARIANT
#define INVARIANT(CONDITION, REASON)
This macro uses the wrapper function 'invariant_violated_string'.
Definition
invariant.h:423
irep_idt
dstringt irep_idt
Definition
verification_result.h:16
solvers
smt2_incremental
ast
smt_responses.cpp
Generated by
1.17.0