Storm
A Modern Probabilistic Model Checker
Loading...
Searching...
No Matches
AssignmentsFinder.cpp
Go to the documentation of this file.
2
4
5namespace storm {
6namespace jani {
7
9 return find(model, variable.getExpressionVariable());
10}
11
13 return find(automaton, variable.getExpressionVariable());
14}
15
17 ResultType res;
18 res.hasLocationAssignment = false;
19 res.hasEdgeAssignment = false;
21 ConstJaniTraverser::traverse(model, std::make_pair(&variable, &res));
22 return res;
23}
24
26 ResultType res;
27 res.hasLocationAssignment = false;
28 res.hasEdgeAssignment = false;
30 ConstJaniTraverser::traverse(automaton, std::make_pair(&variable, &res));
31 return res;
32}
33
34void AssignmentsFinder::traverse(Location const& location, boost::any const& data) {
35 auto resVar = boost::any_cast<std::pair<storm::expressions::Variable const*, ResultType*>>(data);
36 if (!resVar.second->hasLocationAssignment) {
37 for (auto const& assignment : location.getAssignments()) {
38 storm::jani::Variable const& assignedVariable = assignment.getVariable();
39 if (assignedVariable.getExpressionVariable() == *resVar.first) {
40 resVar.second->hasLocationAssignment = true;
41 break;
42 }
43 }
44 }
45}
46
47void AssignmentsFinder::traverse(TemplateEdge const& templateEdge, boost::any const& data) {
48 auto resVar = boost::any_cast<std::pair<storm::expressions::Variable const*, ResultType*>>(data);
49 if (!resVar.second->hasEdgeAssignment) {
50 for (auto const& assignment : templateEdge.getAssignments()) {
51 storm::jani::Variable const& assignedVariable = assignment.getVariable();
52 if (assignedVariable.getExpressionVariable() == *resVar.first) {
53 resVar.second->hasEdgeAssignment = true;
54 break;
55 }
56 }
57 }
58 for (auto const& dest : templateEdge.getDestinations()) {
59 traverse(dest, data);
60 }
61}
62
63void AssignmentsFinder::traverse(TemplateEdgeDestination const& templateEdgeDestination, boost::any const& data) {
64 auto resVar = boost::any_cast<std::pair<storm::expressions::Variable const*, ResultType*>>(data);
65 if (!resVar.second->hasEdgeDestinationAssignment) {
66 for (auto const& assignment : templateEdgeDestination.getOrderedAssignments()) {
67 storm::jani::Variable const& assignedVariable = assignment.getVariable();
68 if (assignedVariable.getExpressionVariable() == *resVar.first) {
69 resVar.second->hasEdgeDestinationAssignment = true;
70 break;
71 }
72 }
73 }
74}
75} // namespace jani
76} // namespace storm
virtual void traverse(Location const &location, boost::any const &data) override
ResultType find(Model const &model, storm::jani::Variable const &variable)
virtual void traverse(Model const &model, boost::any const &data)
Jani Location:
Definition Location.h:15
OrderedAssignments const & getAssignments() const
Retrieves the assignments of this location.
Definition Location.cpp:23
OrderedAssignments const & getOrderedAssignments() const
std::vector< TemplateEdgeDestination > const & getDestinations() const
OrderedAssignments const & getAssignments() const
storm::expressions::Variable const & getExpressionVariable() const
Retrieves the associated expression variable.
Definition Variable.cpp:26
LabParser.cpp.
Definition cli.cpp:18