19 changed files with 269 additions and 3 deletions
			
			
		- 
					8src/logic/CloneVisitor.cpp
- 
					1src/logic/CloneVisitor.h
- 
					12src/logic/Formula.cpp
- 
					5src/logic/Formula.h
- 
					8src/logic/FormulaInformationVisitor.cpp
- 
					1src/logic/FormulaInformationVisitor.h
- 
					1src/logic/FormulaVisitor.h
- 
					1src/logic/Formulas.h
- 
					1src/logic/FormulasForwardDeclarations.h
- 
					15src/logic/FragmentChecker.cpp
- 
					1src/logic/FragmentChecker.h
- 
					38src/logic/FragmentSpecification.cpp
- 
					12src/logic/FragmentSpecification.h
- 
					78src/logic/MultiObjectiveFormula.cpp
- 
					35src/logic/MultiObjectiveFormula.h
- 
					4src/logic/ToExpressionVisitor.cpp
- 
					1src/logic/ToExpressionVisitor.h
- 
					17src/parser/FormulaParser.cpp
- 
					31test/functional/parser/FormulaParserTest.cpp
| @ -0,0 +1,78 @@ | |||
| #include "src/logic/MultiObjectiveFormula.h"
 | |||
| 
 | |||
| #include "src/logic/FormulaVisitor.h"
 | |||
| #include "src/utility/macros.h"
 | |||
| #include "src/exceptions/InvalidArgumentException.h"
 | |||
| 
 | |||
| namespace storm { | |||
|     namespace logic { | |||
|          | |||
|         MultiObjectiveFormula::MultiObjectiveFormula(std::vector<std::shared_ptr<Formula const>> const& subformulas) : subformulas(subformulas) { | |||
|             //Intentionally left empty
 | |||
|         } | |||
|          | |||
|         MultiObjectiveFormula::~MultiObjectiveFormula() { | |||
|             //Intentionally left empty
 | |||
|         } | |||
|          | |||
|         bool MultiObjectiveFormula::isMultiObjectiveFormula() const { | |||
|             return true; | |||
|         } | |||
|          | |||
|         bool MultiObjectiveFormula::hasQualitativeResult() const { | |||
|             for(auto const& subformula : this->subformulas){ | |||
|                 if(subformula->hasQuantitativeResult()){ | |||
|                     return false; | |||
|                 } | |||
|             } | |||
|             return true; | |||
|         } | |||
|          | |||
|         bool MultiObjectiveFormula::hasQuantitativeResult() const { | |||
|             return !hasQualitativeResult(); | |||
|         }; | |||
|          | |||
|         Formula const& MultiObjectiveFormula::getSubformula(uint_fast64_t index) const { | |||
|             STORM_LOG_THROW(index < getNumberOfSubformulas(), storm::exceptions::InvalidArgumentException, "Tried to access subformula with index " << index << " but there are only " << this->getNumberOfSubformulas() << " subformulas."); | |||
|             return *this->subformulas[index]; | |||
|         } | |||
|          | |||
|         uint_fast64_t MultiObjectiveFormula::getNumberOfSubformulas() const { | |||
|             return this->subformulas.size(); | |||
|         } | |||
|          | |||
|         boost::any MultiObjectiveFormula::accept(FormulaVisitor const& visitor, boost::any const& data) const { | |||
|             return visitor.visit(*this, data); | |||
|         } | |||
|          | |||
|         void MultiObjectiveFormula::gatherAtomicExpressionFormulas(std::vector<std::shared_ptr<AtomicExpressionFormula const>>& atomicExpressionFormulas) const { | |||
|             for(auto const& subformula : this->subformulas){ | |||
|                 subformula->gatherAtomicExpressionFormulas(atomicExpressionFormulas); | |||
|             } | |||
|         } | |||
|          | |||
|         void MultiObjectiveFormula::gatherAtomicLabelFormulas(std::vector<std::shared_ptr<AtomicLabelFormula const>>& atomicLabelFormulas) const { | |||
|             for(auto const& subformula : this->subformulas){ | |||
|                 subformula->gatherAtomicLabelFormulas(atomicLabelFormulas); | |||
|             } | |||
|         } | |||
|          | |||
|         void MultiObjectiveFormula::gatherReferencedRewardModels(std::set<std::string>& referencedRewardModels) const { | |||
|             for(auto const& subformula : this->subformulas){ | |||
|                 subformula->gatherReferencedRewardModels(referencedRewardModels); | |||
|             } | |||
|         } | |||
|          | |||
|         std::ostream& MultiObjectiveFormula::writeToStream(std::ostream &out) const { | |||
|             out << "multi("; | |||
|             for(uint_fast64_t index = 0; index < this->getNumberOfSubformulas(); ++index){ | |||
|                 if(index>0){ | |||
|                     out << ", "; | |||
|                 } | |||
|                 this->getSubformula(index).writeToStream(out); | |||
|             } | |||
|             out << ")"; | |||
|             return out; | |||
|         } | |||
|     } | |||
| } | |||
| @ -0,0 +1,35 @@ | |||
| #ifndef STORM_LOGIC_MULTIOBJECTIVEFORMULA_H_ | |||
| #define STORM_LOGIC_MULTIOBJECTIVEFORMULA_H_ | |||
| 
 | |||
| #include "src/logic/Formula.h" | |||
| 
 | |||
| namespace storm { | |||
|     namespace logic { | |||
|         class MultiObjectiveFormula : public Formula { | |||
|         public: | |||
|             MultiObjectiveFormula(std::vector<std::shared_ptr<Formula const>> const& subformulas); | |||
|              | |||
|             virtual ~MultiObjectiveFormula(); | |||
|              | |||
|             virtual bool isMultiObjectiveFormula() const override; | |||
|              | |||
|             virtual bool hasQualitativeResult() const override; | |||
|             virtual bool hasQuantitativeResult() const override; | |||
|              | |||
|             Formula const& getSubformula(uint_fast64_t index) const; | |||
|             uint_fast64_t getNumberOfSubformulas() const; | |||
|              | |||
|              | |||
|             virtual boost::any accept(FormulaVisitor const& visitor, boost::any const& data) const override; | |||
|             virtual void gatherAtomicExpressionFormulas(std::vector<std::shared_ptr<AtomicExpressionFormula const>>& atomicExpressionFormulas) const override; | |||
|             virtual void gatherAtomicLabelFormulas(std::vector<std::shared_ptr<AtomicLabelFormula const>>& atomicLabelFormulas) const override; | |||
|             virtual void gatherReferencedRewardModels(std::set<std::string>& referencedRewardModels) const override; | |||
|              | |||
|             virtual std::ostream& writeToStream(std::ostream& out) const override; | |||
|         private: | |||
|             std::vector<std::shared_ptr<Formula const>> subformulas; | |||
|         }; | |||
|     } | |||
| } | |||
| 
 | |||
| #endif /* STORM_LOGIC_MULTIOBJECTIVEFORMULA_H_ */ | |||
						Write
						Preview
					
					
					Loading…
					
					Cancel
						Save
					
		Reference in new issue