diff --git a/src/builder/DdJaniModelBuilder.cpp b/src/builder/DdJaniModelBuilder.cpp index 2f65a58b0..9a6a2681d 100644 --- a/src/builder/DdJaniModelBuilder.cpp +++ b/src/builder/DdJaniModelBuilder.cpp @@ -1032,6 +1032,7 @@ namespace storm { for (auto const& actionIndex : actionInformation.getNonSilentActionIndices()) { actionIndexToLocalNondeterminismVariableOffset[actionIndex] = 0; } + actionIndexToLocalNondeterminismVariableOffset[actionInformation.getSilentActionIndex()] = 0; AutomatonDd globalAutomaton = boost::any_cast<AutomatonDd>(this->model.getSystemComposition().accept(*this, actionIndexToLocalNondeterminismVariableOffset)); return buildSystemFromAutomaton(globalAutomaton); diff --git a/src/storage/dd/Dd.cpp b/src/storage/dd/Dd.cpp index bae32c108..ec6b8b2aa 100644 --- a/src/storage/dd/Dd.cpp +++ b/src/storage/dd/Dd.cpp @@ -14,6 +14,11 @@ namespace storm { // Intentionally left empty. } + template<DdType LibraryType> + Dd<LibraryType>::~Dd() { + // Intentionally left empty. + } + template<DdType LibraryType> bool Dd<LibraryType>::containsMetaVariable(storm::expressions::Variable const& metaVariable) const { return containedMetaVariables.find(metaVariable) != containedMetaVariables.end(); @@ -87,4 +92,4 @@ namespace storm { template class Dd<storm::dd::DdType::CUDD>; template class Dd<storm::dd::DdType::Sylvan>; } -} \ No newline at end of file +} diff --git a/src/storage/dd/Dd.h b/src/storage/dd/Dd.h index 18605c259..71f392dea 100644 --- a/src/storage/dd/Dd.h +++ b/src/storage/dd/Dd.h @@ -30,6 +30,8 @@ namespace storm { Dd(Dd<LibraryType>&& other) = default; Dd& operator=(Dd<LibraryType>&& other) = default; + virtual ~Dd(); + /*! * Retrieves the support of the current DD. * @@ -181,4 +183,4 @@ namespace storm { } } -#endif /* STORM_STORAGE_DD_DD_H_ */ \ No newline at end of file +#endif /* STORM_STORAGE_DD_DD_H_ */ diff --git a/src/storage/jani/Automaton.h b/src/storage/jani/Automaton.h index f2c784084..9df752612 100644 --- a/src/storage/jani/Automaton.h +++ b/src/storage/jani/Automaton.h @@ -298,7 +298,7 @@ namespace storm { * Retrieves the action indices appearing at some edge of the automaton. */ std::set<uint64_t> getUsedActionIndices() const; - + private: /// The name of the automaton. std::string name; @@ -330,4 +330,4 @@ namespace storm { }; } -} \ No newline at end of file +} diff --git a/src/storage/jani/CompositionActionInformationVisitor.cpp b/src/storage/jani/CompositionActionInformationVisitor.cpp index ad8812648..683995d07 100644 --- a/src/storage/jani/CompositionActionInformationVisitor.cpp +++ b/src/storage/jani/CompositionActionInformationVisitor.cpp @@ -6,7 +6,7 @@ namespace storm { namespace jani { - ActionInformation::ActionInformation(std::set<uint64_t> const& nonsilentActionIndices, std::map<uint64_t, std::string> const& indexToNameMap, std::map<std::string, uint64_t> const& nameToIndexMap) : nonsilentActionIndices(nonsilentActionIndices), indexToNameMap(indexToNameMap), nameToIndexMap(nameToIndexMap) { + ActionInformation::ActionInformation(std::set<uint64_t> const& nonsilentActionIndices, std::map<uint64_t, std::string> const& indexToNameMap, std::map<std::string, uint64_t> const& nameToIndexMap, uint64_t silentActionIndex) : silentActionIndex(silentActionIndex), nonsilentActionIndices(nonsilentActionIndices), indexToNameMap(indexToNameMap), nameToIndexMap(nameToIndexMap) { // Intentionally left empty. } @@ -21,6 +21,10 @@ namespace storm { std::set<uint64_t> const& ActionInformation::getNonSilentActionIndices() const { return nonsilentActionIndices; } + + uint64_t ActionInformation::getSilentActionIndex() const { + return silentActionIndex; + } CompositionActionInformationVisitor::CompositionActionInformationVisitor(storm::jani::Model const& model) : model(model), nextFreeActionIndex(0), nameToIndexMap(), indexToNameMap() { // Intentionally left empty. @@ -32,6 +36,11 @@ namespace storm { // Determine the next free index we can give out to a new action. for (auto const& action : model.getActions()) { + uint64_t actionIndex = model.getActionIndex(action.getName()); + + nameToIndexMap[action.getName()] = model.getActionIndex(action.getName()); + indexToNameMap[actionIndex] = action.getName(); + nextFreeActionIndex = std::max(nextFreeActionIndex, model.getActionIndex(action.getName())); } ++nextFreeActionIndex; @@ -42,7 +51,9 @@ namespace storm { } boost::any CompositionActionInformationVisitor::visit(AutomatonComposition const& composition, boost::any const& data) { - return model.getAutomaton(composition.getAutomatonName()).getUsedActionIndices(); + std::set<uint64_t> result = model.getAutomaton(composition.getAutomatonName()).getUsedActionIndices(); + result.erase(model.getSilentActionIndex()); + return result; } boost::any CompositionActionInformationVisitor::visit(RenameComposition const& composition, boost::any const& data) { diff --git a/src/storage/jani/CompositionActionInformationVisitor.h b/src/storage/jani/CompositionActionInformationVisitor.h index 93017b8a1..705773c27 100644 --- a/src/storage/jani/CompositionActionInformationVisitor.h +++ b/src/storage/jani/CompositionActionInformationVisitor.h @@ -12,13 +12,15 @@ namespace storm { class ActionInformation { public: - ActionInformation(std::set<uint64_t> const& nonsilentActionIndices, std::map<uint64_t, std::string> const& indexToNameMap, std::map<std::string, uint64_t> const& nameToIndexMap); + ActionInformation(std::set<uint64_t> const& nonsilentActionIndices, std::map<uint64_t, std::string> const& indexToNameMap, std::map<std::string, uint64_t> const& nameToIndexMap, uint64_t silentActionIndex = 0); std::string const& getActionName(uint64_t index) const; uint64_t getActionIndex(std::string const& name) const; std::set<uint64_t> const& getNonSilentActionIndices() const; + uint64_t getSilentActionIndex() const; private: + uint64_t silentActionIndex; std::set<uint64_t> nonsilentActionIndices; std::map<uint64_t, std::string> indexToNameMap; std::map<std::string, uint64_t> nameToIndexMap; diff --git a/src/storage/sparse/StateValuations.cpp b/src/storage/sparse/StateValuations.cpp index f3f98818f..a574d7a10 100644 --- a/src/storage/sparse/StateValuations.cpp +++ b/src/storage/sparse/StateValuations.cpp @@ -8,10 +8,14 @@ namespace storm { // Intentionally left empty. } + StateValuations::~StateValuations() { + // Intentionally left empty. + } + std::string StateValuations::stateInfo(state_type const& state) const { return valuations[state].toString(); } } } -} \ No newline at end of file +} diff --git a/src/storage/sparse/StateValuations.h b/src/storage/sparse/StateValuations.h index b64620efd..a378dcaf8 100644 --- a/src/storage/sparse/StateValuations.h +++ b/src/storage/sparse/StateValuations.h @@ -20,6 +20,8 @@ namespace storm { */ StateValuations(state_type const& numberOfStates); + virtual ~StateValuations(); + // A mapping from state indices to their variable valuations. std::vector<storm::expressions::SimpleValuation> valuations; @@ -30,4 +32,4 @@ namespace storm { } } -#endif /* STORM_STORAGE_SPARSE_STATEVALUATIONS_H_ */ \ No newline at end of file +#endif /* STORM_STORAGE_SPARSE_STATEVALUATIONS_H_ */