#pragma once #include #include #include "src/storage/jani/CompositionVisitor.h" namespace storm { namespace jani { class Model; class ActionInformation { public: ActionInformation(std::set const& nonsilentActionIndices, std::map const& indexToNameMap, std::map const& nameToIndexMap, uint64_t silentActionIndex = 0); std::string const& getActionName(uint64_t index) const; uint64_t getActionIndex(std::string const& name) const; std::set const& getNonSilentActionIndices() const; uint64_t getSilentActionIndex() const; private: uint64_t silentActionIndex; std::set nonsilentActionIndices; std::map indexToNameMap; std::map nameToIndexMap; }; class CompositionActionInformationVisitor : public CompositionVisitor { public: CompositionActionInformationVisitor(storm::jani::Model const& model); ActionInformation getActionInformation(storm::jani::Composition const& composition); virtual boost::any visit(AutomatonComposition const& composition, boost::any const& data) override; virtual boost::any visit(RenameComposition const& composition, boost::any const& data) override; virtual boost::any visit(ParallelComposition const& composition, boost::any const& data) override; private: uint64_t addOrGetActionIndex(std::string const& name); storm::jani::Model const& model; uint64_t nextFreeActionIndex; std::map nameToIndexMap; std::map indexToNameMap; }; } }