#ifndef EXPLICITDFTMODELBUILDER_H #define EXPLICITDFTMODELBUILDER_H #include "../storage/dft/DFT.h" #include #include #include #include #include #include #include #include #include namespace storm { namespace builder { template class ExplicitDFTModelBuilder { using DFTElementPointer = std::shared_ptr>; using DFTElementCPointer = std::shared_ptr const>; using DFTGatePointer = std::shared_ptr>; using DFTStatePointer = std::shared_ptr>; // A structure holding the individual components of a model. struct ModelComponents { ModelComponents(); // The transition matrix. storm::storage::SparseMatrix transitionMatrix; // The state labeling. storm::models::sparse::StateLabeling stateLabeling; // The Markovian states. storm::storage::BitVector markovianStates; // The exit rates. std::vector exitRates; // A vector that stores a labeling for each choice. boost::optional>> choiceLabeling; }; storm::storage::DFT const& mDft; std::shared_ptr mStateGenerationInfo; storm::storage::BitVectorHashMap mStates; size_t newIndex = 0; public: ExplicitDFTModelBuilder(storm::storage::DFT const& dft); std::shared_ptr> buildModel(); private: bool exploreStates(std::queue& stateQueue, storm::storage::SparseMatrixBuilder& transitionMatrixBuilder, std::vector& markovianStates, std::vector& exitRates); }; } } #endif /* EXPLICITDFTMODELBUILDER_H */