You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

71 lines
2.4 KiB

#pragma once
#include <ostream>
#include <vector>
#include "storm/models/ModelType.h"
#include "storm/storage/dd/DdType.h"
#include "storm/builder/BuilderType.h"
namespace storm {
// Forward Declarations
namespace jani {
class Property;
}
namespace logic {
class Formula;
}
namespace modelchecker{
template<typename FormulaType, typename ValueType>
class CheckTask;
}
namespace storage {
class SymbolicModelDescription;
}
namespace utility {
/// An enumeration of all engines.
enum class Engine {
// The last one should always be 'Unknown' to make sure that the getEngines() method below works.
Sparse, Hybrid, Dd, DdSparse, Jit, Exploration, AbstractionRefinement, Portfolio, Unknown
};
/*!
* Returns a list of all available engines (excluding Unknown)
*/
std::vector<Engine> getEngines();
/*!
* Returns a string representation of the given engine.
*/
std::string toString(Engine const& engine);
/*!
* Writes the string representation of the given engine to the given stream
*/
std::ostream& operator<<(std::ostream& os, Engine const& engine);
/*!
* Parses the string representation of an engine and returns the corresponding engine.
* If the engine is not found, we print an error and return Engine::Unknown.
*/
Engine engineFromString(std::string const& engineStr);
/*!
* Returns the builder type used for the given engine.
*/
storm::builder::BuilderType getBuilderType(storm::utility::Engine const& engine);
/*!
* Returns false if the given model description and one of the given properties can certainly not be handled by the given engine.
* Notice that the set of handable model checking queries is only overapproximated, i.e. if this returns true,
* the query could still be not supported by the engine. This behavior is due to the fact that we sometimes need
* to actually build the model in order to decide whether it is supported.
*/
template <typename ValueType>
bool canHandle(storm::utility::Engine const& engine, std::vector<storm::jani::Property> const& properties, storm::storage::SymbolicModelDescription const& modelDescription);
}
}