#include "storm/models/sparse/Ctmc.h" #include "storm/models/sparse/StandardRewardModel.h" #include "storm/adapters/CarlAdapter.h" #include "storm/utility/macros.h" namespace storm { namespace models { namespace sparse { template Ctmc::Ctmc(storm::storage::SparseMatrix const& rateMatrix, storm::models::sparse::StateLabeling const& stateLabeling, std::unordered_map const& rewardModels) : Ctmc(storm::storage::sparse::ModelComponents(rateMatrix, stateLabeling, rewardModels, true)) { // Intentionally left empty } template Ctmc::Ctmc(storm::storage::SparseMatrix&& rateMatrix, storm::models::sparse::StateLabeling&& stateLabeling, std::unordered_map&& rewardModels) : Ctmc(storm::storage::sparse::ModelComponents(std::move(rateMatrix), std::move(stateLabeling), std::move(rewardModels), true)) { // Intentionally left empty } template Ctmc::Ctmc(storm::storage::sparse::ModelComponents const& components) : DeterministicModel(storm::models::ModelType::Ctmc, components) { if (components.exitRates) { exitRates = components.exitRates.get(); } if (!components.rateTransitions) { this->getTransitionMatrix().scaleRowsInPlace(exitRates); } } template Ctmc::Ctmc(storm::storage::sparse::ModelComponents&& components) : DeterministicModel(storm::models::ModelType::Ctmc, std::move(components)) { if (components.exitRates) { exitRates = std::move(components.exitRates.get()); } if (!components.rateTransitions) { this->getTransitionMatrix().scaleRowsInPlace(exitRates); } } template std::vector const& Ctmc::getExitRateVector() const { return exitRates; } template std::vector& Ctmc::getExitRateVector() { return exitRates; } template std::vector Ctmc::createExitRateVector(storm::storage::SparseMatrix const& rateMatrix) { std::vector exitRates(rateMatrix.getRowCount()); for (uint_fast64_t row = 0; row < rateMatrix.getRowCount(); ++row) { exitRates[row] = rateMatrix.getRowSum(row); } return exitRates; } template class Ctmc; #ifdef STORM_HAVE_CARL template class Ctmc; template class Ctmc>; template class Ctmc; #endif } // namespace sparse } // namespace models } // namespace storm