Storm
1.14.0.1
A Modern Probabilistic Model Checker
Loading...
Searching...
No Matches
TraverseFormulaVisitor.cpp
Go to the documentation of this file.
1
#include "
storm/logic/TraverseFormulaVisitor.h
"
2
3
#include <boost/any.hpp>
4
#include <cstdint>
5
#include <utility>
6
7
#include "
storm/logic/Formulas.h
"
8
9
namespace
storm::logic
{
10
11
TraverseFormulaVisitor::TraverseFormulaVisitor
(std::function<
bool
(
Formula
const
&)> callback) : callback(
std
::move(callback)) {}
12
13
void
TraverseFormulaVisitor::traverse
(
Formula
const
& f)
const
{
14
f.
accept
(*
this
, boost::any());
15
}
16
17
boost::any
TraverseFormulaVisitor::visit
(
AtomicExpressionFormula
const
& f, boost::any
const
&)
const
{
18
callback(f);
19
return
boost::any();
20
}
21
22
boost::any
TraverseFormulaVisitor::visit
(
AtomicLabelFormula
const
& f, boost::any
const
&)
const
{
23
callback(f);
24
return
boost::any();
25
}
26
27
boost::any
TraverseFormulaVisitor::visit
(
BinaryBooleanStateFormula
const
& f, boost::any
const
& data)
const
{
28
if
(callback(f)) {
29
f.
getLeftSubformula
().
accept
(*
this
, data);
30
f.
getRightSubformula
().
accept
(*
this
, data);
31
}
32
return
boost::any();
33
}
34
35
boost::any
TraverseFormulaVisitor::visit
(
BinaryBooleanPathFormula
const
& f, boost::any
const
& data)
const
{
36
if
(callback(f)) {
37
f.
getLeftSubformula
().
accept
(*
this
, data);
38
f.
getRightSubformula
().
accept
(*
this
, data);
39
}
40
return
boost::any();
41
}
42
43
boost::any
TraverseFormulaVisitor::visit
(
BooleanLiteralFormula
const
& f, boost::any
const
&)
const
{
44
callback(f);
45
return
boost::any();
46
}
47
48
boost::any
TraverseFormulaVisitor::visit
(
BoundedUntilFormula
const
& f, boost::any
const
& data)
const
{
49
if
(callback(f)) {
50
if
(f.
hasMultiDimensionalSubformulas
()) {
51
for
(uint64_t i = 0; i < f.
getDimension
(); ++i) {
52
f.
getLeftSubformula
(i).
accept
(*
this
, data);
53
f.
getRightSubformula
(i).
accept
(*
this
, data);
54
}
55
}
else
{
56
// All dimensions share the same subformulas, which we thus only visit once.
57
f.
getLeftSubformula
().
accept
(*
this
, data);
58
f.
getRightSubformula
().
accept
(*
this
, data);
59
}
60
}
61
return
boost::any();
62
}
63
64
boost::any
TraverseFormulaVisitor::visit
(
ConditionalFormula
const
& f, boost::any
const
& data)
const
{
65
if
(callback(f)) {
66
f.
getSubformula
().
accept
(*
this
, data);
67
f.
getConditionFormula
().
accept
(*
this
, data);
68
}
69
return
boost::any();
70
}
71
72
boost::any
TraverseFormulaVisitor::visit
(
CumulativeRewardFormula
const
& f, boost::any
const
&)
const
{
73
callback(f);
74
return
boost::any();
75
}
76
77
boost::any
TraverseFormulaVisitor::visit
(
EventuallyFormula
const
& f, boost::any
const
& data)
const
{
78
if
(callback(f)) {
79
f.
getSubformula
().
accept
(*
this
, data);
80
}
81
return
boost::any();
82
}
83
84
boost::any
TraverseFormulaVisitor::visit
(
TimeOperatorFormula
const
& f, boost::any
const
& data)
const
{
85
if
(callback(f)) {
86
f.
getSubformula
().
accept
(*
this
, data);
87
}
88
return
boost::any();
89
}
90
91
boost::any
TraverseFormulaVisitor::visit
(
GloballyFormula
const
& f, boost::any
const
& data)
const
{
92
if
(callback(f)) {
93
f.
getSubformula
().
accept
(*
this
, data);
94
}
95
return
boost::any();
96
}
97
98
boost::any
TraverseFormulaVisitor::visit
(
GameFormula
const
& f, boost::any
const
& data)
const
{
99
if
(callback(f)) {
100
f.
getSubformula
().
accept
(*
this
, data);
101
}
102
return
boost::any();
103
}
104
105
boost::any
TraverseFormulaVisitor::visit
(
InstantaneousRewardFormula
const
& f, boost::any
const
&)
const
{
106
callback(f);
107
return
boost::any();
108
}
109
110
boost::any
TraverseFormulaVisitor::visit
(
LongRunAverageOperatorFormula
const
& f, boost::any
const
& data)
const
{
111
if
(callback(f)) {
112
f.
getSubformula
().
accept
(*
this
, data);
113
}
114
return
boost::any();
115
}
116
117
boost::any
TraverseFormulaVisitor::visit
(
LongRunAverageRewardFormula
const
& f, boost::any
const
&)
const
{
118
callback(f);
119
return
boost::any();
120
}
121
122
boost::any
TraverseFormulaVisitor::visit
(
MultiObjectiveFormula
const
& f, boost::any
const
& data)
const
{
123
if
(callback(f)) {
124
for
(
auto
const
& subformula : f.
getSubformulas
()) {
125
subformula->accept(*
this
, data);
126
}
127
}
128
return
boost::any();
129
}
130
131
boost::any
TraverseFormulaVisitor::visit
(
QuantileFormula
const
& f, boost::any
const
& data)
const
{
132
if
(callback(f)) {
133
f.
getSubformula
().
accept
(*
this
, data);
134
}
135
return
boost::any();
136
}
137
138
boost::any
TraverseFormulaVisitor::visit
(
NextFormula
const
& f, boost::any
const
& data)
const
{
139
if
(callback(f)) {
140
f.
getSubformula
().
accept
(*
this
, data);
141
}
142
return
boost::any();
143
}
144
145
boost::any
TraverseFormulaVisitor::visit
(
ProbabilityOperatorFormula
const
& f, boost::any
const
& data)
const
{
146
if
(callback(f)) {
147
f.
getSubformula
().
accept
(*
this
, data);
148
}
149
return
boost::any();
150
}
151
152
boost::any
TraverseFormulaVisitor::visit
(
RewardOperatorFormula
const
& f, boost::any
const
& data)
const
{
153
if
(callback(f)) {
154
f.
getSubformula
().
accept
(*
this
, data);
155
}
156
return
boost::any();
157
}
158
159
boost::any
TraverseFormulaVisitor::visit
(
TotalRewardFormula
const
& f, boost::any
const
&)
const
{
160
callback(f);
161
return
boost::any();
162
}
163
164
boost::any
TraverseFormulaVisitor::visit
(
UnaryBooleanStateFormula
const
& f, boost::any
const
& data)
const
{
165
if
(callback(f)) {
166
f.
getSubformula
().
accept
(*
this
, data);
167
}
168
return
boost::any();
169
}
170
171
boost::any
TraverseFormulaVisitor::visit
(
UnaryBooleanPathFormula
const
& f, boost::any
const
& data)
const
{
172
if
(callback(f)) {
173
f.
getSubformula
().
accept
(*
this
, data);
174
}
175
return
boost::any();
176
}
177
178
boost::any
TraverseFormulaVisitor::visit
(
UntilFormula
const
& f, boost::any
const
& data)
const
{
179
if
(callback(f)) {
180
f.
getLeftSubformula
().
accept
(*
this
, data);
181
f.
getRightSubformula
().
accept
(*
this
, data);
182
}
183
return
boost::any();
184
}
185
186
boost::any
TraverseFormulaVisitor::visit
(
WeakUntilFormula
const
& f, boost::any
const
& data)
const
{
187
if
(callback(f)) {
188
f.
getLeftSubformula
().
accept
(*
this
, data);
189
f.
getRightSubformula
().
accept
(*
this
, data);
190
}
191
return
boost::any();
192
}
193
194
boost::any
TraverseFormulaVisitor::visit
(
ReleaseFormula
const
& f, boost::any
const
& data)
const
{
195
if
(callback(f)) {
196
f.
getLeftSubformula
().
accept
(*
this
, data);
197
f.
getRightSubformula
().
accept
(*
this
, data);
198
}
199
return
boost::any();
200
}
201
202
boost::any
TraverseFormulaVisitor::visit
(
HOAPathFormula
const
& f, boost::any
const
& data)
const
{
203
if
(callback(f)) {
204
for
(
auto
const
& mapped : f.
getAPMapping
()) {
205
mapped.second->accept(*
this
, data);
206
}
207
}
208
return
boost::any();
209
}
210
211
boost::any
TraverseFormulaVisitor::visit
(
DiscountedCumulativeRewardFormula
const
& f, boost::any
const
&)
const
{
212
callback(f);
213
return
boost::any();
214
}
215
216
boost::any
TraverseFormulaVisitor::visit
(
DiscountedTotalRewardFormula
const
& f, boost::any
const
&)
const
{
217
callback(f);
218
return
boost::any();
219
}
220
221
}
// namespace storm::logic
Formulas.h
TraverseFormulaVisitor.h
storm::logic::AtomicExpressionFormula
Definition
AtomicExpressionFormula.h:8
storm::logic::AtomicLabelFormula
Definition
AtomicLabelFormula.h:9
storm::logic::BinaryBooleanPathFormula
Definition
BinaryBooleanPathFormula.h:11
storm::logic::BinaryBooleanStateFormula
Definition
BinaryBooleanStateFormula.h:10
storm::logic::BinaryPathFormula::getRightSubformula
Formula const & getRightSubformula() const
Definition
BinaryPathFormula.cpp:18
storm::logic::BinaryPathFormula::getLeftSubformula
Formula const & getLeftSubformula() const
Definition
BinaryPathFormula.cpp:14
storm::logic::BinaryStateFormula::getRightSubformula
Formula const & getRightSubformula() const
Definition
BinaryStateFormula.cpp:18
storm::logic::BinaryStateFormula::getLeftSubformula
Formula const & getLeftSubformula() const
Definition
BinaryStateFormula.cpp:14
storm::logic::BooleanLiteralFormula
Definition
BooleanLiteralFormula.h:7
storm::logic::BoundedUntilFormula
Definition
BoundedUntilFormula.h:12
storm::logic::BoundedUntilFormula::getDimension
unsigned getDimension() const
Definition
BoundedUntilFormula.cpp:162
storm::logic::BoundedUntilFormula::getRightSubformula
Formula const & getRightSubformula() const
Definition
BoundedUntilFormula.cpp:179
storm::logic::BoundedUntilFormula::hasMultiDimensionalSubformulas
bool hasMultiDimensionalSubformulas() const
Definition
BoundedUntilFormula.cpp:156
storm::logic::BoundedUntilFormula::getLeftSubformula
Formula const & getLeftSubformula() const
Definition
BoundedUntilFormula.cpp:166
storm::logic::ConditionalFormula
Definition
ConditionalFormula.h:8
storm::logic::ConditionalFormula::getConditionFormula
Formula const & getConditionFormula() const
Definition
ConditionalFormula.cpp:22
storm::logic::ConditionalFormula::getSubformula
Formula const & getSubformula() const
Definition
ConditionalFormula.cpp:18
storm::logic::CumulativeRewardFormula
Definition
CumulativeRewardFormula.h:10
storm::logic::DiscountedCumulativeRewardFormula
Definition
DiscountedCumulativeRewardFormula.h:10
storm::logic::DiscountedTotalRewardFormula
Definition
DiscountedTotalRewardFormula.h:11
storm::logic::EventuallyFormula
Definition
EventuallyFormula.h:11
storm::logic::Formula
Definition
Formula.h:31
storm::logic::Formula::accept
boost::any accept(FormulaVisitor const &visitor) const
Definition
Formula.cpp:17
storm::logic::GameFormula
Definition
GameFormula.h:9
storm::logic::GloballyFormula
Definition
GloballyFormula.h:7
storm::logic::HOAPathFormula
Definition
HOAPathFormula.h:16
storm::logic::HOAPathFormula::getAPMapping
const ap_to_formula_map & getAPMapping() const
Definition
HOAPathFormula.cpp:28
storm::logic::InstantaneousRewardFormula
Definition
InstantaneousRewardFormula.h:10
storm::logic::LongRunAverageOperatorFormula
Definition
LongRunAverageOperatorFormula.h:7
storm::logic::LongRunAverageRewardFormula
Definition
LongRunAverageRewardFormula.h:9
storm::logic::MultiObjectiveFormula
Definition
MultiObjectiveFormula.h:9
storm::logic::MultiObjectiveFormula::getSubformulas
std::vector< std::shared_ptr< Formula const > > const & getSubformulas() const
Definition
MultiObjectiveFormula.cpp:65
storm::logic::NextFormula
Definition
NextFormula.h:7
storm::logic::ProbabilityOperatorFormula
Definition
ProbabilityOperatorFormula.h:7
storm::logic::QuantileFormula
Definition
QuantileFormula.h:9
storm::logic::QuantileFormula::getSubformula
Formula const & getSubformula() const
Definition
QuantileFormula.cpp:38
storm::logic::ReleaseFormula
Definition
ReleaseFormula.h:7
storm::logic::RewardOperatorFormula
Definition
RewardOperatorFormula.h:7
storm::logic::TimeOperatorFormula
Definition
TimeOperatorFormula.h:8
storm::logic::TotalRewardFormula
Definition
TotalRewardFormula.h:10
storm::logic::TraverseFormulaVisitor::traverse
void traverse(Formula const &f) const
Visits the given formula and, as far as the callback demands it, its subformulas in pre-order.
Definition
TraverseFormulaVisitor.cpp:13
storm::logic::TraverseFormulaVisitor::TraverseFormulaVisitor
TraverseFormulaVisitor(std::function< bool(Formula const &)> callback)
Definition
TraverseFormulaVisitor.cpp:11
storm::logic::TraverseFormulaVisitor::visit
virtual boost::any visit(AtomicExpressionFormula const &f, boost::any const &data) const override
Definition
TraverseFormulaVisitor.cpp:17
storm::logic::UnaryBooleanPathFormula
Definition
UnaryBooleanPathFormula.h:9
storm::logic::UnaryBooleanStateFormula
Definition
UnaryBooleanStateFormula.h:8
storm::logic::UnaryPathFormula::getSubformula
Formula const & getSubformula() const
Definition
UnaryPathFormula.cpp:13
storm::logic::UnaryStateFormula::getSubformula
Formula const & getSubformula() const
Definition
UnaryStateFormula.cpp:15
storm::logic::UntilFormula
Definition
UntilFormula.h:7
storm::logic::WeakUntilFormula
Definition
WeakUntilFormula.h:7
std
Definition
DFTIsomorphism.h:697
storm::logic
Definition
solutionFunctions.h:17
src
storm
logic
TraverseFormulaVisitor.cpp
Generated by
1.15.0