78 lines
3.4 KiB
78 lines
3.4 KiB
#include "storm/logic/ConditionalFormula.h"
|
|
#include "storm/logic/FormulaVisitor.h"
|
|
|
|
#include "storm/utility/macros.h"
|
|
#include "storm/exceptions/InvalidPropertyException.h"
|
|
|
|
namespace storm {
|
|
namespace logic {
|
|
ConditionalFormula::ConditionalFormula(std::shared_ptr<Formula const> const& subformula, std::shared_ptr<Formula const> const& conditionFormula, FormulaContext context) : subformula(subformula), conditionFormula(conditionFormula), context(context) {
|
|
STORM_LOG_THROW(context == FormulaContext::Probability || context == FormulaContext::Reward, storm::exceptions::InvalidPropertyException, "Invalid context for formula.");
|
|
}
|
|
|
|
Formula const& ConditionalFormula::getSubformula() const {
|
|
return *subformula;
|
|
}
|
|
|
|
Formula const& ConditionalFormula::getConditionFormula() const {
|
|
return *conditionFormula;
|
|
}
|
|
|
|
FormulaContext const& ConditionalFormula::getContext() const {
|
|
return context;
|
|
}
|
|
|
|
bool ConditionalFormula::isConditionalProbabilityFormula() const {
|
|
return context == FormulaContext::Probability;
|
|
}
|
|
|
|
bool ConditionalFormula::isConditionalRewardFormula() const {
|
|
return context == FormulaContext::Reward;
|
|
}
|
|
|
|
boost::any ConditionalFormula::accept(FormulaVisitor const& visitor, boost::any const& data) const {
|
|
return visitor.visit(*this, data);
|
|
}
|
|
|
|
void ConditionalFormula::gatherAtomicExpressionFormulas(std::vector<std::shared_ptr<AtomicExpressionFormula const>>& atomicExpressionFormulas) const {
|
|
this->getSubformula().gatherAtomicExpressionFormulas(atomicExpressionFormulas);
|
|
this->getConditionFormula().gatherAtomicExpressionFormulas(atomicExpressionFormulas);
|
|
}
|
|
|
|
void ConditionalFormula::gatherAtomicLabelFormulas(std::vector<std::shared_ptr<AtomicLabelFormula const>>& atomicLabelFormulas) const {
|
|
this->getSubformula().gatherAtomicLabelFormulas(atomicLabelFormulas);
|
|
this->getConditionFormula().gatherAtomicLabelFormulas(atomicLabelFormulas);
|
|
}
|
|
|
|
void ConditionalFormula::gatherReferencedRewardModels(std::set<std::string>& referencedRewardModels) const {
|
|
this->getSubformula().gatherReferencedRewardModels(referencedRewardModels);
|
|
this->getConditionFormula().gatherReferencedRewardModels(referencedRewardModels);
|
|
}
|
|
|
|
void ConditionalFormula::gatherUsedVariables(std::set<storm::expressions::Variable>& usedVariables) const {
|
|
this->getSubformula().gatherUsedVariables(usedVariables);
|
|
this->getConditionFormula().gatherUsedVariables(usedVariables);
|
|
}
|
|
|
|
bool ConditionalFormula::hasQualitativeResult() const {
|
|
return false;
|
|
}
|
|
|
|
bool ConditionalFormula::hasQuantitativeResult() const {
|
|
return true;
|
|
}
|
|
|
|
std::ostream& ConditionalFormula::writeToStream(std::ostream& out, bool allowParentheses) const {
|
|
if (allowParentheses) {
|
|
out << "(";
|
|
}
|
|
this->getSubformula().writeToStream(out, true);
|
|
out << " || ";
|
|
this->getConditionFormula().writeToStream(out, true);
|
|
if (allowParentheses) {
|
|
out << ")";
|
|
}
|
|
return out;
|
|
}
|
|
}
|
|
}
|