63 lines
2.5 KiB

#pragma once
#include<memory>
#include <boost/optional.hpp>
#include "storm/environment/Environment.h"
#include "storm/environment/SubEnvironment.h"
#include "storm/solver/SolverSelectionOptions.h"
#include "storm/adapters/RationalNumberAdapter.h"
namespace storm {
// Forward declare subenvironments
class EigenSolverEnvironment;
class GmmxxSolverEnvironment;
class NativeSolverEnvironment;
class MinMaxSolverEnvironment;
class GameSolverEnvironment;
class TopologicalSolverEnvironment;
class SolverEnvironment {
public:
SolverEnvironment();
~SolverEnvironment();
EigenSolverEnvironment& eigen();
EigenSolverEnvironment const& eigen() const;
GmmxxSolverEnvironment& gmmxx();
GmmxxSolverEnvironment const& gmmxx() const;
NativeSolverEnvironment& native();
NativeSolverEnvironment const& native() const;
MinMaxSolverEnvironment& minMax();
MinMaxSolverEnvironment const& minMax() const;
GameSolverEnvironment& game();
GameSolverEnvironment const& game() const;
TopologicalSolverEnvironment& topological();
TopologicalSolverEnvironment const& topological() const;
bool isForceSoundness() const;
void setForceSoundness(bool value);
storm::solver::EquationSolverType const& getLinearEquationSolverType() const;
void setLinearEquationSolverType(storm::solver::EquationSolverType const& value, bool isSetFromDefault = false);
bool isLinearEquationSolverTypeSetFromDefaultValue() const;
std::pair<boost::optional<storm::RationalNumber>, boost::optional<bool>> getPrecisionOfLinearEquationSolver(storm::solver::EquationSolverType const& solverType) const;
void setLinearEquationSolverPrecision(boost::optional<storm::RationalNumber> const& newPrecision, boost::optional<bool> const& relativePrecision = boost::none);
private:
SubEnvironment<EigenSolverEnvironment> eigenSolverEnvironment;
SubEnvironment<GmmxxSolverEnvironment> gmmxxSolverEnvironment;
SubEnvironment<NativeSolverEnvironment> nativeSolverEnvironment;
SubEnvironment<GameSolverEnvironment> gameSolverEnvironment;
SubEnvironment<TopologicalSolverEnvironment> topologicalSolverEnvironment;
SubEnvironment<MinMaxSolverEnvironment> minMaxSolverEnvironment;
storm::solver::EquationSolverType linearEquationSolverType;
bool linearEquationSolverTypeSetFromDefault;
bool forceSoundness;
};
}