#include "src/storage/dd/DdMetaVariable.h" #include "src/utility/macros.h" namespace storm { namespace dd { template DdMetaVariable::DdMetaVariable(std::string const& name, int_fast64_t low, int_fast64_t high, std::vector> const& ddVariables) : name(name), type(MetaVariableType::Int), low(low), high(high), ddVariables(ddVariables) { this->createCube(); } template DdMetaVariable::DdMetaVariable(std::string const& name, std::vector> const& ddVariables) : name(name), type(MetaVariableType::Bool), low(0), high(1), ddVariables(ddVariables) { this->createCube(); } template std::string const& DdMetaVariable::getName() const { return this->name; } template MetaVariableType DdMetaVariable::getType() const { return this->type; } template int_fast64_t DdMetaVariable::getLow() const { return this->low; } template int_fast64_t DdMetaVariable::getHigh() const { return this->high; } template std::size_t DdMetaVariable::getNumberOfDdVariables() const { return this->ddVariables.size(); } template std::vector> const& DdMetaVariable::getDdVariables() const { return this->ddVariables; } template Bdd const& DdMetaVariable::getCube() const { return this->cube; } template void DdMetaVariable::createCube() { STORM_LOG_ASSERT(!this->ddVariables.empty(), "The DD variables must not be empty."); auto it = this->ddVariables.begin(); this->cube = *it; ++it; for (auto ite = this->ddVariables.end(); it != ite; ++it) { this->cube &= *it; } } template class DdMetaVariable; template class DdMetaVariable; } }