Storm
A Modern Probabilistic Model Checker
Loading...
Searching...
No Matches
CompositionToJaniVisitor.cpp
Go to the documentation of this file.
3
7
8namespace storm {
9namespace prism {
10
11std::shared_ptr<storm::jani::Composition> CompositionToJaniVisitor::toJani(Composition const& composition, storm::jani::Model const& model) {
12 auto result = boost::any_cast<std::shared_ptr<storm::jani::Composition>>(composition.accept(*this, model));
13 return result;
14}
15
16boost::any CompositionToJaniVisitor::visit(ModuleComposition const& composition, boost::any const&) {
17 std::shared_ptr<storm::jani::Composition> result = std::make_shared<storm::jani::AutomatonComposition>(composition.getModuleName());
18 return result;
19}
20
21boost::any CompositionToJaniVisitor::visit(RenamingComposition const& composition, boost::any const& data) {
22 std::vector<storm::jani::SynchronizationVector> synchronizationVectors;
23 for (auto const& renamingPair : composition.getActionRenaming()) {
24 synchronizationVectors.push_back(storm::jani::SynchronizationVector({renamingPair.first}, renamingPair.second));
25 }
26 std::shared_ptr<storm::jani::Composition> result = std::make_shared<storm::jani::ParallelComposition>(
27 boost::any_cast<std::shared_ptr<storm::jani::Composition>>(composition.getSubcomposition().accept(*this, data)), synchronizationVectors);
28 return result;
29}
30
31boost::any CompositionToJaniVisitor::visit(HidingComposition const& composition, boost::any const& data) {
32 std::vector<storm::jani::SynchronizationVector> synchronizationVectors;
33 for (auto const& action : composition.getActionsToHide()) {
34 synchronizationVectors.push_back(storm::jani::SynchronizationVector({action}, storm::jani::Model::SILENT_ACTION_NAME));
35 }
36 std::shared_ptr<storm::jani::Composition> result = std::make_shared<storm::jani::ParallelComposition>(
37 boost::any_cast<std::shared_ptr<storm::jani::Composition>>(composition.getSubcomposition().accept(*this, data)), synchronizationVectors);
38 return result;
39}
40
41boost::any CompositionToJaniVisitor::visit(SynchronizingParallelComposition const& composition, boost::any const& data) {
42 auto leftSubcomposition = boost::any_cast<std::shared_ptr<storm::jani::Composition>>(composition.getLeftSubcomposition().accept(*this, data));
43 auto rightSubcomposition = boost::any_cast<std::shared_ptr<storm::jani::Composition>>(composition.getRightSubcomposition().accept(*this, data));
44
45 storm::jani::Model const& model = boost::any_cast<storm::jani::Model const&>(data);
46 storm::jani::CompositionInformation leftActionInformation = storm::jani::CompositionInformationVisitor(model, *leftSubcomposition).getInformation();
47 storm::jani::CompositionInformation rightActionInformation = storm::jani::CompositionInformationVisitor(model, *rightSubcomposition).getInformation();
48
49 std::set<std::string> leftActions;
50 for (auto const& actionIndex : leftActionInformation.getNonSilentActionIndices()) {
51 leftActions.insert(leftActionInformation.getActionName(actionIndex));
52 }
53 std::set<std::string> rightActions;
54 for (auto const& actionIndex : rightActionInformation.getNonSilentActionIndices()) {
55 rightActions.insert(rightActionInformation.getActionName(actionIndex));
56 }
57
58 std::set<std::string> commonActions;
59 std::set_intersection(leftActions.begin(), leftActions.end(), rightActions.begin(), rightActions.end(),
60 std::inserter(commonActions, commonActions.begin()));
61
62 std::shared_ptr<storm::jani::Composition> result =
63 std::make_shared<storm::jani::ParallelComposition>(leftSubcomposition, rightSubcomposition, commonActions);
64 return result;
65}
66
67boost::any CompositionToJaniVisitor::visit(InterleavingParallelComposition const& composition, boost::any const& data) {
68 auto leftSubcomposition = boost::any_cast<std::shared_ptr<storm::jani::Composition>>(composition.getLeftSubcomposition().accept(*this, data));
69 auto rightSubcomposition = boost::any_cast<std::shared_ptr<storm::jani::Composition>>(composition.getRightSubcomposition().accept(*this, data));
70 std::shared_ptr<storm::jani::Composition> result =
71 std::make_shared<storm::jani::ParallelComposition>(leftSubcomposition, rightSubcomposition, std::set<std::string>());
72 return result;
73}
74
75boost::any CompositionToJaniVisitor::visit(RestrictedParallelComposition const& composition, boost::any const& data) {
76 auto leftSubcomposition = boost::any_cast<std::shared_ptr<storm::jani::Composition>>(composition.getLeftSubcomposition().accept(*this, data));
77 auto rightSubcomposition = boost::any_cast<std::shared_ptr<storm::jani::Composition>>(composition.getRightSubcomposition().accept(*this, data));
78 std::shared_ptr<storm::jani::Composition> result =
79 std::make_shared<storm::jani::ParallelComposition>(leftSubcomposition, rightSubcomposition, composition.getSynchronizingActions());
80 return result;
81}
82} // namespace prism
83} // namespace storm
std::string const & getActionName(uint64_t index) const
std::set< uint64_t > const & getNonSilentActionIndices() const
static const std::string SILENT_ACTION_NAME
The name of the silent action.
Definition Model.h:639
virtual boost::any accept(CompositionVisitor &visitor, boost::any const &data) const =0
virtual boost::any visit(ModuleComposition const &composition, boost::any const &data) override
std::shared_ptr< storm::jani::Composition > toJani(Composition const &composition, storm::jani::Model const &model)
std::set< std::string > const & getActionsToHide() const
Composition const & getSubcomposition() const
std::string const & getModuleName() const
Composition const & getLeftSubcomposition() const
Composition const & getRightSubcomposition() const
Composition const & getSubcomposition() const
std::map< std::string, std::string > const & getActionRenaming() const
std::set< std::string > const & getSynchronizingActions() const
LabParser.cpp.
Definition cli.cpp:18