diff --git a/src/adapters/ExplicitModelAdapter.h b/src/adapters/ExplicitModelAdapter.h index dbd5c1994..edde6925d 100644 --- a/src/adapters/ExplicitModelAdapter.h +++ b/src/adapters/ExplicitModelAdapter.h @@ -28,7 +28,7 @@ #include "src/models/AtomicPropositionsLabeling.h" #include "src/storage/SparseMatrix.h" #include "src/settings/SettingsManager.h" -#include "src/exceptions/ExceptionMacros.h" +#include "src/utility/macros.h" #include "src/exceptions/WrongFormatException.h" namespace storm { @@ -106,7 +106,7 @@ namespace storm { std::map<std::string, storm::expressions::Expression> constantDefinitions = storm::utility::prism::parseConstantDefinitionString(program, constantDefinitionString); storm::prism::Program preparedProgram = program.defineUndefinedConstants(constantDefinitions); - LOG_THROW(!preparedProgram.hasUndefinedConstants(), storm::exceptions::InvalidArgumentException, "Program still contains undefined constants."); + STORM_LOG_THROW(!preparedProgram.hasUndefinedConstants(), storm::exceptions::InvalidArgumentException, "Program still contains undefined constants."); // Now that we have defined all the constants in the program, we need to substitute their appearances in // all expressions in the program so we can then evaluate them without having to store the values of the @@ -173,10 +173,10 @@ namespace storm { { newValue = assignment.getExpression().evaluateAsInt(baseState); auto const& boundsPair = variableInformation.variableToBoundsMap.find(assignment.getVariableName()); - LOG_THROW(boundsPair->second.first <= newValue && newValue <= boundsPair->second.second, storm::exceptions::InvalidArgumentException, "Invalid value " << newValue << " for variable '" << assignment.getVariableName() << "'."); + STORM_LOG_THROW(boundsPair->second.first <= newValue && newValue <= boundsPair->second.second, storm::exceptions::InvalidArgumentException, "Invalid value " << newValue << " for variable '" << assignment.getVariableName() << "'."); newState->setIntegerValue(assignment.getVariableName(), newValue); break; } - default: LOG_ASSERT(false, "Invalid type of assignment."); break; + default: STORM_LOG_ASSERT(false, "Invalid type of assignment."); break; } } return newState; @@ -312,7 +312,7 @@ namespace storm { } // Check that the resulting distribution is in fact a distribution. - LOG_THROW(std::abs(1 - probabilitySum) < storm::settings::generalSettings().getPrecision(), storm::exceptions::WrongFormatException, "Probabilities do not sum to one for command '" << command << "'."); + STORM_LOG_THROW(std::abs(1 - probabilitySum) < storm::settings::generalSettings().getPrecision(), storm::exceptions::WrongFormatException, "Probabilities do not sum to one for command '" << command << "'."); } } diff --git a/src/adapters/Z3ExpressionAdapter.h b/src/adapters/Z3ExpressionAdapter.h index 7f850f9d3..4c162378f 100644 --- a/src/adapters/Z3ExpressionAdapter.h +++ b/src/adapters/Z3ExpressionAdapter.h @@ -18,7 +18,7 @@ #include "storm-config.h" #include "src/storage/expressions/Expressions.h" -#include "src/exceptions/ExceptionMacros.h" +#include "src/utility/macros.h" #include "src/exceptions/ExpressionEvaluationException.h" #include "src/exceptions/InvalidTypeException.h" #include "src/exceptions/NotImplementedException.h" @@ -68,7 +68,7 @@ namespace storm { variables = expression.getVariablesAndTypes(); } catch (storm::exceptions::InvalidTypeException* e) { - LOG_THROW(false, storm::exceptions::InvalidTypeException, "Encountered variable with ambigious type while trying to autocreate solver variables: " << e); + STORM_LOG_THROW(false, storm::exceptions::InvalidTypeException, "Encountered variable with ambigious type while trying to autocreate solver variables: " << e); } for (auto variableAndType : variables) { @@ -85,7 +85,7 @@ namespace storm { this->variableToExpressionMap.insert(std::make_pair(variableAndType.first, context.real_const(variableAndType.first.c_str()))); break; default: - LOG_THROW(false, storm::exceptions::InvalidTypeException, "Encountered variable with unknown type while trying to autocreate solver variables: " << variableAndType.first); + STORM_LOG_THROW(false, storm::exceptions::InvalidTypeException, "Encountered variable with unknown type while trying to autocreate solver variables: " << variableAndType.first); break; } } @@ -118,7 +118,7 @@ namespace storm { return storm::expressions::Expression::createTrue(); break; default: - LOG_THROW(false, storm::exceptions::ExpressionEvaluationException, "Failed to convert Z3 expression. Expression is constant boolean, but value is undefined."); + STORM_LOG_THROW(false, storm::exceptions::ExpressionEvaluationException, "Failed to convert Z3 expression. Expression is constant boolean, but value is undefined."); break; } } else if (expr.is_int() && expr.is_const()) { @@ -126,7 +126,7 @@ namespace storm { if (Z3_get_numeral_int64(expr.ctx(), expr, &value)) { return storm::expressions::Expression::createIntegerLiteral(value); } else { - LOG_THROW(false, storm::exceptions::ExpressionEvaluationException, "Failed to convert Z3 expression. Expression is constant integer and value does not fit into 64-bit integer."); + STORM_LOG_THROW(false, storm::exceptions::ExpressionEvaluationException, "Failed to convert Z3 expression. Expression is constant integer and value does not fit into 64-bit integer."); } } else if (expr.is_real() && expr.is_const()) { int_fast64_t num; @@ -134,7 +134,7 @@ namespace storm { if (Z3_get_numeral_rational_int64(expr.ctx(), expr, &num, &den)) { return storm::expressions::Expression::createDoubleLiteral(static_cast<double>(num) / static_cast<double>(den)); } else { - LOG_THROW(false, storm::exceptions::ExpressionEvaluationException, "Failed to convert Z3 expression. Expression is constant real and value does not fit into a fraction with 64-bit integer numerator and denominator."); + STORM_LOG_THROW(false, storm::exceptions::ExpressionEvaluationException, "Failed to convert Z3 expression. Expression is constant real and value does not fit into a fraction with 64-bit integer numerator and denominator."); } } else */ if (expr.is_app()) { @@ -149,7 +149,7 @@ namespace storm { return this->translateExpression(expr.arg(0)).ite(this->translateExpression(expr.arg(1)), this->translateExpression(expr.arg(2))); case Z3_OP_AND: { unsigned args = expr.num_args(); - LOG_THROW(args != 0, storm::exceptions::ExpressionEvaluationException, "Failed to convert Z3 expression. 0-ary AND is assumed to be an error."); + STORM_LOG_THROW(args != 0, storm::exceptions::ExpressionEvaluationException, "Failed to convert Z3 expression. 0-ary AND is assumed to be an error."); if (args == 1) { return this->translateExpression(expr.arg(0)); } else { @@ -162,7 +162,7 @@ namespace storm { } case Z3_OP_OR: { unsigned args = expr.num_args(); - LOG_THROW(args != 0, storm::exceptions::ExpressionEvaluationException, "Failed to convert Z3 expression. 0-ary OR is assumed to be an error."); + STORM_LOG_THROW(args != 0, storm::exceptions::ExpressionEvaluationException, "Failed to convert Z3 expression. 0-ary OR is assumed to be an error."); if (args == 1) { return this->translateExpression(expr.arg(0)); } else { @@ -208,7 +208,7 @@ namespace storm { if (Z3_get_numeral_int64(expr.ctx(), expr, &value)) { return storm::expressions::Expression::createIntegerLiteral(value); } else { - LOG_THROW(false, storm::exceptions::ExpressionEvaluationException, "Failed to convert Z3 expression. Expression is constant integer and value does not fit into 64-bit integer."); + STORM_LOG_THROW(false, storm::exceptions::ExpressionEvaluationException, "Failed to convert Z3 expression. Expression is constant integer and value does not fit into 64-bit integer."); } } else if (expr.is_real() && expr.is_const()) { long long num; @@ -216,12 +216,12 @@ namespace storm { if (Z3_get_numeral_rational_int64(expr.ctx(), expr, &num, &den)) { return storm::expressions::Expression::createDoubleLiteral(static_cast<double>(num) / static_cast<double>(den)); } else { - LOG_THROW(false, storm::exceptions::ExpressionEvaluationException, "Failed to convert Z3 expression. Expression is constant real and value does not fit into a fraction with 64-bit integer numerator and denominator."); + STORM_LOG_THROW(false, storm::exceptions::ExpressionEvaluationException, "Failed to convert Z3 expression. Expression is constant real and value does not fit into a fraction with 64-bit integer numerator and denominator."); } } case Z3_OP_UNINTERPRETED: //storm only supports uninterpreted constant functions - LOG_THROW(expr.is_const(), storm::exceptions::ExpressionEvaluationException, "Failed to convert Z3 expression. Encountered non constant uninterpreted function."); + STORM_LOG_THROW(expr.is_const(), storm::exceptions::ExpressionEvaluationException, "Failed to convert Z3 expression. Encountered non constant uninterpreted function."); if (expr.is_bool()) { return storm::expressions::Expression::createBooleanVariable(expr.decl().name().str()); } else if (expr.is_int()) { @@ -229,15 +229,15 @@ namespace storm { } else if (expr.is_real()) { return storm::expressions::Expression::createDoubleVariable(expr.decl().name().str()); } else { - LOG_THROW(false, storm::exceptions::ExpressionEvaluationException, "Failed to convert Z3 expression. Encountered constant uninterpreted function of unknown sort."); + STORM_LOG_THROW(false, storm::exceptions::ExpressionEvaluationException, "Failed to convert Z3 expression. Encountered constant uninterpreted function of unknown sort."); } default: - LOG_THROW(false, storm::exceptions::ExpressionEvaluationException, "Failed to convert Z3 expression. Encountered unhandled Z3_decl_kind " << expr.decl().kind() <<"."); + STORM_LOG_THROW(false, storm::exceptions::ExpressionEvaluationException, "Failed to convert Z3 expression. Encountered unhandled Z3_decl_kind " << expr.decl().kind() <<"."); break; } } else { - LOG_THROW(false, storm::exceptions::ExpressionEvaluationException, "Failed to convert Z3 expression. Encountered unknown expression type."); + STORM_LOG_THROW(false, storm::exceptions::ExpressionEvaluationException, "Failed to convert Z3 expression. Encountered unknown expression type."); } } diff --git a/src/exceptions/ArgumentUnificationException.h b/src/exceptions/ArgumentUnificationException.h index 7f772819c..86d37dba2 100644 --- a/src/exceptions/ArgumentUnificationException.h +++ b/src/exceptions/ArgumentUnificationException.h @@ -1,23 +1,15 @@ -/* - * ArgumentUnificationException.h - * - * Created on: 19.07.2013 - * Author: Philipp Berger - */ - #ifndef STORM_EXCEPTIONS_ARGUMENTUNIFICATIONEXCEPTION_H_ #define STORM_EXCEPTIONS_ARGUMENTUNIFICATIONEXCEPTION_H_ #include "src/exceptions/BaseException.h" +#include "src/exceptions/ExceptionMacros.h" namespace storm { - -namespace exceptions { - -STORM_EXCEPTION_DEFINE_NEW(ArgumentUnificationException) - -} - -} + namespace exceptions { + + STORM_NEW_EXCEPTION(ArgumentUnificationException) + + } // namespace exceptions +} // namespace storm #endif /* STORM_EXCEPTIONS_ARGUMENTUNIFICATIONEXCEPTION_H_ */ diff --git a/src/exceptions/BaseException.cpp b/src/exceptions/BaseException.cpp new file mode 100644 index 000000000..0acae02ac --- /dev/null +++ b/src/exceptions/BaseException.cpp @@ -0,0 +1,25 @@ +#include "src/exceptions/BaseException.h" + +namespace storm { + namespace exceptions { + BaseException::BaseException() : exception() { + // Intentionally left empty. + } + + BaseException::BaseException(BaseException const& other) : exception(other), stream(other.stream.str()) { + // Intentionally left empty. + } + + BaseException::BaseException(char const* cstr) { + stream << cstr; + } + + const char* BaseException::what() const throw() { + std::string errorString = this->stream.str(); + char* result = new char[errorString.size() + 1]; + result[errorString.size()] = '\0'; + std::copy(errorString.begin(), errorString.end(), result); + return result; + } + } +} \ No newline at end of file diff --git a/src/exceptions/BaseException.h b/src/exceptions/BaseException.h index 6c670f88b..8bf12ea23 100644 --- a/src/exceptions/BaseException.h +++ b/src/exceptions/BaseException.h @@ -5,55 +5,43 @@ #include <sstream> namespace storm { -namespace exceptions { - -template<typename E> -class BaseException : public std::exception { - public: - BaseException() : exception() {} - BaseException(const BaseException& cp) - : exception(cp), stream(cp.stream.str()) { - } - - BaseException(const char* cstr) { - stream << cstr; - } - - ~BaseException() throw() { } - - template<class T> - E& operator<<(const T& var) { - this->stream << var; - return * dynamic_cast<E*>(this); - } - - virtual const char* what() const throw() { - std::string errorString = this->stream.str(); - char* result = new char[errorString.size() + 1]; - result[errorString.size()] = '\0'; - std::copy(errorString.begin(), errorString.end(), result); - return result; - } - - private: - std::stringstream stream; -}; - -} // namespace exceptions + namespace exceptions { + + /*! + * This class represents the base class of all exception classes. + */ + class BaseException : public std::exception { + public: + /*! + * Creates a base exception without a message. + */ + BaseException(); + + /*! + * Creates a base expression from the given exception. + * + * @param other The expression from which to copy-construct. + */ + BaseException(BaseException const& other); + + /*! + * Adds the given string to the message of this exception. + */ + BaseException(char const* cstr); + + /*! + * Retrieves the message associated with this exception. + * + * @return The message associated with this exception. + */ + virtual const char* what() const throw(); + + protected: + // This stream stores the message of this exception. + std::stringstream stream; + }; + + } // namespace exceptions } // namespace storm -/* Macro to generate descendant exception classes. - * As all classes are nearly the same, this makes changing common features much easier. - */ -#define STORM_EXCEPTION_DEFINE_NEW(exception_name) class exception_name : public BaseException<exception_name> { \ -public: \ - exception_name() : BaseException() { \ - } \ - exception_name(const char* cstr) : BaseException(cstr) { \ - } \ - exception_name(const exception_name& cp) : BaseException(cp) { \ - } \ -}; - - #endif // STORM_EXCEPTIONS_BASEEXCEPTION_H_ diff --git a/src/exceptions/ExceptionMacros.h b/src/exceptions/ExceptionMacros.h index bbf2f4f36..943990ae7 100644 --- a/src/exceptions/ExceptionMacros.h +++ b/src/exceptions/ExceptionMacros.h @@ -1,36 +1,23 @@ #ifndef STORM_EXCEPTIONS_EXCEPTIONMACROS_H_ #define STORM_EXCEPTIONS_EXCEPTIONMACROS_H_ -#include <cassert> +/*! + * Macro to generate descendant exception classes. As all classes are nearly the same, this makes changing common + * features much easier. + */ +#define STORM_NEW_EXCEPTION(exception_name) class exception_name : public BaseException { \ +public: \ +exception_name() : BaseException() { \ +} \ +exception_name(char const* cstr) : BaseException(cstr) { \ +} \ +exception_name(exception_name const& cp) : BaseException(cp) { \ +} \ +template<typename T> \ +exception_name& operator<<(T const& var) { \ + this->stream << var; \ + return *this; \ +} \ +}; -#include "log4cplus/logger.h" -#include "log4cplus/loggingmacros.h" - -extern log4cplus::Logger logger; - -#ifndef NDEBUG -#define LOG_ASSERT(cond, message) \ -{ \ - if (!(cond)) { \ - LOG4CPLUS_ERROR(logger, message); \ - assert(cond); \ - } \ -} while (false) -#define LOG_DEBUG(message) \ -{ \ - LOG4CPLUS_DEBUG(logger, message); \ -} while (false) -#else -#define LOG_ASSERT(cond, message) /* empty */ -#define LOG_DEBUG(message) /* empty */ -#endif - -#define LOG_THROW(cond, exception, message) \ -{ \ -if (!(cond)) { \ -LOG4CPLUS_ERROR(logger, message); \ -throw exception() << message; \ -} \ -} while (false) - -#endif /* STORM_EXCEPTIONS_EXCEPTIONMACROS_H_ */ \ No newline at end of file +#endif /* STORM_EXCEPTIONS_EXCEPTIONMACROS_H_ */ diff --git a/src/exceptions/ExpressionEvaluationException.h b/src/exceptions/ExpressionEvaluationException.h index 390991c1d..8ca4e81db 100644 --- a/src/exceptions/ExpressionEvaluationException.h +++ b/src/exceptions/ExpressionEvaluationException.h @@ -1,23 +1,15 @@ -/* - * ExpressionEvaluationException.h - * - * Created on: 12.01.2013 - * Author: Christian Dehnert - */ - #ifndef STORM_EXCEPTIONS_EXPRESSIONEVALUATIONEXCEPTION_H_ #define STORM_EXCEPTIONS_EXPRESSIONEVALUATIONEXCEPTION_H_ #include "src/exceptions/BaseException.h" +#include "src/exceptions/ExceptionMacros.h" namespace storm { - -namespace exceptions { - -STORM_EXCEPTION_DEFINE_NEW(ExpressionEvaluationException) - -} - -} + namespace exceptions { + + STORM_NEW_EXCEPTION(ExpressionEvaluationException) + + } // namespace exceptions +} // namespace storm #endif /* STORM_EXCEPTIONS_EXPRESSIONEVALUATIONEXCEPTION_H_ */ diff --git a/src/exceptions/FileIoException.h b/src/exceptions/FileIoException.h index 2d7e63d47..f6363f154 100644 --- a/src/exceptions/FileIoException.h +++ b/src/exceptions/FileIoException.h @@ -1,23 +1,15 @@ -/* - * FileIoException.h - * - * Created on: 16.08.2012 - * Author: Thomas Heinemann - */ - #ifndef STORM_EXCEPTIONS_FILEIOEXCEPTION_H_ #define STORM_EXCEPTIONS_FILEIOEXCEPTION_H_ #include "src/exceptions/BaseException.h" +#include "src/exceptions/ExceptionMacros.h" namespace storm { - -namespace exceptions { - -STORM_EXCEPTION_DEFINE_NEW(FileIoException) - -} - -} + namespace exceptions { + + STORM_NEW_EXCEPTION(FileIoException) + + } // namespace exceptions +} // namespace storm #endif /* STORM_EXCEPTIONS_FILEIOEXCEPTION_H_ */ diff --git a/src/exceptions/IllegalArgumentException.h b/src/exceptions/IllegalArgumentException.h index baa1581de..1faf838bb 100644 --- a/src/exceptions/IllegalArgumentException.h +++ b/src/exceptions/IllegalArgumentException.h @@ -2,17 +2,14 @@ #define STORM_EXCEPTIONS_ILLEGALARGUMENTEXCEPTION_H_ #include "src/exceptions/BaseException.h" +#include "src/exceptions/ExceptionMacros.h" namespace storm { - -namespace exceptions { - -/*! - * @brief This exception is thrown when a parameter is invalid or illegal in this context - */ -STORM_EXCEPTION_DEFINE_NEW(IllegalArgumentException) - -} // namespace exceptions - + namespace exceptions { + + STORM_NEW_EXCEPTION(IllegalArgumentException) + + } // namespace exceptions } // namespace storm -#endif // STORM_EXCEPTIONS_ILLEGALARGUMENTEXCEPTION_H_ + +#endif /* STORM_EXCEPTIONS_ILLEGALARGUMENTEXCEPTION_H_ */ diff --git a/src/exceptions/IllegalArgumentTypeException.h b/src/exceptions/IllegalArgumentTypeException.h index 8a5f242da..bd12b9728 100644 --- a/src/exceptions/IllegalArgumentTypeException.h +++ b/src/exceptions/IllegalArgumentTypeException.h @@ -1,23 +1,15 @@ -/* - * IllegalArgumentTypeException.h - * - * Created on: 10.08.2013 - * Author: Philipp Berger - */ - #ifndef STORM_EXCEPTIONS_ILLEGALARGUMENTTYPEEXCEPTION_H_ #define STORM_EXCEPTIONS_ILLEGALARGUMENTTYPEEXCEPTION_H_ #include "src/exceptions/BaseException.h" +#include "src/exceptions/ExceptionMacros.h" namespace storm { - -namespace exceptions { - -STORM_EXCEPTION_DEFINE_NEW(IllegalArgumentTypeException) - -} - -} + namespace exceptions { + + STORM_NEW_EXCEPTION(IllegalArgumentTypeException) + + } // namespace exceptions +} // namespace storm #endif /* STORM_EXCEPTIONS_ILLEGALARGUMENTTYPEEXCEPTION_H_ */ diff --git a/src/exceptions/IllegalArgumentValueException.h b/src/exceptions/IllegalArgumentValueException.h index 28b14af79..465e8ff00 100644 --- a/src/exceptions/IllegalArgumentValueException.h +++ b/src/exceptions/IllegalArgumentValueException.h @@ -1,23 +1,15 @@ -/* - * IllegalArgumentValueException.h - * - * Created on: 10.08.2013 - * Author: Philipp Berger - */ - #ifndef STORM_EXCEPTIONS_ILLEGALARGUMENTVALUEEXCEPTION_H_ #define STORM_EXCEPTIONS_ILLEGALARGUMENTVALUEEXCEPTION_H_ #include "src/exceptions/BaseException.h" +#include "src/exceptions/ExceptionMacros.h" namespace storm { - -namespace exceptions { - -STORM_EXCEPTION_DEFINE_NEW(IllegalArgumentValueException) - -} - -} + namespace exceptions { + + STORM_NEW_EXCEPTION(IllegalArgumentValueException) + + } // namespace exceptions +} // namespace storm #endif /* STORM_EXCEPTIONS_ILLEGALARGUMENTVALUEEXCEPTION_H_ */ diff --git a/src/exceptions/IllegalFunctionCallException.h b/src/exceptions/IllegalFunctionCallException.h index 0515e1c00..c0dead65f 100644 --- a/src/exceptions/IllegalFunctionCallException.h +++ b/src/exceptions/IllegalFunctionCallException.h @@ -1,25 +1,15 @@ -/* - * IllegalFunctionCallException.h - * - * Created on: 09.08.2013 - * Author: Philipp Berger - */ - #ifndef STORM_EXCEPTIONS_ILLEGALFUNCTIONCALLEXCEPTION_H_ #define STORM_EXCEPTIONS_ILLEGALFUNCTIONCALLEXCEPTION_H_ #include "src/exceptions/BaseException.h" +#include "src/exceptions/ExceptionMacros.h" namespace storm { - -namespace exceptions { - -/*! - * @brief This exception is thrown when a function call is not allowed in this context - */ -STORM_EXCEPTION_DEFINE_NEW(IllegalFunctionCallException) - -} // namespace exceptions - + namespace exceptions { + + STORM_NEW_EXCEPTION(IllegalFunctionCallException) + + } // namespace exceptions } // namespace storm -#endif // STORM_EXCEPTIONS_ILLEGALFUNCTIONCALLEXCEPTION_H_ + +#endif /* STORM_EXCEPTIONS_ILLEGALFUNCTIONCALLEXCEPTION_H_ */ diff --git a/src/exceptions/InternalTypeErrorException.h b/src/exceptions/InternalTypeErrorException.h index ed1f609ba..d3a1223e1 100644 --- a/src/exceptions/InternalTypeErrorException.h +++ b/src/exceptions/InternalTypeErrorException.h @@ -1,26 +1,15 @@ -/* - * InternalTypeErrorException.h - * - * Created on: 09.08.2013 - * Author: Philipp Berger - */ - #ifndef STORM_EXCEPTIONS_INTERNALTYPEERROREXCEPTION_H_ #define STORM_EXCEPTIONS_INTERNALTYPEERROREXCEPTION_H_ #include "src/exceptions/BaseException.h" +#include "src/exceptions/ExceptionMacros.h" namespace storm { - -namespace exceptions { - -/*! - * @brief This exception is thrown when an internal function observes an unknown state or type, e.g. a missing case statement. - */ -STORM_EXCEPTION_DEFINE_NEW(InternalTypeErrorException) - -} - -} + namespace exceptions { + + STORM_NEW_EXCEPTION(InternalTypeErrorException) + + } // namespace exceptions +} // namespace storm #endif /* STORM_EXCEPTIONS_INTERNALTYPEERROREXCEPTION_H_ */ diff --git a/src/exceptions/InvalidAccessException.h b/src/exceptions/InvalidAccessException.h index af413b1ed..f1e2f8059 100644 --- a/src/exceptions/InvalidAccessException.h +++ b/src/exceptions/InvalidAccessException.h @@ -2,18 +2,14 @@ #define STORM_EXCEPTIONS_INVALIDACCESSEXCEPTION_H_ #include "src/exceptions/BaseException.h" +#include "src/exceptions/ExceptionMacros.h" namespace storm { - -namespace exceptions { - -/*! - * @brief This exception is thrown when a function is used/accessed that is forbidden to use (e.g. Copy Constructors) - */ -STORM_EXCEPTION_DEFINE_NEW(InvalidAccessException) - -} // namespace exceptions - + namespace exceptions { + + STORM_NEW_EXCEPTION(InvalidAccessException) + + } // namespace exceptions } // namespace storm -#endif // STORM_EXCEPTIONS_INVALIDACCESSEXCEPTION_H_ +#endif /* STORM_EXCEPTIONS_INVALIDACCESSEXCEPTION_H_ */ diff --git a/src/exceptions/InvalidArgumentException.h b/src/exceptions/InvalidArgumentException.h index fac516554..a0e7c49dd 100644 --- a/src/exceptions/InvalidArgumentException.h +++ b/src/exceptions/InvalidArgumentException.h @@ -2,17 +2,14 @@ #define STORM_EXCEPTIONS_INVALIDARGUMENTEXCEPTION_H_ #include "src/exceptions/BaseException.h" +#include "src/exceptions/ExceptionMacros.h" namespace storm { - -namespace exceptions { - -/*! - * @brief This exception is thrown when a parameter is invalid in this context - */ -STORM_EXCEPTION_DEFINE_NEW(InvalidArgumentException) - -} // namespace exceptions - + namespace exceptions { + + STORM_NEW_EXCEPTION(InvalidArgumentException) + + } // namespace exceptions } // namespace storm -#endif // STORM_EXCEPTIONS_INVALIDARGUMENTEXCEPTION_H_ + +#endif /* STORM_EXCEPTIONS_INVALIDARGUMENTEXCEPTION_H_ */ diff --git a/src/exceptions/InvalidOperationException.h b/src/exceptions/InvalidOperationException.h index 728f7ff1c..7bb91fcea 100644 --- a/src/exceptions/InvalidOperationException.h +++ b/src/exceptions/InvalidOperationException.h @@ -2,16 +2,14 @@ #define STORM_EXCEPTIONS_INVALIDOPERATIONEXCEPTION_H_ #include "src/exceptions/BaseException.h" +#include "src/exceptions/ExceptionMacros.h" namespace storm { - namespace exceptions { - /*! - * @brief This exception is thrown when an operation is invalid in this context - */ - STORM_EXCEPTION_DEFINE_NEW(InvalidOperationException) + STORM_NEW_EXCEPTION(InvalidOperationException) } // namespace exceptions } // namespace storm -#endif // STORM_EXCEPTIONS_INVALIDOPERATIONEXCEPTION_H_ + +#endif /* STORM_EXCEPTIONS_INVALIDOPERATIONEXCEPTION_H_ */ diff --git a/src/exceptions/InvalidPropertyException.h b/src/exceptions/InvalidPropertyException.h index 6cddb9d91..77952b708 100644 --- a/src/exceptions/InvalidPropertyException.h +++ b/src/exceptions/InvalidPropertyException.h @@ -1,26 +1,15 @@ -/* - * InvalidPropertyException.h - * - * Created on: 27.12.2012 - * Author: Christian Dehnert - */ - #ifndef STORM_EXCEPTIONS_INVALIDPROPERTYEXCEPTION_H_ #define STORM_EXCEPTIONS_INVALIDPROPERTYEXCEPTION_H_ #include "src/exceptions/BaseException.h" +#include "src/exceptions/ExceptionMacros.h" namespace storm { - -namespace exceptions { - -/*! - * @brief This exception is thrown when a parameter is invalid in this context - */ -STORM_EXCEPTION_DEFINE_NEW(InvalidPropertyException) - -} // namespace exceptions - + namespace exceptions { + + STORM_NEW_EXCEPTION(InvalidPropertyException) + + } // namespace exceptions } // namespace storm #endif /* STORM_EXCEPTIONS_INVALIDPROPERTYEXCEPTION_H_ */ diff --git a/src/exceptions/InvalidSettingsException.h b/src/exceptions/InvalidSettingsException.h index 12b0ba5b2..39e0d2c45 100644 --- a/src/exceptions/InvalidSettingsException.h +++ b/src/exceptions/InvalidSettingsException.h @@ -2,13 +2,14 @@ #define STORM_EXCEPTIONS_INVALIDSETTINGSEXCEPTION_H_ #include "src/exceptions/BaseException.h" +#include "src/exceptions/ExceptionMacros.h" namespace storm { -namespace exceptions { - -STORM_EXCEPTION_DEFINE_NEW(InvalidSettingsException) - -} // namespace exceptions + namespace exceptions { + + STORM_NEW_EXCEPTION(InvalidSettingsException) + + } // namespace exceptions } // namespace storm -#endif // STORM_EXCEPTIONS_INVALIDSETTINGSEXCEPTION_H_ +#endif /* STORM_EXCEPTIONS_INVALIDSETTINGSEXCEPTION_H_ */ diff --git a/src/exceptions/InvalidStateException.h b/src/exceptions/InvalidStateException.h index 0489e08ca..ad0cbc50a 100644 --- a/src/exceptions/InvalidStateException.h +++ b/src/exceptions/InvalidStateException.h @@ -2,19 +2,14 @@ #define STORM_EXCEPTIONS_INVALIDSTATEEXCEPTION_H_ #include "src/exceptions/BaseException.h" +#include "src/exceptions/ExceptionMacros.h" namespace storm { - -namespace exceptions { - -/*! - * @brief This exception is thrown when a memory request can not be - * fulfilled. - */ -STORM_EXCEPTION_DEFINE_NEW(InvalidStateException) - -} // namespace exceptions - + namespace exceptions { + + STORM_NEW_EXCEPTION(InvalidStateException) + + } // namespace exceptions } // namespace storm -#endif // STORM_EXCEPTIONS_INVALIDSTATEEXCEPTION_H_ +#endif /* STORM_EXCEPTIONS_INVALIDSTATEEXCEPTION_H_ */ diff --git a/src/exceptions/InvalidTypeException.h b/src/exceptions/InvalidTypeException.h index de2874218..be7e745ba 100644 --- a/src/exceptions/InvalidTypeException.h +++ b/src/exceptions/InvalidTypeException.h @@ -2,17 +2,14 @@ #define STORM_EXCEPTIONS_INVALIDTYPEEXCEPTION_H_ #include "src/exceptions/BaseException.h" +#include "src/exceptions/ExceptionMacros.h" namespace storm { - namespace exceptions { - /*! - * @brief This exception is thrown when a type is invalid in this context - */ - STORM_EXCEPTION_DEFINE_NEW(InvalidTypeException) + STORM_NEW_EXCEPTION(InvalidTypeException) } // namespace exceptions - } // namespace storm -#endif // STORM_EXCEPTIONS_INVALIDTYPEEXCEPTION_H_ + +#endif /* STORM_EXCEPTIONS_INVALIDTYPEEXCEPTION_H_ */ diff --git a/src/exceptions/NoConvergenceException.h b/src/exceptions/NoConvergenceException.h index a3fdd3ba3..8ba22855e 100644 --- a/src/exceptions/NoConvergenceException.h +++ b/src/exceptions/NoConvergenceException.h @@ -2,16 +2,14 @@ #define STORM_EXCEPTIONS_NOCONVERGENCEEXCEPTION_H_ #include "src/exceptions/BaseException.h" +#include "src/exceptions/ExceptionMacros.h" namespace storm { -namespace exceptions { - -/*! - * @brief This exception is thrown when an iterative solver failed to converge with the given maxIterations - */ -STORM_EXCEPTION_DEFINE_NEW(NoConvergenceException) - -} // namespace exceptions + namespace exceptions { + + STORM_NEW_EXCEPTION(NoConvergenceException) + + } // namespace exceptions } // namespace storm -#endif // STORM_EXCEPTIONS_NOCONVERGENCEEXCEPTION_H_ +#endif /* STORM_EXCEPTIONS_NOCONVERGENCEEXCEPTION_H_ */ diff --git a/src/exceptions/NotImplementedException.h b/src/exceptions/NotImplementedException.h index cf98d4d99..857ad7c77 100644 --- a/src/exceptions/NotImplementedException.h +++ b/src/exceptions/NotImplementedException.h @@ -1,23 +1,15 @@ -/* - * NotImplementedException.h - * - * Created on: 12.01.2013 - * Author: Christian Dehnert - */ - #ifndef STORM_EXCEPTIONS_NOTIMPLEMENTEDEXCEPTION_H_ #define STORM_EXCEPTIONS_NOTIMPLEMENTEDEXCEPTION_H_ #include "src/exceptions/BaseException.h" +#include "src/exceptions/ExceptionMacros.h" namespace storm { - -namespace exceptions { - -STORM_EXCEPTION_DEFINE_NEW(NotImplementedException) - -} - -} + namespace exceptions { + + STORM_NEW_EXCEPTION(NotImplementedException) + + } // namespace exceptions +} // namespace storm #endif /* STORM_EXCEPTIONS_NOTIMPLEMENTEDEXCEPTION_H_ */ diff --git a/src/exceptions/OptionParserException.h b/src/exceptions/OptionParserException.h index d0befae51..1f54a5801 100644 --- a/src/exceptions/OptionParserException.h +++ b/src/exceptions/OptionParserException.h @@ -1,23 +1,15 @@ -/* - * OptionParserException.h - * - * Created on: 23.08.2013 - * Author: Philipp Berger - */ - #ifndef STORM_EXCEPTIONS_OPTIONPARSEREXCEPTION_H_ #define STORM_EXCEPTIONS_OPTIONPARSEREXCEPTION_H_ #include "src/exceptions/BaseException.h" +#include "src/exceptions/ExceptionMacros.h" namespace storm { - -namespace exceptions { - -STORM_EXCEPTION_DEFINE_NEW(OptionParserException) - -} - -} + namespace exceptions { + + STORM_NEW_EXCEPTION(OptionParserException) + + } // namespace exceptions +} // namespace storm #endif /* STORM_EXCEPTIONS_OPTIONPARSEREXCEPTION_H_ */ diff --git a/src/exceptions/OptionUnificationException.h b/src/exceptions/OptionUnificationException.h index 6eac306e7..0aeef9e5c 100644 --- a/src/exceptions/OptionUnificationException.h +++ b/src/exceptions/OptionUnificationException.h @@ -1,23 +1,15 @@ -/* - * OptionUnificationException.h - * - * Created on: 21.08.2013 - * Author: Philipp Berger - */ - #ifndef STORM_EXCEPTIONS_OPTIONUNIFICATIONEXCEPTION_H_ #define STORM_EXCEPTIONS_OPTIONUNIFICATIONEXCEPTION_H_ #include "src/exceptions/BaseException.h" +#include "src/exceptions/ExceptionMacros.h" namespace storm { - -namespace exceptions { - -STORM_EXCEPTION_DEFINE_NEW(OptionUnificationException) - -} - -} + namespace exceptions { + + STORM_NEW_EXCEPTION(OptionUnificationException) + + } // namespace exceptions +} // namespace storm #endif /* STORM_EXCEPTIONS_OPTIONUNIFICATIONEXCEPTION_H_ */ diff --git a/src/exceptions/OutOfRangeException.h b/src/exceptions/OutOfRangeException.h index af0856213..dc51e934b 100644 --- a/src/exceptions/OutOfRangeException.h +++ b/src/exceptions/OutOfRangeException.h @@ -2,17 +2,14 @@ #define STORM_EXCEPTIONS_OUTOFRANGEEXCEPTION_H_ #include "src/exceptions/BaseException.h" +#include "src/exceptions/ExceptionMacros.h" namespace storm { - -namespace exceptions { - -/* - * @briefThis exception is thrown when a parameter is not in the range of valid values - */ -STORM_EXCEPTION_DEFINE_NEW(OutOfRangeException) - -} // namespace exceptions - + namespace exceptions { + + STORM_NEW_EXCEPTION(OutOfRangeException) + + } // namespace exceptions } // namespace storm -#endif // STORM_EXCEPTIONS_OUTOFRANGEEXCEPTION_H_ + +#endif /* STORM_EXCEPTIONS_OUTOFRANGEEXCEPTION_H_ */ diff --git a/src/exceptions/WrongFormatException.h b/src/exceptions/WrongFormatException.h index 6196eac82..933838047 100644 --- a/src/exceptions/WrongFormatException.h +++ b/src/exceptions/WrongFormatException.h @@ -1,27 +1,15 @@ -/* - * WrongFormatException.h - * - * Created on: 16.08.2012 - * Author: Thomas Heinemann - */ - #ifndef STORM_EXCEPTIONS_WRONGFORMATEXCEPTION_H_ #define STORM_EXCEPTIONS_WRONGFORMATEXCEPTION_H_ #include "src/exceptions/BaseException.h" +#include "src/exceptions/ExceptionMacros.h" namespace storm { - -namespace exceptions { - -/*! - * @brief This exception is thrown when an input file - * contains invalid or missing keys. - */ -STORM_EXCEPTION_DEFINE_NEW(WrongFormatException) - -} //namespace exceptions - -} //namespace storm + namespace exceptions { + + STORM_NEW_EXCEPTION(WrongFormatException) + + } // namespace exceptions +} // namespace storm #endif /* STORM_EXCEPTIONS_WRONGFORMATEXCEPTION_H_ */ diff --git a/src/modelchecker/reachability/SparseSccModelChecker.cpp b/src/modelchecker/reachability/SparseSccModelChecker.cpp index b7f54b06f..6edcd08fb 100644 --- a/src/modelchecker/reachability/SparseSccModelChecker.cpp +++ b/src/modelchecker/reachability/SparseSccModelChecker.cpp @@ -6,7 +6,7 @@ #include "src/utility/graph.h" #include "src/utility/vector.h" #include "src/exceptions/InvalidStateException.h" -#include "src/exceptions/ExceptionMacros.h" +#include "src/utility/macros.h" namespace storm { namespace modelchecker { @@ -34,7 +34,7 @@ namespace storm { template<typename ValueType> ValueType SparseSccModelChecker<ValueType>::computeReachabilityProbability(storm::models::Dtmc<ValueType> const& dtmc, storm::storage::BitVector const& phiStates, storm::storage::BitVector const& psiStates) { // First, do some sanity checks to establish some required properties. - LOG_THROW(dtmc.getInitialStates().getNumberOfSetBits() == 1, storm::exceptions::IllegalArgumentException, "Input model is required to have exactly one initial state."); + STORM_LOG_THROW(dtmc.getInitialStates().getNumberOfSetBits() == 1, storm::exceptions::IllegalArgumentException, "Input model is required to have exactly one initial state."); typename FlexibleSparseMatrix<ValueType>::index_type initialStateIndex = *dtmc.getInitialStates().begin(); // Then, compute the subset of states that has a probability of 0 or 1, respectively. @@ -204,7 +204,7 @@ namespace storm { typename FlexibleSparseMatrix<ValueType>::row_type::iterator multiplyElement = std::find_if(predecessorForwardTransitions.begin(), predecessorForwardTransitions.end(), [&](storm::storage::MatrixEntry<typename FlexibleSparseMatrix<ValueType>::index_type, typename FlexibleSparseMatrix<ValueType>::value_type> const& a) { return a.getColumn() == state; }); // Make sure we have found the probability and set it to zero. - LOG_THROW(multiplyElement != predecessorForwardTransitions.end(), storm::exceptions::InvalidStateException, "No probability for successor found."); + STORM_LOG_THROW(multiplyElement != predecessorForwardTransitions.end(), storm::exceptions::InvalidStateException, "No probability for successor found."); ValueType multiplyFactor = multiplyElement->getValue(); multiplyElement->setValue(0); diff --git a/src/parser/AutoParser.cpp b/src/parser/AutoParser.cpp index 4c2a91fde..697740a7f 100644 --- a/src/parser/AutoParser.cpp +++ b/src/parser/AutoParser.cpp @@ -12,7 +12,7 @@ #include "src/parser/DeterministicModelParser.h" #include "src/parser/NondeterministicModelParser.h" #include "src/parser/MarkovAutomatonParser.h" -#include "src/exceptions/ExceptionMacros.h" +#include "src/utility/macros.h" #include "src/exceptions/WrongFormatException.h" #include "src/utility/cstring.h" @@ -76,7 +76,7 @@ namespace storm { // Open the file. MappedFile file(filename.c_str()); - LOG_THROW(file.getDataSize() >= STORM_PARSER_AUTOPARSER_HINT_LENGTH, storm::exceptions::WrongFormatException, "File too short to be readable."); + STORM_LOG_THROW(file.getDataSize() >= STORM_PARSER_AUTOPARSER_HINT_LENGTH, storm::exceptions::WrongFormatException, "File too short to be readable."); char const* fileData = file.getData(); char filehintBuffer[STORM_PARSER_AUTOPARSER_HINT_LENGTH + 1]; diff --git a/src/parser/ExpressionParser.cpp b/src/parser/ExpressionParser.cpp index ed6d1d642..052f4470c 100644 --- a/src/parser/ExpressionParser.cpp +++ b/src/parser/ExpressionParser.cpp @@ -95,7 +95,7 @@ namespace storm { try { return e1.ite(e2, e3); } catch (storm::exceptions::InvalidTypeException const& e) { - LOG_THROW(false, storm::exceptions::WrongFormatException, "Parsing error in line " << get_line(qi::_3) << ": " << e.what()); + STORM_LOG_THROW(false, storm::exceptions::WrongFormatException, "Parsing error in line " << get_line(qi::_3) << ": " << e.what()); } } return storm::expressions::Expression::createFalse(); @@ -107,10 +107,10 @@ namespace storm { switch (operatorType) { case storm::expressions::OperatorType::Or: return e1 || e2; break; case storm::expressions::OperatorType::Implies: return e1.implies(e2); break; - default: LOG_ASSERT(false, "Invalid operation."); break; + default: STORM_LOG_ASSERT(false, "Invalid operation."); break; } } catch (storm::exceptions::InvalidTypeException const& e) { - LOG_THROW(false, storm::exceptions::WrongFormatException, "Parsing error in line " << get_line(qi::_3) << ": " << e.what()); + STORM_LOG_THROW(false, storm::exceptions::WrongFormatException, "Parsing error in line " << get_line(qi::_3) << ": " << e.what()); } } return storm::expressions::Expression::createFalse(); @@ -121,10 +121,10 @@ namespace storm { try { switch (operatorType) { case storm::expressions::OperatorType::And: return e1 && e2; break; - default: LOG_ASSERT(false, "Invalid operation."); break; + default: STORM_LOG_ASSERT(false, "Invalid operation."); break; } } catch (storm::exceptions::InvalidTypeException const& e) { - LOG_THROW(false, storm::exceptions::WrongFormatException, "Parsing error in line " << get_line(qi::_3) << ": " << e.what()); + STORM_LOG_THROW(false, storm::exceptions::WrongFormatException, "Parsing error in line " << get_line(qi::_3) << ": " << e.what()); } } return storm::expressions::Expression::createFalse(); @@ -138,10 +138,10 @@ namespace storm { case storm::expressions::OperatorType::Greater: return e1 > e2; break; case storm::expressions::OperatorType::LessOrEqual: return e1 <= e2; break; case storm::expressions::OperatorType::Less: return e1 < e2; break; - default: LOG_ASSERT(false, "Invalid operation."); break; + default: STORM_LOG_ASSERT(false, "Invalid operation."); break; } } catch (storm::exceptions::InvalidTypeException const& e) { - LOG_THROW(false, storm::exceptions::WrongFormatException, "Parsing error in line " << get_line(qi::_3) << ": " << e.what()); + STORM_LOG_THROW(false, storm::exceptions::WrongFormatException, "Parsing error in line " << get_line(qi::_3) << ": " << e.what()); } } return storm::expressions::Expression::createFalse(); @@ -153,10 +153,10 @@ namespace storm { switch (operatorType) { case storm::expressions::OperatorType::Equal: return e1.hasBooleanReturnType() && e2.hasBooleanReturnType() ? e1.iff(e2) : e1 == e2; break; case storm::expressions::OperatorType::NotEqual: return e1 != e2; break; - default: LOG_ASSERT(false, "Invalid operation."); break; + default: STORM_LOG_ASSERT(false, "Invalid operation."); break; } } catch (storm::exceptions::InvalidTypeException const& e) { - LOG_THROW(false, storm::exceptions::WrongFormatException, "Parsing error in line " << get_line(qi::_3) << ": " << e.what()); + STORM_LOG_THROW(false, storm::exceptions::WrongFormatException, "Parsing error in line " << get_line(qi::_3) << ": " << e.what()); } } return storm::expressions::Expression::createFalse(); @@ -168,10 +168,10 @@ namespace storm { switch (operatorType) { case storm::expressions::OperatorType::Plus: return e1 + e2; break; case storm::expressions::OperatorType::Minus: return e1 - e2; break; - default: LOG_ASSERT(false, "Invalid operation."); break; + default: STORM_LOG_ASSERT(false, "Invalid operation."); break; } } catch (storm::exceptions::InvalidTypeException const& e) { - LOG_THROW(false, storm::exceptions::WrongFormatException, "Parsing error in line " << get_line(qi::_3) << ": " << e.what()); + STORM_LOG_THROW(false, storm::exceptions::WrongFormatException, "Parsing error in line " << get_line(qi::_3) << ": " << e.what()); } } return storm::expressions::Expression::createFalse(); @@ -183,10 +183,10 @@ namespace storm { switch (operatorType) { case storm::expressions::OperatorType::Times: return e1 * e2; break; case storm::expressions::OperatorType::Divide: return e1 / e2; break; - default: LOG_ASSERT(false, "Invalid operation."); break; + default: STORM_LOG_ASSERT(false, "Invalid operation."); break; } } catch (storm::exceptions::InvalidTypeException const& e) { - LOG_THROW(false, storm::exceptions::WrongFormatException, "Parsing error in line " << get_line(qi::_3) << ": " << e.what()); + STORM_LOG_THROW(false, storm::exceptions::WrongFormatException, "Parsing error in line " << get_line(qi::_3) << ": " << e.what()); } } return storm::expressions::Expression::createFalse(); @@ -197,10 +197,10 @@ namespace storm { try { switch (operatorType) { case storm::expressions::OperatorType::Power: return e1 ^ e2; break; - default: LOG_ASSERT(false, "Invalid operation."); break; + default: STORM_LOG_ASSERT(false, "Invalid operation."); break; } } catch (storm::exceptions::InvalidTypeException const& e) { - LOG_THROW(false, storm::exceptions::WrongFormatException, "Parsing error in line " << get_line(qi::_3) << ": " << e.what()); + STORM_LOG_THROW(false, storm::exceptions::WrongFormatException, "Parsing error in line " << get_line(qi::_3) << ": " << e.what()); } } return storm::expressions::Expression::createFalse(); @@ -213,13 +213,13 @@ namespace storm { switch (operatorType.get()) { case storm::expressions::OperatorType::Not: return !e1; break; case storm::expressions::OperatorType::Minus: return -e1; break; - default: LOG_ASSERT(false, "Invalid operation."); break; + default: STORM_LOG_ASSERT(false, "Invalid operation."); break; } } else { return e1; } } catch (storm::exceptions::InvalidTypeException const& e) { - LOG_THROW(false, storm::exceptions::WrongFormatException, "Parsing error in line " << get_line(qi::_3) << ": " << e.what()); + STORM_LOG_THROW(false, storm::exceptions::WrongFormatException, "Parsing error in line " << get_line(qi::_3) << ": " << e.what()); } } return storm::expressions::Expression::createFalse(); @@ -252,10 +252,10 @@ namespace storm { switch (operatorType) { case storm::expressions::OperatorType::Min: return storm::expressions::Expression::minimum(e1, e2); break; case storm::expressions::OperatorType::Max: return storm::expressions::Expression::maximum(e1, e2); break; - default: LOG_ASSERT(false, "Invalid operation."); break; + default: STORM_LOG_ASSERT(false, "Invalid operation."); break; } } catch (storm::exceptions::InvalidTypeException const& e) { - LOG_THROW(false, storm::exceptions::WrongFormatException, "Parsing error in line " << get_line(qi::_3) << ": " << e.what()); + STORM_LOG_THROW(false, storm::exceptions::WrongFormatException, "Parsing error in line " << get_line(qi::_3) << ": " << e.what()); } } return storm::expressions::Expression::createFalse(); @@ -267,10 +267,10 @@ namespace storm { switch (operatorType) { case storm::expressions::OperatorType::Floor: return e1.floor(); break; case storm::expressions::OperatorType::Ceil: return e1.ceil(); break; - default: LOG_ASSERT(false, "Invalid operation."); break; + default: STORM_LOG_ASSERT(false, "Invalid operation."); break; } } catch (storm::exceptions::InvalidTypeException const& e) { - LOG_THROW(false, storm::exceptions::WrongFormatException, "Parsing error in line " << get_line(qi::_3) << ": " << e.what()); + STORM_LOG_THROW(false, storm::exceptions::WrongFormatException, "Parsing error in line " << get_line(qi::_3) << ": " << e.what()); } } return storm::expressions::Expression::createFalse(); @@ -278,9 +278,9 @@ namespace storm { storm::expressions::Expression ExpressionParser::getIdentifierExpression(std::string const& identifier) const { if (this->createExpressions) { - LOG_THROW(this->identifiers_ != nullptr, storm::exceptions::WrongFormatException, "Unable to substitute identifier expressions without given mapping."); + STORM_LOG_THROW(this->identifiers_ != nullptr, storm::exceptions::WrongFormatException, "Unable to substitute identifier expressions without given mapping."); storm::expressions::Expression const* expression = this->identifiers_->find(identifier); - LOG_THROW(expression != nullptr, storm::exceptions::WrongFormatException, "Parsing error in line " << get_line(qi::_3) << ": Undeclared identifier '" << identifier << "'."); + STORM_LOG_THROW(expression != nullptr, storm::exceptions::WrongFormatException, "Parsing error in line " << get_line(qi::_3) << ": Undeclared identifier '" << identifier << "'."); return *expression; } else { return storm::expressions::Expression::createFalse(); diff --git a/src/parser/ExpressionParser.h b/src/parser/ExpressionParser.h index 423227aa2..f5a616e0b 100644 --- a/src/parser/ExpressionParser.h +++ b/src/parser/ExpressionParser.h @@ -1,9 +1,11 @@ #ifndef STORM_PARSER_EXPRESSIONPARSER_H_ #define STORM_PARSER_EXPRESSIONPARSER_H_ +#include <sstream> + #include "src/parser/SpiritParserDefinitions.h" #include "src/storage/expressions/Expression.h" -#include "src/exceptions/ExceptionMacros.h" +#include "src/utility/macros.h" #include "src/exceptions/WrongFormatException.h" namespace storm { @@ -223,7 +225,9 @@ namespace storm { template<typename T1, typename T2, typename T3, typename T4> qi::error_handler_result operator()(T1 b, T2 e, T3 where, T4 const& what) const { - LOG_THROW(false, storm::exceptions::WrongFormatException, "Parsing error in line " << get_line(where) << ": " << " expecting " << what << "."); + std::stringstream whatAsString; + whatAsString << what; + STORM_LOG_THROW(false, storm::exceptions::WrongFormatException, "Parsing error in line " << get_line(where) << ": " << " expecting " << whatAsString.str() << "."); return qi::fail; } }; diff --git a/src/parser/PrismParser.cpp b/src/parser/PrismParser.cpp index ba87a2baa..b327b0984 100644 --- a/src/parser/PrismParser.cpp +++ b/src/parser/PrismParser.cpp @@ -8,7 +8,7 @@ namespace storm { storm::prism::Program PrismParser::parse(std::string const& filename) { // Open file and initialize result. std::ifstream inputFileStream(filename, std::ios::in); - LOG_THROW(inputFileStream.good(), storm::exceptions::WrongFormatException, "Unable to read from file '" << filename << "'."); + STORM_LOG_THROW(inputFileStream.good(), storm::exceptions::WrongFormatException, "Unable to read from file '" << filename << "'."); storm::prism::Program result; @@ -40,8 +40,8 @@ namespace storm { try { // Start first run. bool succeeded = qi::phrase_parse(iter, last, grammar, boost::spirit::ascii::space | qi::lit("//") >> *(qi::char_ - qi::eol) >> qi::eol, result); - LOG_THROW(succeeded, storm::exceptions::WrongFormatException, "Parsing failed in first pass."); - LOG_DEBUG("First pass of parsing PRISM input finished."); + STORM_LOG_THROW(succeeded, storm::exceptions::WrongFormatException, "Parsing failed in first pass."); + STORM_LOG_DEBUG("First pass of parsing PRISM input finished."); // Start second run. first = PositionIteratorType(input.begin()); @@ -49,13 +49,13 @@ namespace storm { last = PositionIteratorType(input.end()); grammar.moveToSecondRun(); succeeded = qi::phrase_parse(iter, last, grammar, boost::spirit::ascii::space | qi::lit("//") >> *(qi::char_ - qi::eol) >> qi::eol, result); - LOG_THROW(succeeded, storm::exceptions::WrongFormatException, "Parsing failed in second pass."); + STORM_LOG_THROW(succeeded, storm::exceptions::WrongFormatException, "Parsing failed in second pass."); } catch (qi::expectation_failure<PositionIteratorType> const& e) { // If the parser expected content different than the one provided, display information about the location of the error. std::size_t lineNumber = boost::spirit::get_line(e.first); // Now propagate exception. - LOG_THROW(false, storm::exceptions::WrongFormatException, "Parsing error in line " << lineNumber << " of file " << filename << "."); + STORM_LOG_THROW(false, storm::exceptions::WrongFormatException, "Parsing error in line " << lineNumber << " of file " << filename << "."); } return result; @@ -213,7 +213,7 @@ namespace storm { } bool PrismParser::addInitialStatesConstruct(storm::expressions::Expression initialStatesExpression, GlobalProgramInformation& globalProgramInformation) { - LOG_THROW(!globalProgramInformation.hasInitialConstruct, storm::exceptions::WrongFormatException, "Parsing error in " << this->getFilename() << ", line " << get_line(qi::_3) << ": Program must not define two initial constructs."); + STORM_LOG_THROW(!globalProgramInformation.hasInitialConstruct, storm::exceptions::WrongFormatException, "Parsing error in " << this->getFilename() << ", line " << get_line(qi::_3) << ": Program must not define two initial constructs."); if (globalProgramInformation.hasInitialConstruct) { return false; } @@ -224,7 +224,7 @@ namespace storm { storm::prism::Constant PrismParser::createUndefinedBooleanConstant(std::string const& newConstant) const { if (!this->secondRun) { - LOG_THROW(this->identifiers_.find(newConstant) == nullptr, storm::exceptions::WrongFormatException, "Parsing error in " << this->getFilename() << ", line " << get_line(qi::_3) << ": Duplicate identifier '" << newConstant << "'."); + STORM_LOG_THROW(this->identifiers_.find(newConstant) == nullptr, storm::exceptions::WrongFormatException, "Parsing error in " << this->getFilename() << ", line " << get_line(qi::_3) << ": Duplicate identifier '" << newConstant << "'."); this->identifiers_.add(newConstant, storm::expressions::Expression::createBooleanVariable(newConstant)); } return storm::prism::Constant(storm::expressions::ExpressionReturnType::Bool, newConstant, this->getFilename()); @@ -232,7 +232,7 @@ namespace storm { storm::prism::Constant PrismParser::createUndefinedIntegerConstant(std::string const& newConstant) const { if (!this->secondRun) { - LOG_THROW(this->identifiers_.find(newConstant) == nullptr, storm::exceptions::WrongFormatException, "Parsing error in " << this->getFilename() << ", line " << get_line(qi::_3) << ": Duplicate identifier '" << newConstant << "'."); + STORM_LOG_THROW(this->identifiers_.find(newConstant) == nullptr, storm::exceptions::WrongFormatException, "Parsing error in " << this->getFilename() << ", line " << get_line(qi::_3) << ": Duplicate identifier '" << newConstant << "'."); this->identifiers_.add(newConstant, storm::expressions::Expression::createIntegerVariable(newConstant)); } return storm::prism::Constant(storm::expressions::ExpressionReturnType::Int, newConstant, this->getFilename()); @@ -240,7 +240,7 @@ namespace storm { storm::prism::Constant PrismParser::createUndefinedDoubleConstant(std::string const& newConstant) const { if (!this->secondRun) { - LOG_THROW(this->identifiers_.find(newConstant) == nullptr, storm::exceptions::WrongFormatException, "Parsing error in " << this->getFilename() << ", line " << get_line(qi::_3) << ": Duplicate identifier '" << newConstant << "'."); + STORM_LOG_THROW(this->identifiers_.find(newConstant) == nullptr, storm::exceptions::WrongFormatException, "Parsing error in " << this->getFilename() << ", line " << get_line(qi::_3) << ": Duplicate identifier '" << newConstant << "'."); this->identifiers_.add(newConstant, storm::expressions::Expression::createDoubleVariable(newConstant)); } return storm::prism::Constant(storm::expressions::ExpressionReturnType::Double, newConstant, this->getFilename()); @@ -248,7 +248,7 @@ namespace storm { storm::prism::Constant PrismParser::createDefinedBooleanConstant(std::string const& newConstant, storm::expressions::Expression expression) const { if (!this->secondRun) { - LOG_THROW(this->identifiers_.find(newConstant) == nullptr, storm::exceptions::WrongFormatException, "Parsing error in " << this->getFilename() << ", line " << get_line(qi::_3) << ": Duplicate identifier '" << newConstant << "'."); + STORM_LOG_THROW(this->identifiers_.find(newConstant) == nullptr, storm::exceptions::WrongFormatException, "Parsing error in " << this->getFilename() << ", line " << get_line(qi::_3) << ": Duplicate identifier '" << newConstant << "'."); this->identifiers_.add(newConstant, storm::expressions::Expression::createBooleanVariable(newConstant)); } return storm::prism::Constant(storm::expressions::ExpressionReturnType::Bool, newConstant, expression, this->getFilename()); @@ -256,7 +256,7 @@ namespace storm { storm::prism::Constant PrismParser::createDefinedIntegerConstant(std::string const& newConstant, storm::expressions::Expression expression) const { if (!this->secondRun) { - LOG_THROW(this->identifiers_.find(newConstant) == nullptr, storm::exceptions::WrongFormatException, "Parsing error in " << this->getFilename() << ", line " << get_line(qi::_3) << ": Duplicate identifier '" << newConstant << "'."); + STORM_LOG_THROW(this->identifiers_.find(newConstant) == nullptr, storm::exceptions::WrongFormatException, "Parsing error in " << this->getFilename() << ", line " << get_line(qi::_3) << ": Duplicate identifier '" << newConstant << "'."); this->identifiers_.add(newConstant, storm::expressions::Expression::createIntegerVariable(newConstant)); } return storm::prism::Constant(storm::expressions::ExpressionReturnType::Int, newConstant, expression, this->getFilename()); @@ -264,7 +264,7 @@ namespace storm { storm::prism::Constant PrismParser::createDefinedDoubleConstant(std::string const& newConstant, storm::expressions::Expression expression) const { if (!this->secondRun) { - LOG_THROW(this->identifiers_.find(newConstant) == nullptr, storm::exceptions::WrongFormatException, "Parsing error in " << this->getFilename() << ", line " << get_line(qi::_3) << ": Duplicate identifier '" << newConstant << "'."); + STORM_LOG_THROW(this->identifiers_.find(newConstant) == nullptr, storm::exceptions::WrongFormatException, "Parsing error in " << this->getFilename() << ", line " << get_line(qi::_3) << ": Duplicate identifier '" << newConstant << "'."); this->identifiers_.add(newConstant, storm::expressions::Expression::createDoubleVariable(newConstant)); } return storm::prism::Constant(storm::expressions::ExpressionReturnType::Double, newConstant, expression, this->getFilename()); @@ -272,7 +272,7 @@ namespace storm { storm::prism::Formula PrismParser::createFormula(std::string const& formulaName, storm::expressions::Expression expression) { if (!this->secondRun) { - LOG_THROW(this->identifiers_.find(formulaName) == nullptr, storm::exceptions::WrongFormatException, "Parsing error in " << this->getFilename() << ", line " << get_line(qi::_3) << ": Duplicate identifier '" << formulaName << "'."); + STORM_LOG_THROW(this->identifiers_.find(formulaName) == nullptr, storm::exceptions::WrongFormatException, "Parsing error in " << this->getFilename() << ", line " << get_line(qi::_3) << ": Duplicate identifier '" << formulaName << "'."); this->identifiers_.add(formulaName, expression); } else { this->identifiers_.at(formulaName) = expression; @@ -312,7 +312,7 @@ namespace storm { storm::prism::BooleanVariable PrismParser::createBooleanVariable(std::string const& variableName, storm::expressions::Expression initialValueExpression) const { if (!this->secondRun) { - LOG_THROW(this->identifiers_.find(variableName) == nullptr, storm::exceptions::WrongFormatException, "Parsing error in " << this->getFilename() << ", line " << get_line(qi::_3) << ": Duplicate identifier '" << variableName << "'."); + STORM_LOG_THROW(this->identifiers_.find(variableName) == nullptr, storm::exceptions::WrongFormatException, "Parsing error in " << this->getFilename() << ", line " << get_line(qi::_3) << ": Duplicate identifier '" << variableName << "'."); this->identifiers_.add(variableName, storm::expressions::Expression::createBooleanVariable(variableName)); } return storm::prism::BooleanVariable(variableName, initialValueExpression, this->getFilename()); @@ -320,7 +320,7 @@ namespace storm { storm::prism::IntegerVariable PrismParser::createIntegerVariable(std::string const& variableName, storm::expressions::Expression lowerBoundExpression, storm::expressions::Expression upperBoundExpression, storm::expressions::Expression initialValueExpression) const { if (!this->secondRun) { - LOG_THROW(this->identifiers_.find(variableName) == nullptr, storm::exceptions::WrongFormatException, "Parsing error in " << this->getFilename() << ", line " << get_line(qi::_3) << ": Duplicate identifier '" << variableName << "'."); + STORM_LOG_THROW(this->identifiers_.find(variableName) == nullptr, storm::exceptions::WrongFormatException, "Parsing error in " << this->getFilename() << ", line " << get_line(qi::_3) << ": Duplicate identifier '" << variableName << "'."); this->identifiers_.add(variableName, storm::expressions::Expression::createIntegerVariable(variableName)); } return storm::prism::IntegerVariable(variableName, lowerBoundExpression, upperBoundExpression, initialValueExpression, this->getFilename()); @@ -334,19 +334,19 @@ namespace storm { storm::prism::Module PrismParser::createRenamedModule(std::string const& newModuleName, std::string const& oldModuleName, std::map<std::string, std::string> const& renaming, GlobalProgramInformation& globalProgramInformation) const { // Check whether the module to rename actually exists. auto const& moduleIndexPair = globalProgramInformation.moduleToIndexMap.find(oldModuleName); - LOG_THROW(moduleIndexPair != globalProgramInformation.moduleToIndexMap.end(), storm::exceptions::WrongFormatException, "Parsing error in " << this->getFilename() << ", line " << get_line(qi::_3) << ": No module named '" << oldModuleName << "' to rename."); + STORM_LOG_THROW(moduleIndexPair != globalProgramInformation.moduleToIndexMap.end(), storm::exceptions::WrongFormatException, "Parsing error in " << this->getFilename() << ", line " << get_line(qi::_3) << ": No module named '" << oldModuleName << "' to rename."); storm::prism::Module const& moduleToRename = globalProgramInformation.modules[moduleIndexPair->second]; if (!this->secondRun) { // Register all (renamed) variables for later use. for (auto const& variable : moduleToRename.getBooleanVariables()) { auto const& renamingPair = renaming.find(variable.getName()); - LOG_THROW(renamingPair != renaming.end(), storm::exceptions::WrongFormatException, "Parsing error in " << this->getFilename() << ", line " << get_line(qi::_3) << ": Boolean variable '" << variable.getName() << " was not renamed."); + STORM_LOG_THROW(renamingPair != renaming.end(), storm::exceptions::WrongFormatException, "Parsing error in " << this->getFilename() << ", line " << get_line(qi::_3) << ": Boolean variable '" << variable.getName() << " was not renamed."); this->identifiers_.add(renamingPair->second, storm::expressions::Expression::createBooleanVariable(renamingPair->second)); } for (auto const& variable : moduleToRename.getIntegerVariables()) { auto const& renamingPair = renaming.find(variable.getName()); - LOG_THROW(renamingPair != renaming.end(), storm::exceptions::WrongFormatException, "Parsing error in " << this->getFilename() << ", line " << get_line(qi::_3) << ": Integer variable '" << variable.getName() << " was not renamed."); + STORM_LOG_THROW(renamingPair != renaming.end(), storm::exceptions::WrongFormatException, "Parsing error in " << this->getFilename() << ", line " << get_line(qi::_3) << ": Integer variable '" << variable.getName() << " was not renamed."); this->identifiers_.add(renamingPair->second, storm::expressions::Expression::createIntegerVariable(renamingPair->second)); } @@ -370,7 +370,7 @@ namespace storm { std::vector<storm::prism::BooleanVariable> booleanVariables; for (auto const& variable : moduleToRename.getBooleanVariables()) { auto const& renamingPair = renaming.find(variable.getName()); - LOG_THROW(renamingPair != renaming.end(), storm::exceptions::WrongFormatException, "Parsing error in " << this->getFilename() << ", line " << get_line(qi::_3) << ": Boolean variable '" << variable.getName() << " was not renamed."); + STORM_LOG_THROW(renamingPair != renaming.end(), storm::exceptions::WrongFormatException, "Parsing error in " << this->getFilename() << ", line " << get_line(qi::_3) << ": Boolean variable '" << variable.getName() << " was not renamed."); booleanVariables.push_back(storm::prism::BooleanVariable(renamingPair->second, variable.getInitialValueExpression().substitute(expressionRenaming), this->getFilename(), get_line(qi::_1))); } @@ -379,7 +379,7 @@ namespace storm { std::vector<storm::prism::IntegerVariable> integerVariables; for (auto const& variable : moduleToRename.getIntegerVariables()) { auto const& renamingPair = renaming.find(variable.getName()); - LOG_THROW(renamingPair != renaming.end(), storm::exceptions::WrongFormatException, "Parsing error in " << this->getFilename() << ", line " << get_line(qi::_3) << ": Integer variable '" << variable.getName() << " was not renamed."); + STORM_LOG_THROW(renamingPair != renaming.end(), storm::exceptions::WrongFormatException, "Parsing error in " << this->getFilename() << ", line " << get_line(qi::_3) << ": Integer variable '" << variable.getName() << " was not renamed."); integerVariables.push_back(storm::prism::IntegerVariable(renamingPair->second, variable.getLowerBoundExpression().substitute(expressionRenaming), variable.getUpperBoundExpression().substitute(expressionRenaming), variable.getInitialValueExpression().substitute(expressionRenaming), this->getFilename(), get_line(qi::_1))); } diff --git a/src/parser/PrismParser.h b/src/parser/PrismParser.h index ac36883e9..2f6b13251 100644 --- a/src/parser/PrismParser.h +++ b/src/parser/PrismParser.h @@ -11,7 +11,7 @@ #include "src/storage/prism/Program.h" #include "src/storage/expressions/Expression.h" #include "src/storage/expressions/Expressions.h" -#include "src/exceptions/ExceptionMacros.h" +#include "src/utility/macros.h" #include "src/exceptions/WrongFormatException.h" namespace storm { diff --git a/src/settings/Argument.h b/src/settings/Argument.h index d0471c01b..6626ba35d 100644 --- a/src/settings/Argument.h +++ b/src/settings/Argument.h @@ -14,7 +14,7 @@ #include "src/settings/ArgumentBase.h" #include "src/settings/ArgumentType.h" #include "src/settings/ArgumentTypeInferationHelper.h" -#include "src/exceptions/ExceptionMacros.h" +#include "src/utility/macros.h" #include "src/exceptions/ArgumentUnificationException.h" #include "src/exceptions/IllegalArgumentException.h" #include "src/exceptions/IllegalArgumentValueException.h" @@ -94,9 +94,9 @@ namespace storm { */ template <typename S> bool isCompatibleWith(Argument<S> const& other) const { - LOG_THROW(this->getType() == other.getType(), storm::exceptions::ArgumentUnificationException, "Unable to unify the arguments " << this->getName() << " and " << other.getName() << ", because they have different types."); - LOG_THROW(this->getIsOptional() == other.getIsOptional(), storm::exceptions::ArgumentUnificationException, "Unable to unify the arguments '" << this->getName() << "' and '" << other.getName() << "', because one of them is optional and the other one is not."); - LOG_THROW(this->getHasDefaultValue() == other.getHasDefaultValue(), storm::exceptions::ArgumentUnificationException, "Unable to unify the arguments " << this->getName() << " and " << other.getName() << ", because one of them has a default value and the other one does not."); + STORM_LOG_THROW(this->getType() == other.getType(), storm::exceptions::ArgumentUnificationException, "Unable to unify the arguments " << this->getName() << " and " << other.getName() << ", because they have different types."); + STORM_LOG_THROW(this->getIsOptional() == other.getIsOptional(), storm::exceptions::ArgumentUnificationException, "Unable to unify the arguments '" << this->getName() << "' and '" << other.getName() << "', because one of them is optional and the other one is not."); + STORM_LOG_THROW(this->getHasDefaultValue() == other.getHasDefaultValue(), storm::exceptions::ArgumentUnificationException, "Unable to unify the arguments " << this->getName() << " and " << other.getName() << ", because one of them has a default value and the other one does not."); return true; } @@ -106,7 +106,7 @@ namespace storm { * @return The value of the argument. */ T const& getArgumentValue() const { - LOG_THROW(this->getHasBeenSet() || this->getHasDefaultValue(), storm::exceptions::IllegalFunctionCallException, "Unable to retrieve value of argument, because it was neither set nor specifies a default value."); + STORM_LOG_THROW(this->getHasBeenSet() || this->getHasDefaultValue(), storm::exceptions::IllegalFunctionCallException, "Unable to retrieve value of argument, because it was neither set nor specifies a default value."); if (this->getHasBeenSet()) { return this->argumentValue; } else { @@ -119,9 +119,9 @@ namespace storm { } void setFromDefaultValue() override { - LOG_THROW(this->hasDefaultValue, storm::exceptions::IllegalFunctionCallException, "Unable to set value from default value, because the argument has none."); + STORM_LOG_THROW(this->hasDefaultValue, storm::exceptions::IllegalFunctionCallException, "Unable to set value from default value, because the argument has none."); bool result = this->setFromTypeValue(this->defaultValue); - LOG_THROW(result, storm::exceptions::IllegalArgumentValueException, "Unable to assign default value to argument, because it was rejected."); + STORM_LOG_THROW(result, storm::exceptions::IllegalArgumentValueException, "Unable to assign default value to argument, because it was rejected."); } virtual std::string getValueAsString() const override { @@ -144,7 +144,7 @@ namespace storm { switch (this->argumentType) { case ArgumentType::Integer: return inferToInteger(ArgumentType::Integer, this->getArgumentValue()); - default: LOG_THROW(false, storm::exceptions::IllegalFunctionCallException, "Unable to retrieve argument value as integer."); break; + default: STORM_LOG_THROW(false, storm::exceptions::IllegalFunctionCallException, "Unable to retrieve argument value as integer."); break; } } @@ -153,7 +153,7 @@ namespace storm { switch (this->argumentType) { case ArgumentType::UnsignedInteger: return inferToUnsignedInteger(ArgumentType::UnsignedInteger, this->getArgumentValue()); - default: LOG_THROW(false, storm::exceptions::IllegalFunctionCallException, "Unable to retrieve argument value as unsigned integer."); break; + default: STORM_LOG_THROW(false, storm::exceptions::IllegalFunctionCallException, "Unable to retrieve argument value as unsigned integer."); break; } } @@ -162,7 +162,7 @@ namespace storm { switch (this->argumentType) { case ArgumentType::Double: return inferToDouble(ArgumentType::Double, this->getArgumentValue()); - default: LOG_THROW(false, storm::exceptions::IllegalFunctionCallException, "Unable to retrieve argument value as double."); break; + default: STORM_LOG_THROW(false, storm::exceptions::IllegalFunctionCallException, "Unable to retrieve argument value as double."); break; } } @@ -171,7 +171,7 @@ namespace storm { switch (this->argumentType) { case ArgumentType::Boolean: return inferToBoolean(ArgumentType::Boolean, this->getArgumentValue()); - default: LOG_THROW(false, storm::exceptions::IllegalFunctionCallException, "Unable to retrieve argument value as boolean."); break; + default: STORM_LOG_THROW(false, storm::exceptions::IllegalFunctionCallException, "Unable to retrieve argument value as boolean."); break; } } @@ -200,7 +200,7 @@ namespace storm { * @param newDefault The new default value of the argument. */ void setDefaultValue(T const& newDefault) { - LOG_THROW(this->validate(newDefault), storm::exceptions::IllegalArgumentValueException, "The default value for the argument did not pass all validation functions."); + STORM_LOG_THROW(this->validate(newDefault), storm::exceptions::IllegalArgumentValueException, "The default value for the argument did not pass all validation functions."); this->defaultValue = newDefault; this->hasDefaultValue = true; } diff --git a/src/settings/ArgumentBuilder.h b/src/settings/ArgumentBuilder.h index 712697460..a6902ab85 100644 --- a/src/settings/ArgumentBuilder.h +++ b/src/settings/ArgumentBuilder.h @@ -16,7 +16,7 @@ #include "src/settings/Argument.h" #include "src/settings/ArgumentValidators.h" -#include "src/exceptions/ExceptionMacros.h" +#include "src/utility/macros.h" #include "src/exceptions/IllegalFunctionCallException.h" #include "src/exceptions/IllegalArgumentTypeException.h" @@ -96,14 +96,14 @@ namespace storm { */ ArgumentBuilder& setIsOptional(bool isOptional) { this->isOptional = isOptional; - LOG_THROW(this->hasDefaultValue, storm::exceptions::IllegalFunctionCallException, "Unable to make argument '" << this->name << "' optional without default value."); + STORM_LOG_THROW(this->hasDefaultValue, storm::exceptions::IllegalFunctionCallException, "Unable to make argument '" << this->name << "' optional without default value."); return *this; } #define PPCAT_NX(A, B) A ## B #define PPCAT(A, B) PPCAT_NX(A, B) #define MACROaddValidationFunction(funcName, funcType) ArgumentBuilder& PPCAT(addValidationFunction, funcName) (storm::settings::Argument< funcType >::userValidationFunction_t userValidationFunction) { \ -LOG_THROW(this->type == ArgumentType::funcName, storm::exceptions::IllegalFunctionCallException, "Illegal validation function for argument, because it takes arguments of different type."); \ +STORM_LOG_THROW(this->type == ArgumentType::funcName, storm::exceptions::IllegalFunctionCallException, "Illegal validation function for argument, because it takes arguments of different type."); \ ( PPCAT(this->userValidationFunctions_, funcName) ).push_back(userValidationFunction); \ return *this; \ } @@ -117,7 +117,7 @@ return *this; \ #define MACROsetDefaultValue(funcName, funcType) ArgumentBuilder& PPCAT(setDefaultValue, funcName) (funcType const& defaultValue) { \ -LOG_THROW(this->type == ArgumentType::funcName, storm::exceptions::IllegalFunctionCallException, "Illegal default value for argument" << this->name << ", because it is of different type."); \ +STORM_LOG_THROW(this->type == ArgumentType::funcName, storm::exceptions::IllegalFunctionCallException, "Illegal default value for argument" << this->name << ", because it is of different type."); \ PPCAT(this->defaultValue_, funcName) = defaultValue; \ this->hasDefaultValue = true; \ return *this; \ @@ -136,7 +136,7 @@ return *this; \ * @return The resulting argument. */ std::shared_ptr<ArgumentBase> build() { - LOG_THROW(!this->hasBeenBuilt, storm::exceptions::IllegalFunctionCallException, "Cannot rebuild argument with builder that was already used to build an argument."); + STORM_LOG_THROW(!this->hasBeenBuilt, storm::exceptions::IllegalFunctionCallException, "Cannot rebuild argument with builder that was already used to build an argument."); this->hasBeenBuilt = true; switch (this->type) { case ArgumentType::String: { diff --git a/src/settings/ArgumentType.h b/src/settings/ArgumentType.h index 843bb10e6..a1424ac73 100644 --- a/src/settings/ArgumentType.h +++ b/src/settings/ArgumentType.h @@ -3,7 +3,7 @@ #include <iostream> -#include "src/exceptions/ExceptionMacros.h" +#include "src/utility/macros.h" namespace storm { namespace settings { diff --git a/src/settings/ArgumentTypeInferationHelper.cpp b/src/settings/ArgumentTypeInferationHelper.cpp index 5ab1693fd..940beb800 100644 --- a/src/settings/ArgumentTypeInferationHelper.cpp +++ b/src/settings/ArgumentTypeInferationHelper.cpp @@ -5,7 +5,7 @@ namespace storm { template <typename T> ArgumentType inferToEnumType() { - LOG_THROW(false, storm::exceptions::InternalTypeErrorException, "Unable to infer type of argument."); + STORM_LOG_THROW(false, storm::exceptions::InternalTypeErrorException, "Unable to infer type of argument."); } template <> @@ -35,56 +35,56 @@ namespace storm { template <typename T> std::string const& inferToString(ArgumentType const& argumentType, T const& value) { - LOG_THROW(false, storm::exceptions::InternalTypeErrorException, "Unable to infer string from non-string argument value."); + STORM_LOG_THROW(false, storm::exceptions::InternalTypeErrorException, "Unable to infer string from non-string argument value."); } template <> std::string const& inferToString<std::string>(ArgumentType const& argumentType, std::string const& value) { - LOG_THROW(argumentType == ArgumentType::String, storm::exceptions::InternalTypeErrorException, "Unable to infer string from non-string argument."); + STORM_LOG_THROW(argumentType == ArgumentType::String, storm::exceptions::InternalTypeErrorException, "Unable to infer string from non-string argument."); return value; } template <typename T> int_fast64_t inferToInteger(ArgumentType const& argumentType, T const& value) { - LOG_THROW(false, storm::exceptions::InternalTypeErrorException, "Unable to infer integer from non-integer argument value."); + STORM_LOG_THROW(false, storm::exceptions::InternalTypeErrorException, "Unable to infer integer from non-integer argument value."); } template <> int_fast64_t inferToInteger<int_fast64_t>(ArgumentType const& argumentType, int_fast64_t const& value) { - LOG_THROW(argumentType == ArgumentType::Integer, storm::exceptions::InternalTypeErrorException, "Unable to infer integer from non-integer argument."); + STORM_LOG_THROW(argumentType == ArgumentType::Integer, storm::exceptions::InternalTypeErrorException, "Unable to infer integer from non-integer argument."); return value; } template <typename T> uint_fast64_t inferToUnsignedInteger(ArgumentType const& argumentType, T const& value) { - LOG_THROW(false, storm::exceptions::InternalTypeErrorException, "Unable to infer unsigned integer from non-unsigned argument value."); + STORM_LOG_THROW(false, storm::exceptions::InternalTypeErrorException, "Unable to infer unsigned integer from non-unsigned argument value."); } template <> uint_fast64_t inferToUnsignedInteger<uint_fast64_t>(ArgumentType const& argumentType, uint_fast64_t const& value) { - LOG_THROW(argumentType == ArgumentType::UnsignedInteger, storm::exceptions::InternalTypeErrorException, "Unable to infer integer from non-integer argument."); + STORM_LOG_THROW(argumentType == ArgumentType::UnsignedInteger, storm::exceptions::InternalTypeErrorException, "Unable to infer integer from non-integer argument."); return value; } template <typename T> double inferToDouble(ArgumentType const& argumentType, T const& value) { - LOG_THROW(false, storm::exceptions::InternalTypeErrorException, "Unable to infer double from non-double argument value."); + STORM_LOG_THROW(false, storm::exceptions::InternalTypeErrorException, "Unable to infer double from non-double argument value."); } template <> double inferToDouble<double>(ArgumentType const& argumentType, double const& value) { - LOG_THROW(argumentType == ArgumentType::Double, storm::exceptions::InternalTypeErrorException, "Unable to infer double from non-double argument."); + STORM_LOG_THROW(argumentType == ArgumentType::Double, storm::exceptions::InternalTypeErrorException, "Unable to infer double from non-double argument."); return value; } template <typename T> bool inferToBoolean(ArgumentType const& argumentType, T const& value) { - LOG_THROW(false, storm::exceptions::InternalTypeErrorException, "Unable to infer boolean from non-boolean argument value."); + STORM_LOG_THROW(false, storm::exceptions::InternalTypeErrorException, "Unable to infer boolean from non-boolean argument value."); } template <> bool inferToBoolean<bool>(ArgumentType const& argumentType, bool const& value) { - LOG_THROW(argumentType == ArgumentType::Boolean, storm::exceptions::InternalTypeErrorException, "Unable to infer boolean from non-boolean argument."); + STORM_LOG_THROW(argumentType == ArgumentType::Boolean, storm::exceptions::InternalTypeErrorException, "Unable to infer boolean from non-boolean argument."); return value; } diff --git a/src/settings/ArgumentTypeInferationHelper.h b/src/settings/ArgumentTypeInferationHelper.h index 3e3b93122..3b29cd184 100644 --- a/src/settings/ArgumentTypeInferationHelper.h +++ b/src/settings/ArgumentTypeInferationHelper.h @@ -5,7 +5,7 @@ #include <string> #include "src/settings/ArgumentType.h" -#include "src/exceptions/ExceptionMacros.h" +#include "src/utility/macros.h" #include "src/exceptions/InternalTypeErrorException.h" namespace storm { diff --git a/src/settings/ArgumentValidators.h b/src/settings/ArgumentValidators.h index aad349a44..d5ac0dac2 100644 --- a/src/settings/ArgumentValidators.h +++ b/src/settings/ArgumentValidators.h @@ -12,7 +12,7 @@ #include <string> #include "src/settings/Argument.h" -#include "src/exceptions/ExceptionMacros.h" +#include "src/utility/macros.h" #include "src/exceptions/InvalidArgumentException.h" namespace storm { @@ -96,7 +96,7 @@ namespace storm { std::ifstream targetFile(fileName); bool isFileGood = targetFile.good(); - LOG_THROW(isFileGood, storm::exceptions::IllegalArgumentValueException, "The file " << fileName << " does not exist or is not readable."); + STORM_LOG_THROW(isFileGood, storm::exceptions::IllegalArgumentValueException, "The file " << fileName << " does not exist or is not readable."); return isFileGood; }; } @@ -115,7 +115,7 @@ namespace storm { } } - LOG_THROW(false, storm::exceptions::IllegalArgumentValueException, "Value '" << inputString << "' does not match any entry in the list of valid items."); + STORM_LOG_THROW(false, storm::exceptions::IllegalArgumentValueException, "Value '" << inputString << "' does not match any entry in the list of valid items."); return false; }; } @@ -131,7 +131,7 @@ namespace storm { template<typename T> static std::function<bool (T const&)> rangeValidatorIncluding(T lowerBound, T upperBound) { return std::bind([](T lowerBound, T upperBound, T value) -> bool { - LOG_THROW(lowerBound <= value && value <= upperBound, storm::exceptions::InvalidArgumentException, "Value " << value << " is out range."); + STORM_LOG_THROW(lowerBound <= value && value <= upperBound, storm::exceptions::InvalidArgumentException, "Value " << value << " is out range."); return true; }, lowerBound, upperBound, std::placeholders::_1); } @@ -146,7 +146,7 @@ namespace storm { template<typename T> static std::function<bool (T const&)> rangeValidatorExcluding(T lowerBound, T upperBound) { return std::bind([](T lowerBound, T upperBound, T value) -> bool { - LOG_THROW(lowerBound < value && value < upperBound, storm::exceptions::InvalidArgumentException, "Value " << value << " is out range."); + STORM_LOG_THROW(lowerBound < value && value < upperBound, storm::exceptions::InvalidArgumentException, "Value " << value << " is out range."); return true; }, lowerBound, upperBound, std::placeholders::_1); } diff --git a/src/settings/Option.h b/src/settings/Option.h index c061be37a..d8a1d9d02 100644 --- a/src/settings/Option.h +++ b/src/settings/Option.h @@ -14,7 +14,7 @@ #include "ArgumentBase.h" #include "Argument.h" -#include "src/exceptions/ExceptionMacros.h" +#include "src/utility/macros.h" #include "src/exceptions/IllegalArgumentException.h" #include "src/exceptions/OptionUnificationException.h" @@ -74,13 +74,13 @@ namespace storm { * @return True iff the given argument is compatible with the current one. */ bool isCompatibleWith(Option const& other) { - LOG_THROW(this->getArgumentCount() == other.getArgumentCount(), storm::exceptions::OptionUnificationException, "Unable to unify two options, because their argument count differs."); + STORM_LOG_THROW(this->getArgumentCount() == other.getArgumentCount(), storm::exceptions::OptionUnificationException, "Unable to unify two options, because their argument count differs."); for(size_t i = 0; i != this->arguments.size(); i++) { ArgumentBase const& firstArgument = this->getArgument(i); ArgumentBase const& secondArgument = other.getArgument(i); - LOG_THROW(firstArgument.getType() == secondArgument.getType(), storm::exceptions::OptionUnificationException, "Unable to unify two options, because their arguments are incompatible."); + STORM_LOG_THROW(firstArgument.getType() == secondArgument.getType(), storm::exceptions::OptionUnificationException, "Unable to unify two options, because their arguments are incompatible."); switch (firstArgument.getType()) { case ArgumentType::String: @@ -119,7 +119,7 @@ namespace storm { * @return The i-th argument of this option. */ ArgumentBase const& getArgument(uint_fast64_t argumentIndex) const { - LOG_THROW(argumentIndex < this->getArgumentCount(), storm::exceptions::IllegalArgumentException, "Index of argument is out of bounds."); + STORM_LOG_THROW(argumentIndex < this->getArgumentCount(), storm::exceptions::IllegalArgumentException, "Index of argument is out of bounds."); return *this->arguments.at(argumentIndex); } @@ -130,7 +130,7 @@ namespace storm { * @return The i-th argument of this option. */ ArgumentBase& getArgument(uint_fast64_t argumentIndex) { - LOG_THROW(argumentIndex < this->getArgumentCount(), storm::exceptions::IllegalArgumentException, "Index of argument is out of bounds."); + STORM_LOG_THROW(argumentIndex < this->getArgumentCount(), storm::exceptions::IllegalArgumentException, "Index of argument is out of bounds."); return *this->arguments.at(argumentIndex); } @@ -142,7 +142,7 @@ namespace storm { */ ArgumentBase const& getArgumentByName(std::string const& argumentName) const { auto argumentIterator = this->argumentNameMap.find(argumentName); - LOG_THROW(argumentIterator != this->argumentNameMap.end(), storm::exceptions::IllegalArgumentException, "Unable to retrieve argument with unknown name '" << argumentName << "'."); + STORM_LOG_THROW(argumentIterator != this->argumentNameMap.end(), storm::exceptions::IllegalArgumentException, "Unable to retrieve argument with unknown name '" << argumentName << "'."); return *argumentIterator->second; } @@ -281,14 +281,14 @@ namespace storm { Option(std::string const& moduleName, std::string const& longOptionName, std::string const& shortOptionName, bool hasShortOptionName, std::string const& optionDescription, bool isOptionRequired, bool requireModulePrefix, std::vector<std::shared_ptr<ArgumentBase>> const& optionArguments = std::vector<std::shared_ptr<ArgumentBase>>()) : longName(longOptionName), hasShortName(hasShortOptionName), shortName(shortOptionName), description(optionDescription), moduleName(moduleName), isRequired(isOptionRequired), requireModulePrefix(requireModulePrefix), hasBeenSet(false), arguments(optionArguments), argumentNameMap() { // First, do some sanity checks. - LOG_THROW(!longName.empty(), storm::exceptions::IllegalArgumentException, "Unable to construct option with empty name."); - LOG_THROW(!moduleName.empty(), storm::exceptions::IllegalArgumentException, "Unable to construct option with empty module name."); + STORM_LOG_THROW(!longName.empty(), storm::exceptions::IllegalArgumentException, "Unable to construct option with empty name."); + STORM_LOG_THROW(!moduleName.empty(), storm::exceptions::IllegalArgumentException, "Unable to construct option with empty module name."); bool longNameContainsNonAlpha = std::find_if(longName.begin(), longName.end(), [](char c) { return !std::isalpha(c); }) != longName.end(); - LOG_THROW(!longNameContainsNonAlpha, storm::exceptions::IllegalArgumentException, "Unable to construct option with illegal name."); + STORM_LOG_THROW(!longNameContainsNonAlpha, storm::exceptions::IllegalArgumentException, "Unable to construct option with illegal name."); bool shortNameContainsNonAlpha = std::find_if(shortName.begin(), shortName.end(), [](char c) { return !std::isalpha(c); }) != shortName.end(); - LOG_THROW(!shortNameContainsNonAlpha, storm::exceptions::IllegalArgumentException, "Unable to construct option with illegal name."); + STORM_LOG_THROW(!shortNameContainsNonAlpha, storm::exceptions::IllegalArgumentException, "Unable to construct option with illegal name."); // Then index all arguments. for (auto const& argument : arguments) { diff --git a/src/settings/OptionBuilder.h b/src/settings/OptionBuilder.h index 4217d3471..2d7ad9a19 100644 --- a/src/settings/OptionBuilder.h +++ b/src/settings/OptionBuilder.h @@ -13,7 +13,7 @@ #include "src/settings/ArgumentBase.h" #include "src/settings/Option.h" -#include "src/exceptions/ExceptionMacros.h" +#include "src/utility/macros.h" #include "src/exceptions/IllegalArgumentException.h" #include "src/exceptions/IllegalFunctionCallException.h" @@ -67,11 +67,11 @@ namespace storm { * @return A reference to the current builder. */ OptionBuilder& addArgument(std::shared_ptr<ArgumentBase> argument) { - LOG_THROW(!this->isBuild, storm::exceptions::IllegalFunctionCallException, "Cannot add an argument to an option builder that was already used to build the option."); - LOG_THROW(this->arguments.empty() || !argument->getIsOptional() || this->arguments.back()->getIsOptional(), storm::exceptions::IllegalArgumentException, "Unable to add non-optional argument after an option that is optional."); + STORM_LOG_THROW(!this->isBuild, storm::exceptions::IllegalFunctionCallException, "Cannot add an argument to an option builder that was already used to build the option."); + STORM_LOG_THROW(this->arguments.empty() || !argument->getIsOptional() || this->arguments.back()->getIsOptional(), storm::exceptions::IllegalArgumentException, "Unable to add non-optional argument after an option that is optional."); std::string lowerArgumentName = boost::algorithm::to_lower_copy(argument->getName()); - LOG_THROW(argumentNameSet.find(lowerArgumentName) == argumentNameSet.end(), storm::exceptions::IllegalArgumentException, "Unable to add argument to option, because it already has an argument with the same name."); + STORM_LOG_THROW(argumentNameSet.find(lowerArgumentName) == argumentNameSet.end(), storm::exceptions::IllegalArgumentException, "Unable to add argument to option, because it already has an argument with the same name."); argumentNameSet.insert(lowerArgumentName); this->arguments.push_back(argument); @@ -85,7 +85,7 @@ namespace storm { * @return The resulting option. */ std::shared_ptr<Option> build() { - LOG_THROW(!this->isBuild, storm::exceptions::IllegalFunctionCallException, "Cannot rebuild an option with one builder.") + STORM_LOG_THROW(!this->isBuild, storm::exceptions::IllegalFunctionCallException, "Cannot rebuild an option with one builder.") this->isBuild = true; if (this->hasShortName) { diff --git a/src/settings/SettingsManager.cpp b/src/settings/SettingsManager.cpp index 83c8edd57..de54de36d 100644 --- a/src/settings/SettingsManager.cpp +++ b/src/settings/SettingsManager.cpp @@ -86,7 +86,7 @@ namespace storm { // match the long name. std::string optionName = currentArgument.substr(2); auto optionIterator = this->longNameToOptions.find(optionName); - LOG_THROW(optionIterator != this->longNameToOptions.end(), storm::exceptions::OptionParserException, "Unknown option '" << optionName << "'."); + STORM_LOG_THROW(optionIterator != this->longNameToOptions.end(), storm::exceptions::OptionParserException, "Unknown option '" << optionName << "'."); activeOptionIsShortName = false; activeOptionName = optionName; } else { @@ -94,7 +94,7 @@ namespace storm { // match the short name. std::string optionName = currentArgument.substr(1); auto optionIterator = this->shortNameToOptions.find(optionName); - LOG_THROW(optionIterator != this->shortNameToOptions.end(), storm::exceptions::OptionParserException, "Unknown option '" << optionName << "'."); + STORM_LOG_THROW(optionIterator != this->shortNameToOptions.end(), storm::exceptions::OptionParserException, "Unknown option '" << optionName << "'."); activeOptionIsShortName = true; activeOptionName = optionName; } @@ -102,7 +102,7 @@ namespace storm { // Add the current argument to the list of arguments for the currently active options. argumentCache.push_back(currentArgument); } else { - LOG_THROW(false, storm::exceptions::OptionParserException, "Found stray argument '" << currentArgument << "' that is not preceeded by a matching option."); + STORM_LOG_THROW(false, storm::exceptions::OptionParserException, "Found stray argument '" << currentArgument << "' that is not preceeded by a matching option."); } } @@ -113,7 +113,7 @@ namespace storm { } void SettingsManager::setFromConfigurationFile(std::string const& configFilename) { - LOG_ASSERT(false, "Not yet implemented."); + STORM_LOG_ASSERT(false, "Not yet implemented."); } void SettingsManager::printHelp(std::string const& hint) const { @@ -188,7 +188,7 @@ namespace storm { void SettingsManager::printHelpForModule(std::string const& moduleName, uint_fast64_t maxLength) const { auto moduleIterator = moduleOptions.find(moduleName); - LOG_THROW(moduleIterator != moduleOptions.end(), storm::exceptions::IllegalFunctionCallException, "Cannot print help for unknown module '" << moduleName << "'."); + STORM_LOG_THROW(moduleIterator != moduleOptions.end(), storm::exceptions::IllegalFunctionCallException, "Cannot print help for unknown module '" << moduleName << "'."); std::cout << "##### Module '" << moduleName << "' "; for (uint_fast64_t i = 0; i < std::min(maxLength, maxLength - moduleName.length() - 16); ++i) { std::cout << "#"; @@ -215,13 +215,13 @@ namespace storm { uint_fast64_t SettingsManager::getPrintLengthOfLongestOption(std::string const& moduleName) const { auto moduleIterator = modules.find(moduleName); - LOG_THROW(moduleIterator != modules.end(), storm::exceptions::IllegalFunctionCallException, "Unable to retrieve option length of unknown module '" << moduleName << "'."); + STORM_LOG_THROW(moduleIterator != modules.end(), storm::exceptions::IllegalFunctionCallException, "Unable to retrieve option length of unknown module '" << moduleName << "'."); return moduleIterator->second->getPrintLengthOfLongestOption(); } void SettingsManager::addModule(std::unique_ptr<modules::ModuleSettings>&& moduleSettings) { auto moduleIterator = this->modules.find(moduleSettings->getModuleName()); - LOG_THROW(moduleIterator == this->modules.end(), storm::exceptions::IllegalFunctionCallException, "Unable to register module '" << moduleSettings->getModuleName() << "' because a module with the same name already exists."); + STORM_LOG_THROW(moduleIterator == this->modules.end(), storm::exceptions::IllegalFunctionCallException, "Unable to register module '" << moduleSettings->getModuleName() << "' because a module with the same name already exists."); // Take over the module settings object. std::string const& moduleName = moduleSettings->getModuleName(); @@ -240,7 +240,7 @@ namespace storm { void SettingsManager::addOption(std::shared_ptr<Option> const& option) { // First, we register to which module the given option belongs. auto moduleOptionIterator = this->moduleOptions.find(option->getModuleName()); - LOG_THROW(moduleOptionIterator != this->moduleOptions.end(), storm::exceptions::IllegalFunctionCallException, "Cannot add option for unknown module '" << option->getModuleName() << "'."); + STORM_LOG_THROW(moduleOptionIterator != this->moduleOptions.end(), storm::exceptions::IllegalFunctionCallException, "Cannot add option for unknown module '" << option->getModuleName() << "'."); moduleOptionIterator->second.emplace_back(option); // Then, we add the option's name (and possibly short name) to the registered options. If a module prefix is @@ -248,7 +248,7 @@ namespace storm { // non-prefixed one. if (!option->getRequiresModulePrefix()) { bool isCompatible = this->isCompatible(option, option->getLongName(), this->longNameToOptions); - LOG_THROW(isCompatible, storm::exceptions::IllegalFunctionCallException, "Unable to add option '" << option->getLongName() << "', because an option with the same name is incompatible with it."); + STORM_LOG_THROW(isCompatible, storm::exceptions::IllegalFunctionCallException, "Unable to add option '" << option->getLongName() << "', because an option with the same name is incompatible with it."); addOptionToMap(option->getLongName(), option, this->longNameToOptions); } // For the prefixed name, we don't need a compatibility check, because a module is not allowed to register the same option twice. @@ -258,7 +258,7 @@ namespace storm { if (option->getHasShortName()) { if (!option->getRequiresModulePrefix()) { bool isCompatible = this->isCompatible(option, option->getShortName(), this->shortNameToOptions); - LOG_THROW(isCompatible, storm::exceptions::IllegalFunctionCallException, "Unable to add option '" << option->getLongName() << "', because an option with the same name is incompatible with it."); + STORM_LOG_THROW(isCompatible, storm::exceptions::IllegalFunctionCallException, "Unable to add option '" << option->getLongName() << "', because an option with the same name is incompatible with it."); addOptionToMap(option->getShortName(), option, this->shortNameToOptions); } addOptionToMap(option->getModuleName() + ":" + option->getShortName(), option, this->shortNameToOptions); @@ -267,13 +267,13 @@ namespace storm { modules::ModuleSettings const& SettingsManager::getModule(std::string const& moduleName) const { auto moduleIterator = this->modules.find(moduleName); - LOG_THROW(moduleIterator != this->modules.end(), storm::exceptions::IllegalFunctionCallException, "Cannot retrieve unknown module '" << moduleName << "'."); + STORM_LOG_THROW(moduleIterator != this->modules.end(), storm::exceptions::IllegalFunctionCallException, "Cannot retrieve unknown module '" << moduleName << "'."); return *moduleIterator->second; } modules::ModuleSettings& SettingsManager::getModule(std::string const& moduleName) { auto moduleIterator = this->modules.find(moduleName); - LOG_THROW(moduleIterator != this->modules.end(), storm::exceptions::IllegalFunctionCallException, "Cannot retrieve unknown module '" << moduleName << "'."); + STORM_LOG_THROW(moduleIterator != this->modules.end(), storm::exceptions::IllegalFunctionCallException, "Cannot retrieve unknown module '" << moduleName << "'."); return *moduleIterator->second; } @@ -292,12 +292,12 @@ namespace storm { void SettingsManager::setOptionsArguments(std::string const& optionName, std::unordered_map<std::string, std::vector<std::shared_ptr<Option>>> const& optionMap, std::vector<std::string> const& argumentCache) { auto optionIterator = optionMap.find(optionName); - LOG_THROW(optionIterator != optionMap.end(), storm::exceptions::OptionParserException, "Unknown option '" << optionName << "'."); + STORM_LOG_THROW(optionIterator != optionMap.end(), storm::exceptions::OptionParserException, "Unknown option '" << optionName << "'."); // Iterate over all options and set the arguments. for (auto& option : optionIterator->second) { option->setHasOptionBeenSet(); - LOG_THROW(argumentCache.size() <= option->getArgumentCount(), storm::exceptions::OptionParserException, "Too many arguments for option '" << optionName << "'."); + STORM_LOG_THROW(argumentCache.size() <= option->getArgumentCount(), storm::exceptions::OptionParserException, "Too many arguments for option '" << optionName << "'."); // Now set the provided argument values one by one. for (uint_fast64_t i = 0; i < argumentCache.size(); ++i) { diff --git a/src/settings/SettingsManager.h b/src/settings/SettingsManager.h index b14235a60..94d309813 100644 --- a/src/settings/SettingsManager.h +++ b/src/settings/SettingsManager.h @@ -27,7 +27,7 @@ #include "src/settings/modules/GlpkSettings.h" #include "src/settings/modules/GurobiSettings.h" -#include "src/exceptions/ExceptionMacros.h" +#include "src/utility/macros.h" #include "src/exceptions/OptionParserException.h" namespace storm { diff --git a/src/settings/modules/CuddSettings.cpp b/src/settings/modules/CuddSettings.cpp index 6404b77ac..c494b5ca6 100644 --- a/src/settings/modules/CuddSettings.cpp +++ b/src/settings/modules/CuddSettings.cpp @@ -85,7 +85,7 @@ namespace storm { } else if (reorderingTechniqueAsString == "exact") { return CuddSettings::ReorderingTechnique::Exact; } - LOG_THROW(false, storm::exceptions::IllegalArgumentValueException, "Illegal value '" << reorderingTechniqueAsString << "' set as reordering technique of Cudd."); + STORM_LOG_THROW(false, storm::exceptions::IllegalArgumentValueException, "Illegal value '" << reorderingTechniqueAsString << "' set as reordering technique of Cudd."); } } // namespace modules diff --git a/src/settings/modules/GeneralSettings.cpp b/src/settings/modules/GeneralSettings.cpp index 1675f1f48..fb3f89352 100644 --- a/src/settings/modules/GeneralSettings.cpp +++ b/src/settings/modules/GeneralSettings.cpp @@ -22,8 +22,11 @@ namespace storm { const std::string GeneralSettings::symbolicOptionName = "symbolic"; const std::string GeneralSettings::symbolicOptionShortName = "s"; const std::string GeneralSettings::pctlOptionName = "pctl"; + const std::string GeneralSettings::pctlFileOptionName = "pctlfile"; const std::string GeneralSettings::cslOptionName = "csl"; + const std::string GeneralSettings::cslFileOptionName = "cslfile"; const std::string GeneralSettings::ltlOptionName = "ltl"; + const std::string GeneralSettings::ltlFileOptionName = "ltlfile"; const std::string GeneralSettings::transitionRewardsOptionName = "transrew"; const std::string GeneralSettings::stateRewardsOptionName = "staterew"; const std::string GeneralSettings::counterexampleOptionName = "counterexample"; @@ -53,11 +56,17 @@ namespace storm { .addArgument(storm::settings::ArgumentBuilder::createStringArgument("labeling filename", "The name of the file from which to read the state labeling.").addValidationFunctionString(storm::settings::ArgumentValidators::existingReadableFileValidator()).build()).build()); this->addOption(storm::settings::OptionBuilder(moduleName, symbolicOptionName, false, "Parses the model given in a symbolic representation.").setShortName(symbolicOptionShortName) .addArgument(storm::settings::ArgumentBuilder::createStringArgument("filename", "The name of the file from which to read the symbolic model.").addValidationFunctionString(storm::settings::ArgumentValidators::existingReadableFileValidator()).build()).build()); - this->addOption(storm::settings::OptionBuilder(moduleName, pctlOptionName, false, "Specifies the PCTL formulas that are to be checked on the model.") + this->addOption(storm::settings::OptionBuilder(moduleName, pctlOptionName, false, "Specifies a PCTL formula that is to be checked on the model.") + .addArgument(storm::settings::ArgumentBuilder::createStringArgument("formula", "The formula to check.").build()).build()); + this->addOption(storm::settings::OptionBuilder(moduleName, pctlFileOptionName, false, "Specifies the PCTL formulas that are to be checked on the model.") .addArgument(storm::settings::ArgumentBuilder::createStringArgument("filename", "The file from which to read the PCTL formulas.").addValidationFunctionString(storm::settings::ArgumentValidators::existingReadableFileValidator()).build()).build()); - this->addOption(storm::settings::OptionBuilder(moduleName, cslOptionName, false, "Specifies the CSL formulas that are to be checked on the model.") + this->addOption(storm::settings::OptionBuilder(moduleName, cslOptionName, false, "Specifies a CSL formula that is to be checked on the model.") + .addArgument(storm::settings::ArgumentBuilder::createStringArgument("formula", "The formula to check.").build()).build()); + this->addOption(storm::settings::OptionBuilder(moduleName, cslFileOptionName, false, "Specifies the CSL formulas that are to be checked on the model.") .addArgument(storm::settings::ArgumentBuilder::createStringArgument("filename", "The file from which to read the CSL formulas.").addValidationFunctionString(storm::settings::ArgumentValidators::existingReadableFileValidator()).build()).build()); - this->addOption(storm::settings::OptionBuilder(moduleName, ltlOptionName, false, "Specifies the LTL formulas that are to be checked on the model.") + this->addOption(storm::settings::OptionBuilder(moduleName, ltlOptionName, false, "Specifies an LTL formula that is to be checked on the model.") + .addArgument(storm::settings::ArgumentBuilder::createStringArgument("formula", "The formula to check.").build()).build()); + this->addOption(storm::settings::OptionBuilder(moduleName, ltlFileOptionName, false, "Specifies the LTL formulas that are to be checked on the model.") .addArgument(storm::settings::ArgumentBuilder::createStringArgument("filename", "The file from which to read the LTL formulas.").addValidationFunctionString(storm::settings::ArgumentValidators::existingReadableFileValidator()).build()).build()); this->addOption(storm::settings::OptionBuilder(moduleName, counterexampleOptionName, false, "Generates a counterexample for the given PRCTL formulas if not satisfied by the model") .addArgument(storm::settings::ArgumentBuilder::createStringArgument("filename", "The name of the file to which the counterexample is to be written.").build()).build()); @@ -136,26 +145,50 @@ namespace storm { return this->getOption(symbolicOptionName).getArgumentByName("filename").getValueAsString(); } - bool GeneralSettings::isPctlSet() const { + bool GeneralSettings::isPctlPropertySet() const { return this->getOption(pctlOptionName).getHasOptionBeenSet(); } + std::string GeneralSettings::getPctlProperty() const { + return this->getOption(pctlOptionName).getArgumentByName("formula").getValueAsString(); + } + + bool GeneralSettings::isPctlFileSet() const { + return this->getOption(pctlFileOptionName).getHasOptionBeenSet(); + } + std::string GeneralSettings::getPctlPropertiesFilename() const { - return this->getOption(pctlOptionName).getArgumentByName("filename").getValueAsString(); + return this->getOption(pctlFileOptionName).getArgumentByName("filename").getValueAsString(); } - bool GeneralSettings::isCslSet() const { + bool GeneralSettings::isCslPropertySet() const { return this->getOption(cslOptionName).getHasOptionBeenSet(); } + std::string GeneralSettings::getCslProperty() const { + return this->getOption(cslOptionName).getArgumentByName("formula").getValueAsString(); + } + + bool GeneralSettings::isCslFileSet() const { + return this->getOption(cslFileOptionName).getHasOptionBeenSet(); + } + std::string GeneralSettings::getCslPropertiesFilename() const { return this->getOption(cslOptionName).getArgumentByName("filename").getValueAsString(); } - bool GeneralSettings::isLtlSet() const { + bool GeneralSettings::isLtlPropertySet() const { return this->getOption(ltlOptionName).getHasOptionBeenSet(); } + std::string GeneralSettings::getLtlProperty() const { + return this->getOption(ltlOptionName).getArgumentByName("formula").getValueAsString(); + } + + bool GeneralSettings::isLtlFileSet() const { + return this->getOption(ltlFileOptionName).getHasOptionBeenSet(); + } + std::string GeneralSettings::getLtlPropertiesFilename() const { return this->getOption(ltlOptionName).getArgumentByName("filename").getValueAsString(); } @@ -207,7 +240,7 @@ namespace storm { } else if (equationSolverName == "native") { return GeneralSettings::EquationSolver::Native; } - LOG_THROW(false, storm::exceptions::IllegalArgumentValueException, "Unknown equation solver '" << equationSolverName << "'."); + STORM_LOG_THROW(false, storm::exceptions::IllegalArgumentValueException, "Unknown equation solver '" << equationSolverName << "'."); } GeneralSettings::LpSolver GeneralSettings::getLpSolver() const { @@ -217,7 +250,7 @@ namespace storm { } else if (lpSolverName == "glpk") { return GeneralSettings::LpSolver::glpk; } - LOG_THROW(false, storm::exceptions::IllegalArgumentValueException, "Unknown LP solver '" << lpSolverName << "'."); + STORM_LOG_THROW(false, storm::exceptions::IllegalArgumentValueException, "Unknown LP solver '" << lpSolverName << "'."); } bool GeneralSettings::isConstantsSet() const { diff --git a/src/settings/modules/GeneralSettings.h b/src/settings/modules/GeneralSettings.h index faac6492c..e37030385 100644 --- a/src/settings/modules/GeneralSettings.h +++ b/src/settings/modules/GeneralSettings.h @@ -125,7 +125,21 @@ namespace storm { * * @return True if the pctl option was set. */ - bool isPctlSet() const; + bool isPctlPropertySet() const; + + /*! + * Retrieves the property specified with the pctl option. + * + * @return The property specified with the pctl option. + */ + std::string getPctlProperty() const; + + /*! + * Retrieves whether the pctl-file option was set. + * + * @return True iff the pctl-file option was set. + */ + bool isPctlFileSet() const; /*! * Retrieves the name of the file that contains the PCTL properties to be checked on the model. @@ -139,8 +153,22 @@ namespace storm { * * @return True if the csl option was set. */ - bool isCslSet() const; + bool isCslPropertySet() const; + /*! + * Retrieves the property specified with the csl option. + * + * @return The property specified with the csl option. + */ + std::string getCslProperty() const; + + /*! + * Retrieves whether the csl-file option was set. + * + * @return True iff the csl-file option was set. + */ + bool isCslFileSet() const; + /*! * Retrieves the name of the file that contains the CSL properties to be checked on the model. * @@ -153,8 +181,22 @@ namespace storm { * * @return True if the ltl option was set. */ - bool isLtlSet() const; + bool isLtlPropertySet() const; + /*! + * Retrieves the property specified with the ltl option. + * + * @return The property specified with the ltl option. + */ + std::string getLtlProperty() const; + + /*! + * Retrieves whether the ltl-file option was set. + * + * @return True iff the ltl-file option was set. + */ + bool isLtlFileSet() const; + /*! * Retrieves the name of the file that contains the LTL properties to be checked on the model. * @@ -291,8 +333,11 @@ namespace storm { static const std::string symbolicOptionName; static const std::string symbolicOptionShortName; static const std::string pctlOptionName; + static const std::string pctlFileOptionName; static const std::string cslOptionName; + static const std::string cslFileOptionName; static const std::string ltlOptionName; + static const std::string ltlFileOptionName; static const std::string transitionRewardsOptionName; static const std::string stateRewardsOptionName; static const std::string counterexampleOptionName; diff --git a/src/settings/modules/GmmxxEquationSolverSettings.cpp b/src/settings/modules/GmmxxEquationSolverSettings.cpp index 434fc275f..c9c8b1840 100644 --- a/src/settings/modules/GmmxxEquationSolverSettings.cpp +++ b/src/settings/modules/GmmxxEquationSolverSettings.cpp @@ -43,7 +43,7 @@ namespace storm { } else if (linearEquationSystemTechniqueAsString == "jacobi") { return GmmxxEquationSolverSettings::LinearEquationTechnique::Jacobi; } - LOG_THROW(false, storm::exceptions::IllegalArgumentValueException, "Unknown solution technique '" << linearEquationSystemTechniqueAsString << "' selected."); + STORM_LOG_THROW(false, storm::exceptions::IllegalArgumentValueException, "Unknown solution technique '" << linearEquationSystemTechniqueAsString << "' selected."); } GmmxxEquationSolverSettings::PreconditioningTechnique GmmxxEquationSolverSettings::getPreconditioningTechnique() const { @@ -55,7 +55,7 @@ namespace storm { } else if (preconditioningTechniqueAsString == "none") { return GmmxxEquationSolverSettings::PreconditioningTechnique::None; } - LOG_THROW(false, storm::exceptions::IllegalArgumentValueException, "Unknown preconditioning technique '" << preconditioningTechniqueAsString << "' selected."); + STORM_LOG_THROW(false, storm::exceptions::IllegalArgumentValueException, "Unknown preconditioning technique '" << preconditioningTechniqueAsString << "' selected."); } uint_fast64_t GmmxxEquationSolverSettings::getRestartIterationCount() const { diff --git a/src/settings/modules/ModuleSettings.cpp b/src/settings/modules/ModuleSettings.cpp index a45c2f6ad..f29e15109 100644 --- a/src/settings/modules/ModuleSettings.cpp +++ b/src/settings/modules/ModuleSettings.cpp @@ -33,13 +33,13 @@ namespace storm { Option const& ModuleSettings::getOption(std::string const& longName) const { auto optionIterator = this->optionMap.find(longName); - LOG_THROW(optionIterator != this->optionMap.end(), storm::exceptions::IllegalFunctionCallException, "Cannot retrieve unknown option '" << longName << "'."); + STORM_LOG_THROW(optionIterator != this->optionMap.end(), storm::exceptions::IllegalFunctionCallException, "Cannot retrieve unknown option '" << longName << "'."); return *optionIterator->second; } Option& ModuleSettings::getOption(std::string const& longName) { auto optionIterator = this->optionMap.find(longName); - LOG_THROW(optionIterator != this->optionMap.end(), storm::exceptions::IllegalFunctionCallException, "Cannot retrieve unknown option '" << longName << "'."); + STORM_LOG_THROW(optionIterator != this->optionMap.end(), storm::exceptions::IllegalFunctionCallException, "Cannot retrieve unknown option '" << longName << "'."); return *optionIterator->second; } @@ -63,7 +63,7 @@ namespace storm { void ModuleSettings::addOption(std::shared_ptr<Option> const& option) { auto optionIterator = this->optionMap.find(option->getLongName()); - LOG_THROW(optionIterator == this->optionMap.end(), storm::exceptions::IllegalFunctionCallException, "Unable to register the option '" << option->getLongName() << "' in module '" << this->getModuleName() << "', because an option with this name already exists."); + STORM_LOG_THROW(optionIterator == this->optionMap.end(), storm::exceptions::IllegalFunctionCallException, "Unable to register the option '" << option->getLongName() << "' in module '" << this->getModuleName() << "', because an option with this name already exists."); this->optionMap.emplace(option->getLongName(), option); this->options.push_back(option); } diff --git a/src/settings/modules/NativeEquationSolverSettings.cpp b/src/settings/modules/NativeEquationSolverSettings.cpp index cdde61942..b03feece6 100644 --- a/src/settings/modules/NativeEquationSolverSettings.cpp +++ b/src/settings/modules/NativeEquationSolverSettings.cpp @@ -29,7 +29,7 @@ namespace storm { if (linearEquationSystemTechniqueAsString == "jacobi") { return NativeEquationSolverSettings::LinearEquationTechnique::Jacobi; } - LOG_THROW(false, storm::exceptions::IllegalArgumentValueException, "Unknown solution technique '" << linearEquationSystemTechniqueAsString << "' selected."); + STORM_LOG_THROW(false, storm::exceptions::IllegalArgumentValueException, "Unknown solution technique '" << linearEquationSystemTechniqueAsString << "' selected."); } uint_fast64_t NativeEquationSolverSettings::getMaximalIterationCount() const { diff --git a/src/solver/GlpkLpSolver.cpp b/src/solver/GlpkLpSolver.cpp index b61679929..e902dc8f9 100644 --- a/src/solver/GlpkLpSolver.cpp +++ b/src/solver/GlpkLpSolver.cpp @@ -7,7 +7,7 @@ #include "src/storage/expressions/LinearCoefficientVisitor.h" #include "src/settings/SettingsManager.h" -#include "src/exceptions/ExceptionMacros.h" +#include "src/utility/macros.h" #include "src/exceptions/InvalidAccessException.h" #include "src/exceptions/InvalidStateException.h" @@ -91,13 +91,13 @@ namespace storm { void GlpkLpSolver::addVariable(std::string const& name, int variableType, int boundType, double lowerBound, double upperBound, double objectiveFunctionCoefficient) { // Check whether variable already exists. auto nameIndexPair = this->variableNameToIndexMap.find(name); - LOG_THROW(nameIndexPair == this->variableNameToIndexMap.end(), storm::exceptions::InvalidArgumentException, "Variable '" << nameIndexPair->first << "' already exists."); + STORM_LOG_THROW(nameIndexPair == this->variableNameToIndexMap.end(), storm::exceptions::InvalidArgumentException, "Variable '" << nameIndexPair->first << "' already exists."); // Check for valid variable type. - LOG_ASSERT(variableType == GLP_CV || variableType == GLP_IV || variableType == GLP_BV, "Illegal type '" << variableType << "' for glpk variable."); + STORM_LOG_ASSERT(variableType == GLP_CV || variableType == GLP_IV || variableType == GLP_BV, "Illegal type '" << variableType << "' for glpk variable."); // Check for valid bound type. - LOG_ASSERT(boundType == GLP_FR || boundType == GLP_UP || boundType == GLP_LO || boundType == GLP_DB, "Illegal bound type for variable '" << name << "'."); + STORM_LOG_ASSERT(boundType == GLP_FR || boundType == GLP_UP || boundType == GLP_LO || boundType == GLP_DB, "Illegal bound type for variable '" << name << "'."); // Finally, create the actual variable. glp_add_cols(this->lp, 1); @@ -118,8 +118,8 @@ namespace storm { glp_add_rows(this->lp, 1); glp_set_row_name(this->lp, nextConstraintIndex, name.c_str()); - LOG_THROW(constraint.isRelationalExpression(), storm::exceptions::InvalidArgumentException, "Illegal constraint is not a relational expression."); - LOG_THROW(constraint.getOperator() != storm::expressions::OperatorType::NotEqual, storm::exceptions::InvalidArgumentException, "Illegal constraint uses inequality operator."); + STORM_LOG_THROW(constraint.isRelationalExpression(), storm::exceptions::InvalidArgumentException, "Illegal constraint is not a relational expression."); + STORM_LOG_THROW(constraint.getOperator() != storm::expressions::OperatorType::NotEqual, storm::exceptions::InvalidArgumentException, "Illegal constraint uses inequality operator."); std::pair<storm::expressions::SimpleValuation, double> leftCoefficients = storm::expressions::LinearCoefficientVisitor().getLinearCoefficients(constraint.getOperand(0)); std::pair<storm::expressions::SimpleValuation, double> rightCoefficients = storm::expressions::LinearCoefficientVisitor().getLinearCoefficients(constraint.getOperand(1)); @@ -137,7 +137,7 @@ namespace storm { std::vector<double> coefficients; for (auto const& identifier : leftCoefficients.first.getDoubleIdentifiers()) { auto identifierIndexPair = this->variableNameToIndexMap.find(identifier); - LOG_THROW(identifierIndexPair != this->variableNameToIndexMap.end(), storm::exceptions::InvalidArgumentException, "Constraint contains illegal identifier '" << identifier << "'."); + STORM_LOG_THROW(identifierIndexPair != this->variableNameToIndexMap.end(), storm::exceptions::InvalidArgumentException, "Constraint contains illegal identifier '" << identifier << "'."); variables.push_back(identifierIndexPair->second); coefficients.push_back(leftCoefficients.first.getDoubleValue(identifier)); } @@ -160,7 +160,7 @@ namespace storm { glp_set_row_bnds(this->lp, nextConstraintIndex, GLP_FX, rightCoefficients.second, rightCoefficients.second); break; default: - LOG_ASSERT(false, "Illegal operator in LP solver constraint."); + STORM_LOG_ASSERT(false, "Illegal operator in LP solver constraint."); } // Record the variables and coefficients in the coefficient matrix. @@ -206,7 +206,7 @@ namespace storm { error = glp_simplex(this->lp, nullptr); } - LOG_THROW(error == 0, storm::exceptions::InvalidStateException, "Unable to optimize glpk model (" << error << ")."); + STORM_LOG_THROW(error == 0, storm::exceptions::InvalidStateException, "Unable to optimize glpk model (" << error << ")."); this->currentModelHasBeenOptimized = true; } @@ -250,13 +250,13 @@ namespace storm { double GlpkLpSolver::getContinuousValue(std::string const& name) const { if (!this->isOptimal()) { - LOG_THROW(!this->isInfeasible(), storm::exceptions::InvalidAccessException, "Unable to get glpk solution from infeasible model."); - LOG_THROW(!this->isUnbounded(), storm::exceptions::InvalidAccessException, "Unable to get glpk solution from unbounded model."); - LOG_THROW(false, storm::exceptions::InvalidAccessException, "Unable to get glpk solution from unoptimized model."); + STORM_LOG_THROW(!this->isInfeasible(), storm::exceptions::InvalidAccessException, "Unable to get glpk solution from infeasible model."); + STORM_LOG_THROW(!this->isUnbounded(), storm::exceptions::InvalidAccessException, "Unable to get glpk solution from unbounded model."); + STORM_LOG_THROW(false, storm::exceptions::InvalidAccessException, "Unable to get glpk solution from unoptimized model."); } auto variableIndexPair = this->variableNameToIndexMap.find(name); - LOG_THROW(variableIndexPair != this->variableNameToIndexMap.end(), storm::exceptions::InvalidAccessException, "Accessing value of unknown variable '" << name << "'."); + STORM_LOG_THROW(variableIndexPair != this->variableNameToIndexMap.end(), storm::exceptions::InvalidAccessException, "Accessing value of unknown variable '" << name << "'."); double value = 0; if (this->modelContainsIntegerVariables) { @@ -269,13 +269,13 @@ namespace storm { int_fast64_t GlpkLpSolver::getIntegerValue(std::string const& name) const { if (!this->isOptimal()) { - LOG_THROW(!this->isInfeasible(), storm::exceptions::InvalidAccessException, "Unable to get glpk solution from infeasible model."); - LOG_THROW(!this->isUnbounded(), storm::exceptions::InvalidAccessException, "Unable to get glpk solution from unbounded model."); - LOG_THROW(false, storm::exceptions::InvalidAccessException, "Unable to get glpk solution from unoptimized model."); + STORM_LOG_THROW(!this->isInfeasible(), storm::exceptions::InvalidAccessException, "Unable to get glpk solution from infeasible model."); + STORM_LOG_THROW(!this->isUnbounded(), storm::exceptions::InvalidAccessException, "Unable to get glpk solution from unbounded model."); + STORM_LOG_THROW(false, storm::exceptions::InvalidAccessException, "Unable to get glpk solution from unoptimized model."); } auto variableIndexPair = this->variableNameToIndexMap.find(name); - LOG_THROW(variableIndexPair != this->variableNameToIndexMap.end(), storm::exceptions::InvalidAccessException, "Accessing value of unknown variable '" << name << "'."); + STORM_LOG_THROW(variableIndexPair != this->variableNameToIndexMap.end(), storm::exceptions::InvalidAccessException, "Accessing value of unknown variable '" << name << "'."); double value = 0; if (this->modelContainsIntegerVariables) { @@ -285,20 +285,20 @@ namespace storm { } // Now check the desired precision was actually achieved. - LOG_THROW(std::abs(static_cast<int>(value) - value) <= storm::settings::glpkSettings().getIntegerTolerance(), storm::exceptions::InvalidStateException, "Illegal value for integer variable in glpk solution (" << value << ")."); + STORM_LOG_THROW(std::abs(static_cast<int>(value) - value) <= storm::settings::glpkSettings().getIntegerTolerance(), storm::exceptions::InvalidStateException, "Illegal value for integer variable in glpk solution (" << value << ")."); return static_cast<int_fast64_t>(value); } bool GlpkLpSolver::getBinaryValue(std::string const& name) const { if (!this->isOptimal()) { - LOG_THROW(!this->isInfeasible(), storm::exceptions::InvalidAccessException, "Unable to get glpk solution from infeasible model."); - LOG_THROW(!this->isUnbounded(), storm::exceptions::InvalidAccessException, "Unable to get glpk solution from unbounded model."); - LOG_THROW(false, storm::exceptions::InvalidAccessException, "Unable to get glpk solution from unoptimized model."); + STORM_LOG_THROW(!this->isInfeasible(), storm::exceptions::InvalidAccessException, "Unable to get glpk solution from infeasible model."); + STORM_LOG_THROW(!this->isUnbounded(), storm::exceptions::InvalidAccessException, "Unable to get glpk solution from unbounded model."); + STORM_LOG_THROW(false, storm::exceptions::InvalidAccessException, "Unable to get glpk solution from unoptimized model."); } auto variableIndexPair = this->variableNameToIndexMap.find(name); - LOG_THROW(variableIndexPair != this->variableNameToIndexMap.end(), storm::exceptions::InvalidAccessException, "Accessing value of unknown variable '" << name << "'."); + STORM_LOG_THROW(variableIndexPair != this->variableNameToIndexMap.end(), storm::exceptions::InvalidAccessException, "Accessing value of unknown variable '" << name << "'."); double value = 0; if (this->modelContainsIntegerVariables) { @@ -307,16 +307,16 @@ namespace storm { value = glp_get_col_prim(this->lp, static_cast<int>(variableIndexPair->second)); } - LOG_THROW(std::abs(static_cast<int>(value) - value) <= storm::settings::glpkSettings().getIntegerTolerance(), storm::exceptions::InvalidStateException, "Illegal value for binary variable in glpk solution (" << value << ")."); + STORM_LOG_THROW(std::abs(static_cast<int>(value) - value) <= storm::settings::glpkSettings().getIntegerTolerance(), storm::exceptions::InvalidStateException, "Illegal value for binary variable in glpk solution (" << value << ")."); return static_cast<bool>(value); } double GlpkLpSolver::getObjectiveValue() const { if (!this->isOptimal()) { - LOG_THROW(!this->isInfeasible(), storm::exceptions::InvalidAccessException, "Unable to get glpk solution from infeasible model."); - LOG_THROW(!this->isUnbounded(), storm::exceptions::InvalidAccessException, "Unable to get glpk solution from unbounded model."); - LOG_THROW(false, storm::exceptions::InvalidAccessException, "Unable to get glpk solution from unoptimized model."); + STORM_LOG_THROW(!this->isInfeasible(), storm::exceptions::InvalidAccessException, "Unable to get glpk solution from infeasible model."); + STORM_LOG_THROW(!this->isUnbounded(), storm::exceptions::InvalidAccessException, "Unable to get glpk solution from unbounded model."); + STORM_LOG_THROW(false, storm::exceptions::InvalidAccessException, "Unable to get glpk solution from unoptimized model."); } double value = 0; diff --git a/src/solver/GurobiLpSolver.cpp b/src/solver/GurobiLpSolver.cpp index 519062b28..957c4f8e7 100644 --- a/src/solver/GurobiLpSolver.cpp +++ b/src/solver/GurobiLpSolver.cpp @@ -6,7 +6,7 @@ #include "src/storage/expressions/LinearCoefficientVisitor.h" #include "src/settings/SettingsManager.h" -#include "src/exceptions/ExceptionMacros.h" +#include "src/utility/macros.h" #include "src/exceptions/InvalidStateException.h" #include "src/exceptions/InvalidAccessException.h" @@ -55,20 +55,20 @@ namespace storm { // Enable the following line to only print the output of Gurobi if the debug flag is set. error = GRBsetintparam(env, "OutputFlag", storm::settings::debugSettings().isDebugSet() || storm::settings::gurobiSettings().isOutputSet() ? 1 : 0); - LOG_THROW(error == 0, storm::exceptions::InvalidStateException, "Unable to set Gurobi Parameter OutputFlag (" << GRBgeterrormsg(env) << ", error code " << error << ")."); + STORM_LOG_THROW(error == 0, storm::exceptions::InvalidStateException, "Unable to set Gurobi Parameter OutputFlag (" << GRBgeterrormsg(env) << ", error code " << error << ")."); // Enable the following line to restrict Gurobi to one thread only. error = GRBsetintparam(env, "Threads", storm::settings::gurobiSettings().getNumberOfThreads()); - LOG_THROW(error == 0, storm::exceptions::InvalidStateException, "Unable to set Gurobi Parameter Threads (" << GRBgeterrormsg(env) << ", error code " << error << ")."); + STORM_LOG_THROW(error == 0, storm::exceptions::InvalidStateException, "Unable to set Gurobi Parameter Threads (" << GRBgeterrormsg(env) << ", error code " << error << ")."); // Enable the following line to force Gurobi to be as precise about the binary variables as required by the given precision option. error = GRBsetdblparam(env, "IntFeasTol", storm::settings::gurobiSettings().getIntegerTolerance()); - LOG_THROW(error == 0, storm::exceptions::InvalidStateException, "Unable to set Gurobi Parameter IntFeasTol (" << GRBgeterrormsg(env) << ", error code " << error << ")."); + STORM_LOG_THROW(error == 0, storm::exceptions::InvalidStateException, "Unable to set Gurobi Parameter IntFeasTol (" << GRBgeterrormsg(env) << ", error code " << error << ")."); } void GurobiLpSolver::update() const { int error = GRBupdatemodel(model); - LOG_THROW(error == 0, storm::exceptions::InvalidStateException, "Unable to update Gurobi model (" << GRBgeterrormsg(env) << ", error code " << error << ")."); + STORM_LOG_THROW(error == 0, storm::exceptions::InvalidStateException, "Unable to update Gurobi model (" << GRBgeterrormsg(env) << ", error code " << error << ")."); // Since the model changed, we erase the optimality flag. this->currentModelHasBeenOptimized = false; @@ -113,22 +113,22 @@ namespace storm { void GurobiLpSolver::addVariable(std::string const& name, char variableType, double lowerBound, double upperBound, double objectiveFunctionCoefficient) { // Check whether variable already exists. auto nameIndexPair = this->variableNameToIndexMap.find(name); - LOG_THROW(nameIndexPair == this->variableNameToIndexMap.end(), storm::exceptions::InvalidArgumentException, "Variable '" << nameIndexPair->first << "' already exists."); + STORM_LOG_THROW(nameIndexPair == this->variableNameToIndexMap.end(), storm::exceptions::InvalidArgumentException, "Variable '" << nameIndexPair->first << "' already exists."); // Check for valid variable type. - LOG_ASSERT(variableType == GRB_CONTINUOUS || variableType == GRB_INTEGER || variableType == GRB_BINARY, "Illegal type '" << variableType << "' for Gurobi variable."); + STORM_LOG_ASSERT(variableType == GRB_CONTINUOUS || variableType == GRB_INTEGER || variableType == GRB_BINARY, "Illegal type '" << variableType << "' for Gurobi variable."); // Finally, create the actual variable. int error = 0; error = GRBaddvar(model, 0, nullptr, nullptr, objectiveFunctionCoefficient, lowerBound, upperBound, variableType, name.c_str()); - LOG_THROW(error == 0, storm::exceptions::InvalidStateException, "Could not create binary Gurobi variable (" << GRBgeterrormsg(env) << ", error code " << error << ")."); + STORM_LOG_THROW(error == 0, storm::exceptions::InvalidStateException, "Could not create binary Gurobi variable (" << GRBgeterrormsg(env) << ", error code " << error << ")."); this->variableNameToIndexMap.emplace(name, nextVariableIndex); ++nextVariableIndex; } void GurobiLpSolver::addConstraint(std::string const& name, storm::expressions::Expression const& constraint) { - LOG_THROW(constraint.isRelationalExpression(), storm::exceptions::InvalidArgumentException, "Illegal constraint is not a relational expression."); - LOG_THROW(constraint.getOperator() != storm::expressions::OperatorType::NotEqual, storm::exceptions::InvalidArgumentException, "Illegal constraint uses inequality operator."); + STORM_LOG_THROW(constraint.isRelationalExpression(), storm::exceptions::InvalidArgumentException, "Illegal constraint is not a relational expression."); + STORM_LOG_THROW(constraint.getOperator() != storm::expressions::OperatorType::NotEqual, storm::exceptions::InvalidArgumentException, "Illegal constraint uses inequality operator."); std::pair<storm::expressions::SimpleValuation, double> leftCoefficients = storm::expressions::LinearCoefficientVisitor().getLinearCoefficients(constraint.getOperand(0)); std::pair<storm::expressions::SimpleValuation, double> rightCoefficients = storm::expressions::LinearCoefficientVisitor().getLinearCoefficients(constraint.getOperand(1)); @@ -146,7 +146,7 @@ namespace storm { std::vector<double> coefficients; for (auto const& identifier : leftCoefficients.first.getDoubleIdentifiers()) { auto identifierIndexPair = this->variableNameToIndexMap.find(identifier); - LOG_THROW(identifierIndexPair != this->variableNameToIndexMap.end(), storm::exceptions::InvalidArgumentException, "Constraint contains illegal identifier '" << identifier << "'."); + STORM_LOG_THROW(identifierIndexPair != this->variableNameToIndexMap.end(), storm::exceptions::InvalidArgumentException, "Constraint contains illegal identifier '" << identifier << "'."); variables.push_back(identifierIndexPair->second); coefficients.push_back(leftCoefficients.first.getDoubleValue(identifier)); } @@ -170,9 +170,9 @@ namespace storm { error = GRBaddconstr(model, variables.size(), variables.data(), coefficients.data(), GRB_EQUAL, rightCoefficients.second, name == "" ? nullptr : name.c_str()); break; default: - LOG_ASSERT(false, "Illegal operator in LP solver constraint."); + STORM_LOG_ASSERT(false, "Illegal operator in LP solver constraint."); } - LOG_THROW(error == 0, storm::exceptions::InvalidStateException, "Could not assert constraint (" << GRBgeterrormsg(env) << ", error code " << error << ")."); + STORM_LOG_THROW(error == 0, storm::exceptions::InvalidStateException, "Could not assert constraint (" << GRBgeterrormsg(env) << ", error code " << error << ")."); } void GurobiLpSolver::optimize() const { @@ -181,11 +181,11 @@ namespace storm { // Set the most recently set model sense. int error = GRBsetintattr(model, "ModelSense", this->getModelSense() == ModelSense::Minimize ? 1 : -1); - LOG_THROW(error == 0, storm::exceptions::InvalidStateException, "Unable to set Gurobi model sense (" << GRBgeterrormsg(env) << ", error code " << error << ")."); + STORM_LOG_THROW(error == 0, storm::exceptions::InvalidStateException, "Unable to set Gurobi model sense (" << GRBgeterrormsg(env) << ", error code " << error << ")."); // Then we actually optimize the model. error = GRBoptimize(model); - LOG_THROW(error == 0, storm::exceptions::InvalidStateException, "Unable to optimize Gurobi model (" << GRBgeterrormsg(env) << ", error code " << error << ")."); + STORM_LOG_THROW(error == 0, storm::exceptions::InvalidStateException, "Unable to optimize Gurobi model (" << GRBgeterrormsg(env) << ", error code " << error << ")."); this->currentModelHasBeenOptimized = true; } @@ -198,21 +198,21 @@ namespace storm { int optimalityStatus = 0; int error = GRBgetintattr(model, GRB_INT_ATTR_STATUS, &optimalityStatus); - LOG_THROW(error == 0, storm::exceptions::InvalidStateException, "Unable to retrieve optimization status of Gurobi model (" << GRBgeterrormsg(env) << ", error code " << error << ")."); + STORM_LOG_THROW(error == 0, storm::exceptions::InvalidStateException, "Unable to retrieve optimization status of Gurobi model (" << GRBgeterrormsg(env) << ", error code " << error << ")."); // By default, Gurobi may tell us only that the model is either infeasible or unbounded. To decide which one // it is, we need to perform an extra step. if (optimalityStatus == GRB_INF_OR_UNBD) { error = GRBsetintparam(GRBgetenv(model), GRB_INT_PAR_DUALREDUCTIONS, 0); - LOG_THROW(error == 0, storm::exceptions::InvalidStateException, "Unable to set Gurobi parameter (" << GRBgeterrormsg(env) << ", error code " << error << ")."); + STORM_LOG_THROW(error == 0, storm::exceptions::InvalidStateException, "Unable to set Gurobi parameter (" << GRBgeterrormsg(env) << ", error code " << error << ")."); this->optimize(); error = GRBgetintattr(model, GRB_INT_ATTR_STATUS, &optimalityStatus); - LOG_THROW(error == 0, storm::exceptions::InvalidStateException, "Unable to retrieve optimization status of Gurobi model (" << GRBgeterrormsg(env) << ", error code " << error << ")."); + STORM_LOG_THROW(error == 0, storm::exceptions::InvalidStateException, "Unable to retrieve optimization status of Gurobi model (" << GRBgeterrormsg(env) << ", error code " << error << ")."); error = GRBsetintparam(GRBgetenv(model), GRB_INT_PAR_DUALREDUCTIONS, 1); - LOG_THROW(error == 0, storm::exceptions::InvalidStateException, "Unable to set Gurobi parameter (" << GRBgeterrormsg(env) << ", error code " << error << ")."); + STORM_LOG_THROW(error == 0, storm::exceptions::InvalidStateException, "Unable to set Gurobi parameter (" << GRBgeterrormsg(env) << ", error code " << error << ")."); } return optimalityStatus == GRB_INFEASIBLE; @@ -226,21 +226,21 @@ namespace storm { int optimalityStatus = 0; int error = GRBgetintattr(model, GRB_INT_ATTR_STATUS, &optimalityStatus); - LOG_THROW(error == 0, storm::exceptions::InvalidStateException, "Unable to retrieve optimization status of Gurobi model (" << GRBgeterrormsg(env) << ", error code " << error << ")."); + STORM_LOG_THROW(error == 0, storm::exceptions::InvalidStateException, "Unable to retrieve optimization status of Gurobi model (" << GRBgeterrormsg(env) << ", error code " << error << ")."); // By default, Gurobi may tell us only that the model is either infeasible or unbounded. To decide which one // it is, we need to perform an extra step. if (optimalityStatus == GRB_INF_OR_UNBD) { error = GRBsetintparam(GRBgetenv(model), GRB_INT_PAR_DUALREDUCTIONS, 0); - LOG_THROW(error == 0, storm::exceptions::InvalidStateException, "Unable to set Gurobi parameter (" << GRBgeterrormsg(env) << ", error code " << error << ")."); + STORM_LOG_THROW(error == 0, storm::exceptions::InvalidStateException, "Unable to set Gurobi parameter (" << GRBgeterrormsg(env) << ", error code " << error << ")."); this->optimize(); error = GRBgetintattr(model, GRB_INT_ATTR_STATUS, &optimalityStatus); - LOG_THROW(error == 0, storm::exceptions::InvalidStateException, "Unable to retrieve optimization status of Gurobi model (" << GRBgeterrormsg(env) << ", error code " << error << ")."); + STORM_LOG_THROW(error == 0, storm::exceptions::InvalidStateException, "Unable to retrieve optimization status of Gurobi model (" << GRBgeterrormsg(env) << ", error code " << error << ")."); error = GRBsetintparam(GRBgetenv(model), GRB_INT_PAR_DUALREDUCTIONS, 1); - LOG_THROW(error == 0, storm::exceptions::InvalidStateException, "Unable to set Gurobi parameter (" << GRBgeterrormsg(env) << ", error code " << error << ")."); + STORM_LOG_THROW(error == 0, storm::exceptions::InvalidStateException, "Unable to set Gurobi parameter (" << GRBgeterrormsg(env) << ", error code " << error << ")."); } return optimalityStatus == GRB_UNBOUNDED; @@ -253,64 +253,64 @@ namespace storm { int optimalityStatus = 0; int error = GRBgetintattr(model, GRB_INT_ATTR_STATUS, &optimalityStatus); - LOG_THROW(error == 0, storm::exceptions::InvalidStateException, "Unable to retrieve optimization status of Gurobi model (" << GRBgeterrormsg(env) << ", error code " << error << ")."); + STORM_LOG_THROW(error == 0, storm::exceptions::InvalidStateException, "Unable to retrieve optimization status of Gurobi model (" << GRBgeterrormsg(env) << ", error code " << error << ")."); return optimalityStatus == GRB_OPTIMAL; } double GurobiLpSolver::getContinuousValue(std::string const& name) const { if (!this->isOptimal()) { - LOG_THROW(!this->isInfeasible(), storm::exceptions::InvalidAccessException, "Unable to get Gurobi solution from infeasible model (" << GRBgeterrormsg(env) << ")."); - LOG_THROW(!this->isUnbounded(), storm::exceptions::InvalidAccessException, "Unable to get Gurobi solution from unbounded model (" << GRBgeterrormsg(env) << ")."); - LOG_THROW(false, storm::exceptions::InvalidAccessException, "Unable to get Gurobi solution from unoptimized model (" << GRBgeterrormsg(env) << ")."); + STORM_LOG_THROW(!this->isInfeasible(), storm::exceptions::InvalidAccessException, "Unable to get Gurobi solution from infeasible model (" << GRBgeterrormsg(env) << ")."); + STORM_LOG_THROW(!this->isUnbounded(), storm::exceptions::InvalidAccessException, "Unable to get Gurobi solution from unbounded model (" << GRBgeterrormsg(env) << ")."); + STORM_LOG_THROW(false, storm::exceptions::InvalidAccessException, "Unable to get Gurobi solution from unoptimized model (" << GRBgeterrormsg(env) << ")."); } auto variableIndexPair = this->variableNameToIndexMap.find(name); - LOG_THROW(variableIndexPair != this->variableNameToIndexMap.end(), storm::exceptions::InvalidAccessException, "Accessing value of unknown variable '" << name << "'."); + STORM_LOG_THROW(variableIndexPair != this->variableNameToIndexMap.end(), storm::exceptions::InvalidAccessException, "Accessing value of unknown variable '" << name << "'."); double value = 0; int error = GRBgetdblattrelement(model, GRB_DBL_ATTR_X, variableIndexPair->second, &value); - LOG_THROW(error == 0, storm::exceptions::InvalidStateException, "Unable to get Gurobi solution (" << GRBgeterrormsg(env) << ", error code " << error << ")."); + STORM_LOG_THROW(error == 0, storm::exceptions::InvalidStateException, "Unable to get Gurobi solution (" << GRBgeterrormsg(env) << ", error code " << error << ")."); return value; } int_fast64_t GurobiLpSolver::getIntegerValue(std::string const& name) const { if (!this->isOptimal()) { - LOG_THROW(!this->isInfeasible(), storm::exceptions::InvalidAccessException, "Unable to get Gurobi solution from infeasible model (" << GRBgeterrormsg(env) << ")."); - LOG_THROW(!this->isUnbounded(), storm::exceptions::InvalidAccessException, "Unable to get Gurobi solution from unbounded model (" << GRBgeterrormsg(env) << ")."); - LOG_THROW(false, storm::exceptions::InvalidAccessException, "Unable to get Gurobi solution from unoptimized model (" << GRBgeterrormsg(env) << ")."); + STORM_LOG_THROW(!this->isInfeasible(), storm::exceptions::InvalidAccessException, "Unable to get Gurobi solution from infeasible model (" << GRBgeterrormsg(env) << ")."); + STORM_LOG_THROW(!this->isUnbounded(), storm::exceptions::InvalidAccessException, "Unable to get Gurobi solution from unbounded model (" << GRBgeterrormsg(env) << ")."); + STORM_LOG_THROW(false, storm::exceptions::InvalidAccessException, "Unable to get Gurobi solution from unoptimized model (" << GRBgeterrormsg(env) << ")."); } auto variableIndexPair = this->variableNameToIndexMap.find(name); - LOG_THROW(variableIndexPair != this->variableNameToIndexMap.end(), storm::exceptions::InvalidAccessException, "Accessing value of unknown variable '" << name << "'."); + STORM_LOG_THROW(variableIndexPair != this->variableNameToIndexMap.end(), storm::exceptions::InvalidAccessException, "Accessing value of unknown variable '" << name << "'."); double value = 0; int error = GRBgetdblattrelement(model, GRB_DBL_ATTR_X, variableIndexPair->second, &value); - LOG_THROW(error == 0, storm::exceptions::InvalidStateException, "Unable to get Gurobi solution (" << GRBgeterrormsg(env) << ", error code " << error << ")."); - LOG_THROW(std::abs(static_cast<int>(value) - value) <= storm::settings::gurobiSettings().getIntegerTolerance(), storm::exceptions::InvalidStateException, "Illegal value for integer variable in Gurobi solution (" << value << ")."); + STORM_LOG_THROW(error == 0, storm::exceptions::InvalidStateException, "Unable to get Gurobi solution (" << GRBgeterrormsg(env) << ", error code " << error << ")."); + STORM_LOG_THROW(std::abs(static_cast<int>(value) - value) <= storm::settings::gurobiSettings().getIntegerTolerance(), storm::exceptions::InvalidStateException, "Illegal value for integer variable in Gurobi solution (" << value << ")."); return static_cast<int_fast64_t>(value); } bool GurobiLpSolver::getBinaryValue(std::string const& name) const { if (!this->isOptimal()) { - LOG_THROW(!this->isInfeasible(), storm::exceptions::InvalidAccessException, "Unable to get Gurobi solution from infeasible model (" << GRBgeterrormsg(env) << ")."); - LOG_THROW(!this->isUnbounded(), storm::exceptions::InvalidAccessException, "Unable to get Gurobi solution from unbounded model (" << GRBgeterrormsg(env) << ")."); - LOG_THROW(false, storm::exceptions::InvalidAccessException, "Unable to get Gurobi solution from unoptimized model (" << GRBgeterrormsg(env) << ")."); + STORM_LOG_THROW(!this->isInfeasible(), storm::exceptions::InvalidAccessException, "Unable to get Gurobi solution from infeasible model (" << GRBgeterrormsg(env) << ")."); + STORM_LOG_THROW(!this->isUnbounded(), storm::exceptions::InvalidAccessException, "Unable to get Gurobi solution from unbounded model (" << GRBgeterrormsg(env) << ")."); + STORM_LOG_THROW(false, storm::exceptions::InvalidAccessException, "Unable to get Gurobi solution from unoptimized model (" << GRBgeterrormsg(env) << ")."); } auto variableIndexPair = this->variableNameToIndexMap.find(name); - LOG_THROW(variableIndexPair != this->variableNameToIndexMap.end(), storm::exceptions::InvalidAccessException, "Accessing value of unknown variable '" << name << "'."); + STORM_LOG_THROW(variableIndexPair != this->variableNameToIndexMap.end(), storm::exceptions::InvalidAccessException, "Accessing value of unknown variable '" << name << "'."); double value = 0; int error = GRBgetdblattrelement(model, GRB_DBL_ATTR_X, variableIndexPair->second, &value); - LOG_THROW(error == 0, storm::exceptions::InvalidStateException, "Unable to get Gurobi solution (" << GRBgeterrormsg(env) << ", error code " << error << ")."); + STORM_LOG_THROW(error == 0, storm::exceptions::InvalidStateException, "Unable to get Gurobi solution (" << GRBgeterrormsg(env) << ", error code " << error << ")."); if (value > 0.5) { - LOG_THROW(std::abs(static_cast<int>(value) - 1) <= storm::settings::gurobiSettings().getIntegerTolerance(), storm::exceptions::InvalidStateException, "Illegal value for integer variable in Gurobi solution (" << value << ")."); + STORM_LOG_THROW(std::abs(static_cast<int>(value) - 1) <= storm::settings::gurobiSettings().getIntegerTolerance(), storm::exceptions::InvalidStateException, "Illegal value for integer variable in Gurobi solution (" << value << ")."); } else { - LOG_THROW(value <= storm::settings::gurobiSettings().getIntegerTolerance(), storm::exceptions::InvalidStateException, "Illegal value for integer variable in Gurobi solution (" << value << ")."); + STORM_LOG_THROW(value <= storm::settings::gurobiSettings().getIntegerTolerance(), storm::exceptions::InvalidStateException, "Illegal value for integer variable in Gurobi solution (" << value << ")."); } return static_cast<bool>(value); @@ -318,14 +318,14 @@ namespace storm { double GurobiLpSolver::getObjectiveValue() const { if (!this->isOptimal()) { - LOG_THROW(!this->isInfeasible(), storm::exceptions::InvalidAccessException, "Unable to get Gurobi solution from infeasible model (" << GRBgeterrormsg(env) << ")."); - LOG_THROW(!this->isUnbounded(), storm::exceptions::InvalidAccessException, "Unable to get Gurobi solution from unbounded model (" << GRBgeterrormsg(env) << ")."); - LOG_THROW(false, storm::exceptions::InvalidAccessException, "Unable to get Gurobi solution from unoptimized model (" << GRBgeterrormsg(env) << ")."); + STORM_LOG_THROW(!this->isInfeasible(), storm::exceptions::InvalidAccessException, "Unable to get Gurobi solution from infeasible model (" << GRBgeterrormsg(env) << ")."); + STORM_LOG_THROW(!this->isUnbounded(), storm::exceptions::InvalidAccessException, "Unable to get Gurobi solution from unbounded model (" << GRBgeterrormsg(env) << ")."); + STORM_LOG_THROW(false, storm::exceptions::InvalidAccessException, "Unable to get Gurobi solution from unoptimized model (" << GRBgeterrormsg(env) << ")."); } double value = 0; int error = GRBgetdblattr(model, GRB_DBL_ATTR_OBJVAL, &value); - LOG_THROW(error == 0, storm::exceptions::InvalidStateException, "Unable to get Gurobi solution (" << GRBgeterrormsg(env) << ", error code " << error << ")."); + STORM_LOG_THROW(error == 0, storm::exceptions::InvalidStateException, "Unable to get Gurobi solution (" << GRBgeterrormsg(env) << ", error code " << error << ")."); return value; } diff --git a/src/solver/Z3SmtSolver.cpp b/src/solver/Z3SmtSolver.cpp index 11c6bd43f..afe6e1508 100644 --- a/src/solver/Z3SmtSolver.cpp +++ b/src/solver/Z3SmtSolver.cpp @@ -15,7 +15,7 @@ namespace storm { z3::expr z3ExprValuation = m_model.eval(z3Expr, true); return this->m_adapter.translateExpression(z3ExprValuation).evaluateAsBool(); #else - LOG_THROW(false, storm::exceptions::NotImplementedException, "StoRM is compiled without Z3 support."); + STORM_LOG_THROW(false, storm::exceptions::NotImplementedException, "StoRM is compiled without Z3 support."); #endif } @@ -25,7 +25,7 @@ namespace storm { z3::expr z3ExprValuation = m_model.eval(z3Expr, true); return this->m_adapter.translateExpression(z3ExprValuation).evaluateAsInt(); #else - LOG_THROW(false, storm::exceptions::NotImplementedException, "StoRM is compiled without Z3 support."); + STORM_LOG_THROW(false, storm::exceptions::NotImplementedException, "StoRM is compiled without Z3 support."); #endif } @@ -47,7 +47,7 @@ namespace storm { #ifdef STORM_HAVE_Z3 this->m_solver.push(); #else - LOG_THROW(false, storm::exceptions::NotImplementedException, "StoRM is compiled without Z3 support."); + STORM_LOG_THROW(false, storm::exceptions::NotImplementedException, "StoRM is compiled without Z3 support."); #endif } @@ -56,7 +56,7 @@ namespace storm { #ifdef STORM_HAVE_Z3 this->m_solver.pop(); #else - LOG_THROW(false, storm::exceptions::NotImplementedException, "StoRM is compiled without Z3 support."); + STORM_LOG_THROW(false, storm::exceptions::NotImplementedException, "StoRM is compiled without Z3 support."); #endif } @@ -65,7 +65,7 @@ namespace storm { #ifdef STORM_HAVE_Z3 this->m_solver.pop((unsigned int)n); #else - LOG_THROW(false, storm::exceptions::NotImplementedException, "StoRM is compiled without Z3 support."); + STORM_LOG_THROW(false, storm::exceptions::NotImplementedException, "StoRM is compiled without Z3 support."); #endif } @@ -74,7 +74,7 @@ namespace storm { #ifdef STORM_HAVE_Z3 this->m_solver.reset(); #else - LOG_THROW(false, storm::exceptions::NotImplementedException, "StoRM is compiled without Z3 support."); + STORM_LOG_THROW(false, storm::exceptions::NotImplementedException, "StoRM is compiled without Z3 support."); #endif } @@ -83,7 +83,7 @@ namespace storm { #ifdef STORM_HAVE_Z3 this->m_solver.add(m_adapter.translateExpression(e, true)); #else - LOG_THROW(false, storm::exceptions::NotImplementedException, "StoRM is compiled without Z3 support."); + STORM_LOG_THROW(false, storm::exceptions::NotImplementedException, "StoRM is compiled without Z3 support."); #endif } @@ -104,7 +104,7 @@ namespace storm { } return this->lastResult; #else - LOG_THROW(false, storm::exceptions::NotImplementedException, "StoRM is compiled without Z3 support."); + STORM_LOG_THROW(false, storm::exceptions::NotImplementedException, "StoRM is compiled without Z3 support."); #endif } @@ -131,7 +131,7 @@ namespace storm { } return this->lastResult; #else - LOG_THROW(false, storm::exceptions::NotImplementedException, "StoRM is compiled without Z3 support."); + STORM_LOG_THROW(false, storm::exceptions::NotImplementedException, "StoRM is compiled without Z3 support."); #endif } @@ -158,7 +158,7 @@ namespace storm { } return this->lastResult; #else - LOG_THROW(false, storm::exceptions::NotImplementedException, "StoRM is compiled without Z3 support."); + STORM_LOG_THROW(false, storm::exceptions::NotImplementedException, "StoRM is compiled without Z3 support."); #endif } @@ -166,11 +166,11 @@ namespace storm { { #ifdef STORM_HAVE_Z3 - LOG_THROW(this->lastResult == SmtSolver::CheckResult::SAT, storm::exceptions::InvalidStateException, "Requested Model but last check result was not SAT."); + STORM_LOG_THROW(this->lastResult == SmtSolver::CheckResult::SAT, storm::exceptions::InvalidStateException, "Requested Model but last check result was not SAT."); return this->z3ModelToStorm(this->m_solver.get_model()); #else - LOG_THROW(false, storm::exceptions::NotImplementedException, "StoRM is compiled without Z3 support."); + STORM_LOG_THROW(false, storm::exceptions::NotImplementedException, "StoRM is compiled without Z3 support."); #endif } @@ -193,7 +193,7 @@ namespace storm { stormModel.addDoubleIdentifier(var_i.name().str(), var_i_interp.evaluateAsDouble()); break; default: - LOG_THROW(false, storm::exceptions::ExpressionEvaluationException, "Variable interpretation in model is not of type bool, int or double.") + STORM_LOG_THROW(false, storm::exceptions::ExpressionEvaluationException, "Variable interpretation in model is not of type bool, int or double.") break; } @@ -214,7 +214,7 @@ namespace storm { return valuations; #else - LOG_THROW(false, storm::exceptions::NotImplementedException, "StoRM is compiled without Z3 support."); + STORM_LOG_THROW(false, storm::exceptions::NotImplementedException, "StoRM is compiled without Z3 support."); #endif } @@ -263,7 +263,7 @@ namespace storm { return numModels; #else - LOG_THROW(false, storm::exceptions::NotImplementedException, "StoRM is compiled without Z3 support."); + STORM_LOG_THROW(false, storm::exceptions::NotImplementedException, "StoRM is compiled without Z3 support."); #endif } @@ -304,7 +304,7 @@ namespace storm { return numModels; #else - LOG_THROW(false, storm::exceptions::NotImplementedException, "StoRM is compiled without Z3 support."); + STORM_LOG_THROW(false, storm::exceptions::NotImplementedException, "StoRM is compiled without Z3 support."); #endif } @@ -327,7 +327,7 @@ namespace storm { return unsatAssumptions; #else - LOG_THROW(false, storm::exceptions::NotImplementedException, "StoRM is compiled without Z3 support."); + STORM_LOG_THROW(false, storm::exceptions::NotImplementedException, "StoRM is compiled without Z3 support."); #endif } } diff --git a/src/storage/SparseMatrix.cpp b/src/storage/SparseMatrix.cpp index e52bd87ef..8373d286a 100644 --- a/src/storage/SparseMatrix.cpp +++ b/src/storage/SparseMatrix.cpp @@ -9,7 +9,7 @@ #include "src/storage/SparseMatrix.h" #include "src/exceptions/InvalidStateException.h" -#include "src/exceptions/ExceptionMacros.h" +#include "src/utility/macros.h" #include "log4cplus/logger.h" #include "log4cplus/loggingmacros.h" @@ -110,16 +110,16 @@ namespace storm { // In case we did not expect this value, we throw an exception. if (forceInitialDimensions) { - LOG_THROW(!initialRowCountSet || lastRow < initialRowCount, storm::exceptions::OutOfRangeException, "Cannot insert value at illegal row " << lastRow << "."); - LOG_THROW(!initialColumnCountSet || lastColumn < initialColumnCount, storm::exceptions::OutOfRangeException, "Cannot insert value at illegal column " << lastColumn << "."); - LOG_THROW(!initialEntryCountSet || currentEntryCount <= initialEntryCount, storm::exceptions::OutOfRangeException, "Too many entries in matrix, expected only " << initialEntryCount << "."); + STORM_LOG_THROW(!initialRowCountSet || lastRow < initialRowCount, storm::exceptions::OutOfRangeException, "Cannot insert value at illegal row " << lastRow << "."); + STORM_LOG_THROW(!initialColumnCountSet || lastColumn < initialColumnCount, storm::exceptions::OutOfRangeException, "Cannot insert value at illegal column " << lastColumn << "."); + STORM_LOG_THROW(!initialEntryCountSet || currentEntryCount <= initialEntryCount, storm::exceptions::OutOfRangeException, "Too many entries in matrix, expected only " << initialEntryCount << "."); } } template<typename ValueType> void SparseMatrixBuilder<ValueType>::newRowGroup(index_type startingRow) { - LOG_THROW(hasCustomRowGrouping, storm::exceptions::InvalidStateException, "Matrix was not created to have a custom row grouping."); - LOG_THROW(rowGroupIndices.empty() || startingRow >= rowGroupIndices.back(), storm::exceptions::InvalidStateException, "Illegal row group with negative size."); + STORM_LOG_THROW(hasCustomRowGrouping, storm::exceptions::InvalidStateException, "Matrix was not created to have a custom row grouping."); + STORM_LOG_THROW(rowGroupIndices.empty() || startingRow >= rowGroupIndices.back(), storm::exceptions::InvalidStateException, "Illegal row group with negative size."); rowGroupIndices.push_back(startingRow); ++currentRowGroup; } @@ -128,7 +128,7 @@ namespace storm { SparseMatrix<ValueType> SparseMatrixBuilder<ValueType>::build(index_type overriddenRowCount, index_type overriddenColumnCount, index_type overriddenRowGroupCount) { uint_fast64_t rowCount = lastRow + 1; if (initialRowCountSet && forceInitialDimensions) { - LOG_THROW(rowCount <= initialRowCount, storm::exceptions::InvalidStateException, "Expected not more than " << initialRowCount << " rows, but got " << rowCount << "."); + STORM_LOG_THROW(rowCount <= initialRowCount, storm::exceptions::InvalidStateException, "Expected not more than " << initialRowCount << " rows, but got " << rowCount << "."); rowCount = std::max(rowCount, initialRowCount); } rowCount = std::max(rowCount, overriddenRowCount); @@ -145,14 +145,14 @@ namespace storm { uint_fast64_t columnCount = highestColumn + 1; if (initialColumnCountSet && forceInitialDimensions) { - LOG_THROW(columnCount <= initialColumnCount, storm::exceptions::InvalidStateException, "Expected not more than " << initialColumnCount << " columns, but got " << columnCount << "."); + STORM_LOG_THROW(columnCount <= initialColumnCount, storm::exceptions::InvalidStateException, "Expected not more than " << initialColumnCount << " columns, but got " << columnCount << "."); columnCount = std::max(columnCount, initialColumnCount); } columnCount = std::max(columnCount, overriddenColumnCount); uint_fast64_t entryCount = currentEntryCount; if (initialEntryCountSet && forceInitialDimensions) { - LOG_THROW(entryCount == initialEntryCount, storm::exceptions::InvalidStateException, "Expected " << initialEntryCount << " entries, but got " << entryCount << "."); + STORM_LOG_THROW(entryCount == initialEntryCount, storm::exceptions::InvalidStateException, "Expected " << initialEntryCount << " entries, but got " << entryCount << "."); } // Check whether row groups are missing some entries. @@ -163,7 +163,7 @@ namespace storm { } else { uint_fast64_t rowGroupCount = currentRowGroup; if (initialRowGroupCountSet && forceInitialDimensions) { - LOG_THROW(rowGroupCount <= initialRowGroupCount, storm::exceptions::InvalidStateException, "Expected not more than " << initialRowGroupCount << " row groups, but got " << rowGroupCount << "."); + STORM_LOG_THROW(rowGroupCount <= initialRowGroupCount, storm::exceptions::InvalidStateException, "Expected not more than " << initialRowGroupCount << " row groups, but got " << rowGroupCount << "."); rowGroupCount = std::max(rowGroupCount, initialRowGroupCount); } rowGroupCount = std::max(rowGroupCount, overriddenRowGroupCount); diff --git a/src/storage/dd/CuddDdForwardIterator.cpp b/src/storage/dd/CuddDdForwardIterator.cpp index 4a990746e..dd1f58189 100644 --- a/src/storage/dd/CuddDdForwardIterator.cpp +++ b/src/storage/dd/CuddDdForwardIterator.cpp @@ -1,7 +1,7 @@ #include "src/storage/dd/CuddDdForwardIterator.h" #include "src/storage/dd/CuddDdManager.h" #include "src/storage/dd/DdMetaVariable.h" -#include "src/exceptions/ExceptionMacros.h" +#include "src/utility/macros.h" namespace storm { namespace dd { @@ -63,7 +63,7 @@ namespace storm { } DdForwardIterator<DdType::CUDD>& DdForwardIterator<DdType::CUDD>::operator++() { - LOG_ASSERT(!this->isAtEnd, "Illegally incrementing iterator that is already at its end."); + STORM_LOG_ASSERT(!this->isAtEnd, "Illegally incrementing iterator that is already at its end."); // If there were no (relevant) don't cares or we have enumerated all combination, we need to eliminate the // found solutions and get the next "first" cube. diff --git a/src/storage/dd/CuddDdManager.cpp b/src/storage/dd/CuddDdManager.cpp index cd19fa037..21a1d3d7f 100644 --- a/src/storage/dd/CuddDdManager.cpp +++ b/src/storage/dd/CuddDdManager.cpp @@ -3,7 +3,7 @@ #include <algorithm> #include "src/storage/dd/CuddDdManager.h" -#include "src/exceptions/ExceptionMacros.h" +#include "src/utility/macros.h" #include "src/exceptions/InvalidArgumentException.h" #include "src/settings/SettingsManager.h" @@ -52,7 +52,7 @@ namespace storm { Dd<DdType::CUDD> DdManager<DdType::CUDD>::getEncoding(std::string const& metaVariableName, int_fast64_t value) { DdMetaVariable<DdType::CUDD> const& metaVariable = this->getMetaVariable(metaVariableName); - LOG_THROW(value >= metaVariable.getLow() && value <= metaVariable.getHigh(), storm::exceptions::InvalidArgumentException, "Illegal value " << value << " for meta variable '" << metaVariableName << "'."); + STORM_LOG_THROW(value >= metaVariable.getLow() && value <= metaVariable.getHigh(), storm::exceptions::InvalidArgumentException, "Illegal value " << value << " for meta variable '" << metaVariableName << "'."); // Now compute the encoding relative to the low value of the meta variable. value -= metaVariable.getLow(); @@ -100,13 +100,13 @@ namespace storm { void DdManager<DdType::CUDD>::addMetaVariable(std::string const& name, int_fast64_t low, int_fast64_t high) { // Check whether the variable name is legal. - LOG_THROW(name != "" && name.back() != '\'', storm::exceptions::InvalidArgumentException, "Illegal name of meta variable: '" << name << "'."); + STORM_LOG_THROW(name != "" && name.back() != '\'', storm::exceptions::InvalidArgumentException, "Illegal name of meta variable: '" << name << "'."); // Check whether a meta variable already exists. - LOG_THROW(!this->hasMetaVariable(name), storm::exceptions::InvalidArgumentException, "A meta variable '" << name << "' already exists."); + STORM_LOG_THROW(!this->hasMetaVariable(name), storm::exceptions::InvalidArgumentException, "A meta variable '" << name << "' already exists."); // Check that the range is legal. - LOG_THROW(high != low, storm::exceptions::InvalidArgumentException, "Range of meta variable must be at least 2 elements."); + STORM_LOG_THROW(high != low, storm::exceptions::InvalidArgumentException, "Range of meta variable must be at least 2 elements."); std::size_t numberOfBits = static_cast<std::size_t>(std::ceil(std::log2(high - low + 1))); @@ -128,10 +128,10 @@ namespace storm { void DdManager<DdType::CUDD>::addMetaVariable(std::string const& name) { // Check whether the variable name is legal. - LOG_THROW(name != "" && name.back() != '\'', storm::exceptions::InvalidArgumentException, "Illegal name of meta variable: '" << name << "'."); + STORM_LOG_THROW(name != "" && name.back() != '\'', storm::exceptions::InvalidArgumentException, "Illegal name of meta variable: '" << name << "'."); // Check whether a meta variable already exists. - LOG_THROW(!this->hasMetaVariable(name), storm::exceptions::InvalidArgumentException, "A meta variable '" << name << "' already exists."); + STORM_LOG_THROW(!this->hasMetaVariable(name), storm::exceptions::InvalidArgumentException, "A meta variable '" << name << "' already exists."); std::vector<Dd<DdType::CUDD>> variables; std::vector<Dd<DdType::CUDD>> variablesPrime; @@ -149,7 +149,7 @@ namespace storm { auto const& nameVariablePair = metaVariableMap.find(metaVariableName); // Check whether the meta variable exists. - LOG_THROW(nameVariablePair != metaVariableMap.end(), storm::exceptions::InvalidArgumentException, "Unknown meta variable name '" << metaVariableName << "'."); + STORM_LOG_THROW(nameVariablePair != metaVariableMap.end(), storm::exceptions::InvalidArgumentException, "Unknown meta variable name '" << metaVariableName << "'."); return nameVariablePair->second; } diff --git a/src/storage/expressions/BaseExpression.cpp b/src/storage/expressions/BaseExpression.cpp index 38a0604e2..753b4a129 100644 --- a/src/storage/expressions/BaseExpression.cpp +++ b/src/storage/expressions/BaseExpression.cpp @@ -1,5 +1,5 @@ #include "src/storage/expressions/BaseExpression.h" -#include "src/exceptions/ExceptionMacros.h" +#include "src/utility/macros.h" #include "src/exceptions/InvalidTypeException.h" #include "src/exceptions/InvalidAccessException.h" @@ -26,15 +26,15 @@ namespace storm { } int_fast64_t BaseExpression::evaluateAsInt(Valuation const* valuation) const { - LOG_THROW(false, storm::exceptions::InvalidTypeException, "Unable to evaluate expression as integer."); + STORM_LOG_THROW(false, storm::exceptions::InvalidTypeException, "Unable to evaluate expression as integer."); } bool BaseExpression::evaluateAsBool(Valuation const* valuation) const { - LOG_THROW(false, storm::exceptions::InvalidTypeException, "Unable to evaluate expression as boolean."); + STORM_LOG_THROW(false, storm::exceptions::InvalidTypeException, "Unable to evaluate expression as boolean."); } double BaseExpression::evaluateAsDouble(Valuation const* valuation) const { - LOG_THROW(false, storm::exceptions::InvalidTypeException, "Unable to evaluate expression as double."); + STORM_LOG_THROW(false, storm::exceptions::InvalidTypeException, "Unable to evaluate expression as double."); } uint_fast64_t BaseExpression::getArity() const { @@ -42,15 +42,15 @@ namespace storm { } std::shared_ptr<BaseExpression const> BaseExpression::getOperand(uint_fast64_t operandIndex) const { - LOG_THROW(false, storm::exceptions::InvalidAccessException, "Unable to access operand " << operandIndex << " in expression of arity 0."); + STORM_LOG_THROW(false, storm::exceptions::InvalidAccessException, "Unable to access operand " << operandIndex << " in expression of arity 0."); } std::string const& BaseExpression::getIdentifier() const { - LOG_THROW(false, storm::exceptions::InvalidAccessException, "Unable to access identifier of non-constant, non-variable expression."); + STORM_LOG_THROW(false, storm::exceptions::InvalidAccessException, "Unable to access identifier of non-constant, non-variable expression."); } OperatorType BaseExpression::getOperator() const { - LOG_THROW(false, storm::exceptions::InvalidAccessException, "Unable to access operator of non-function application expression."); + STORM_LOG_THROW(false, storm::exceptions::InvalidAccessException, "Unable to access operator of non-function application expression."); } bool BaseExpression::containsVariables() const { diff --git a/src/storage/expressions/BinaryBooleanFunctionExpression.cpp b/src/storage/expressions/BinaryBooleanFunctionExpression.cpp index 061c231af..9a9d81fe5 100644 --- a/src/storage/expressions/BinaryBooleanFunctionExpression.cpp +++ b/src/storage/expressions/BinaryBooleanFunctionExpression.cpp @@ -1,6 +1,6 @@ #include "src/storage/expressions/BinaryBooleanFunctionExpression.h" #include "src/storage/expressions/BooleanLiteralExpression.h" -#include "src/exceptions/ExceptionMacros.h" +#include "src/utility/macros.h" #include "src/exceptions/InvalidTypeException.h" namespace storm { @@ -24,7 +24,7 @@ namespace storm { } bool BinaryBooleanFunctionExpression::evaluateAsBool(Valuation const* valuation) const { - LOG_THROW(this->hasBooleanReturnType(), storm::exceptions::InvalidTypeException, "Unable to evaluate expression as boolean."); + STORM_LOG_THROW(this->hasBooleanReturnType(), storm::exceptions::InvalidTypeException, "Unable to evaluate expression as boolean."); bool firstOperandEvaluation = this->getFirstOperand()->evaluateAsBool(valuation); bool secondOperandEvaluation = this->getSecondOperand()->evaluateAsBool(valuation); diff --git a/src/storage/expressions/BinaryExpression.cpp b/src/storage/expressions/BinaryExpression.cpp index bdb7fb59f..78fbdaf73 100644 --- a/src/storage/expressions/BinaryExpression.cpp +++ b/src/storage/expressions/BinaryExpression.cpp @@ -1,6 +1,6 @@ #include "src/storage/expressions/BinaryExpression.h" -#include "src/exceptions/ExceptionMacros.h" +#include "src/utility/macros.h" #include "src/exceptions/InvalidAccessException.h" namespace storm { @@ -44,7 +44,7 @@ namespace storm { } std::shared_ptr<BaseExpression const> BinaryExpression::getOperand(uint_fast64_t operandIndex) const { - LOG_THROW(operandIndex < 2, storm::exceptions::InvalidAccessException, "Unable to access operand " << operandIndex << " in expression of arity 2."); + STORM_LOG_THROW(operandIndex < 2, storm::exceptions::InvalidAccessException, "Unable to access operand " << operandIndex << " in expression of arity 2."); if (operandIndex == 0) { return this->getFirstOperand(); } else { diff --git a/src/storage/expressions/BinaryNumericalFunctionExpression.cpp b/src/storage/expressions/BinaryNumericalFunctionExpression.cpp index 7db4fa0cf..18b1d3a71 100644 --- a/src/storage/expressions/BinaryNumericalFunctionExpression.cpp +++ b/src/storage/expressions/BinaryNumericalFunctionExpression.cpp @@ -2,7 +2,7 @@ #include <cmath> #include "src/storage/expressions/BinaryNumericalFunctionExpression.h" -#include "src/exceptions/ExceptionMacros.h" +#include "src/utility/macros.h" #include "src/exceptions/InvalidTypeException.h" namespace storm { @@ -28,7 +28,7 @@ namespace storm { } int_fast64_t BinaryNumericalFunctionExpression::evaluateAsInt(Valuation const* valuation) const { - LOG_THROW(this->hasIntegralReturnType(), storm::exceptions::InvalidTypeException, "Unable to evaluate expression as integer."); + STORM_LOG_THROW(this->hasIntegralReturnType(), storm::exceptions::InvalidTypeException, "Unable to evaluate expression as integer."); int_fast64_t firstOperandEvaluation = this->getFirstOperand()->evaluateAsInt(valuation); int_fast64_t secondOperandEvaluation = this->getSecondOperand()->evaluateAsInt(valuation); @@ -44,7 +44,7 @@ namespace storm { } double BinaryNumericalFunctionExpression::evaluateAsDouble(Valuation const* valuation) const { - LOG_THROW(this->hasNumericalReturnType(), storm::exceptions::InvalidTypeException, "Unable to evaluate expression as double."); + STORM_LOG_THROW(this->hasNumericalReturnType(), storm::exceptions::InvalidTypeException, "Unable to evaluate expression as double."); double firstOperandEvaluation = this->getFirstOperand()->evaluateAsDouble(valuation); double secondOperandEvaluation = this->getSecondOperand()->evaluateAsDouble(valuation); diff --git a/src/storage/expressions/BinaryRelationExpression.cpp b/src/storage/expressions/BinaryRelationExpression.cpp index f31f97fce..4c0a2e1ae 100644 --- a/src/storage/expressions/BinaryRelationExpression.cpp +++ b/src/storage/expressions/BinaryRelationExpression.cpp @@ -1,6 +1,6 @@ #include "src/storage/expressions/BinaryRelationExpression.h" -#include "src/exceptions/ExceptionMacros.h" +#include "src/utility/macros.h" #include "src/exceptions/InvalidTypeException.h" namespace storm { @@ -21,7 +21,7 @@ namespace storm { } bool BinaryRelationExpression::evaluateAsBool(Valuation const* valuation) const { - LOG_THROW(this->hasBooleanReturnType(), storm::exceptions::InvalidTypeException, "Unable to evaluate expression as boolean."); + STORM_LOG_THROW(this->hasBooleanReturnType(), storm::exceptions::InvalidTypeException, "Unable to evaluate expression as boolean."); double firstOperandEvaluated = this->getFirstOperand()->evaluateAsDouble(valuation); double secondOperandEvaluated = this->getSecondOperand()->evaluateAsDouble(valuation); diff --git a/src/storage/expressions/Expression.cpp b/src/storage/expressions/Expression.cpp index c61e93b9d..ad74066b3 100644 --- a/src/storage/expressions/Expression.cpp +++ b/src/storage/expressions/Expression.cpp @@ -8,7 +8,7 @@ #include "src/storage/expressions/LinearityCheckVisitor.h" #include "src/storage/expressions/Expressions.h" #include "src/exceptions/InvalidTypeException.h" -#include "src/exceptions/ExceptionMacros.h" +#include "src/utility/macros.h" namespace storm { namespace expressions { @@ -182,57 +182,57 @@ namespace storm { } Expression Expression::operator+(Expression const& other) const { - LOG_THROW(this->hasNumericalReturnType() && other.hasNumericalReturnType(), storm::exceptions::InvalidTypeException, "Operator '+' requires numerical operands."); + STORM_LOG_THROW(this->hasNumericalReturnType() && other.hasNumericalReturnType(), storm::exceptions::InvalidTypeException, "Operator '+' requires numerical operands."); return Expression(std::shared_ptr<BaseExpression>(new BinaryNumericalFunctionExpression(this->getReturnType() == ExpressionReturnType::Int && other.getReturnType() == ExpressionReturnType::Int ? ExpressionReturnType::Int : ExpressionReturnType::Double, this->getBaseExpressionPointer(), other.getBaseExpressionPointer(), BinaryNumericalFunctionExpression::OperatorType::Plus))); } Expression Expression::operator-(Expression const& other) const { - LOG_THROW(this->hasNumericalReturnType() && other.hasNumericalReturnType(), storm::exceptions::InvalidTypeException, "Operator '-' requires numerical operands."); + STORM_LOG_THROW(this->hasNumericalReturnType() && other.hasNumericalReturnType(), storm::exceptions::InvalidTypeException, "Operator '-' requires numerical operands."); return Expression(std::shared_ptr<BaseExpression>(new BinaryNumericalFunctionExpression(this->getReturnType() == ExpressionReturnType::Int && other.getReturnType() == ExpressionReturnType::Int ? ExpressionReturnType::Int : ExpressionReturnType::Double, this->getBaseExpressionPointer(), other.getBaseExpressionPointer(), BinaryNumericalFunctionExpression::OperatorType::Minus))); } Expression Expression::operator-() const { - LOG_THROW(this->hasNumericalReturnType(), storm::exceptions::InvalidTypeException, "Operator '-' requires numerical operand."); + STORM_LOG_THROW(this->hasNumericalReturnType(), storm::exceptions::InvalidTypeException, "Operator '-' requires numerical operand."); return Expression(std::shared_ptr<BaseExpression>(new UnaryNumericalFunctionExpression(this->getReturnType(), this->getBaseExpressionPointer(), UnaryNumericalFunctionExpression::OperatorType::Minus))); } Expression Expression::operator*(Expression const& other) const { - LOG_THROW(this->hasNumericalReturnType() && other.hasNumericalReturnType(), storm::exceptions::InvalidTypeException, "Operator '*' requires numerical operands."); + STORM_LOG_THROW(this->hasNumericalReturnType() && other.hasNumericalReturnType(), storm::exceptions::InvalidTypeException, "Operator '*' requires numerical operands."); return Expression(std::shared_ptr<BaseExpression>(new BinaryNumericalFunctionExpression(this->getReturnType() == ExpressionReturnType::Int && other.getReturnType() == ExpressionReturnType::Int ? ExpressionReturnType::Int : ExpressionReturnType::Double, this->getBaseExpressionPointer(), other.getBaseExpressionPointer(), BinaryNumericalFunctionExpression::OperatorType::Times))); } Expression Expression::operator/(Expression const& other) const { - LOG_THROW(this->hasNumericalReturnType() && other.hasNumericalReturnType(), storm::exceptions::InvalidTypeException, "Operator '/' requires numerical operands."); + STORM_LOG_THROW(this->hasNumericalReturnType() && other.hasNumericalReturnType(), storm::exceptions::InvalidTypeException, "Operator '/' requires numerical operands."); return Expression(std::shared_ptr<BaseExpression>(new BinaryNumericalFunctionExpression(this->getReturnType() == ExpressionReturnType::Int && other.getReturnType() == ExpressionReturnType::Int ? ExpressionReturnType::Int : ExpressionReturnType::Double, this->getBaseExpressionPointer(), other.getBaseExpressionPointer(), BinaryNumericalFunctionExpression::OperatorType::Divide))); } Expression Expression::operator^(Expression const& other) const { - LOG_THROW(this->hasNumericalReturnType() && other.hasNumericalReturnType(), storm::exceptions::InvalidTypeException, "Operator '^' requires numerical operands."); + STORM_LOG_THROW(this->hasNumericalReturnType() && other.hasNumericalReturnType(), storm::exceptions::InvalidTypeException, "Operator '^' requires numerical operands."); return Expression(std::shared_ptr<BaseExpression>(new BinaryNumericalFunctionExpression(this->getReturnType() == ExpressionReturnType::Int && other.getReturnType() == ExpressionReturnType::Int ? ExpressionReturnType::Int : ExpressionReturnType::Double, this->getBaseExpressionPointer(), other.getBaseExpressionPointer(), BinaryNumericalFunctionExpression::OperatorType::Power))); } Expression Expression::operator&&(Expression const& other) const { - LOG_THROW(this->hasBooleanReturnType() && other.hasBooleanReturnType(), storm::exceptions::InvalidTypeException, "Operator '&&' requires boolean operands."); + STORM_LOG_THROW(this->hasBooleanReturnType() && other.hasBooleanReturnType(), storm::exceptions::InvalidTypeException, "Operator '&&' requires boolean operands."); return Expression(std::shared_ptr<BaseExpression>(new BinaryBooleanFunctionExpression(ExpressionReturnType::Bool, this->getBaseExpressionPointer(), other.getBaseExpressionPointer(), BinaryBooleanFunctionExpression::OperatorType::And))); } Expression Expression::operator||(Expression const& other) const { - LOG_THROW(this->hasBooleanReturnType() && other.hasBooleanReturnType(), storm::exceptions::InvalidTypeException, "Operator '||' requires numerical operands."); + STORM_LOG_THROW(this->hasBooleanReturnType() && other.hasBooleanReturnType(), storm::exceptions::InvalidTypeException, "Operator '||' requires numerical operands."); return Expression(std::shared_ptr<BaseExpression>(new BinaryBooleanFunctionExpression(ExpressionReturnType::Bool, this->getBaseExpressionPointer(), other.getBaseExpressionPointer(), BinaryBooleanFunctionExpression::OperatorType::Or))); } Expression Expression::operator!() const { - LOG_THROW(this->hasBooleanReturnType(), storm::exceptions::InvalidTypeException, "Operator '!' requires boolean operand."); + STORM_LOG_THROW(this->hasBooleanReturnType(), storm::exceptions::InvalidTypeException, "Operator '!' requires boolean operand."); return Expression(std::shared_ptr<BaseExpression>(new UnaryBooleanFunctionExpression(ExpressionReturnType::Bool, this->getBaseExpressionPointer(), UnaryBooleanFunctionExpression::OperatorType::Not))); } Expression Expression::operator==(Expression const& other) const { - LOG_THROW(this->hasNumericalReturnType() && other.hasNumericalReturnType(), storm::exceptions::InvalidTypeException, "Operator '==' requires numerical operands."); + STORM_LOG_THROW(this->hasNumericalReturnType() && other.hasNumericalReturnType(), storm::exceptions::InvalidTypeException, "Operator '==' requires numerical operands."); return Expression(std::shared_ptr<BaseExpression>(new BinaryRelationExpression(ExpressionReturnType::Bool, this->getBaseExpressionPointer(), other.getBaseExpressionPointer(), BinaryRelationExpression::RelationType::Equal))); } Expression Expression::operator!=(Expression const& other) const { - LOG_THROW((this->hasNumericalReturnType() && other.hasNumericalReturnType()) || (this->hasBooleanReturnType() && other.hasBooleanReturnType()), storm::exceptions::InvalidTypeException, "Operator '!=' requires operands of equal type."); + STORM_LOG_THROW((this->hasNumericalReturnType() && other.hasNumericalReturnType()) || (this->hasBooleanReturnType() && other.hasBooleanReturnType()), storm::exceptions::InvalidTypeException, "Operator '!=' requires operands of equal type."); if (this->hasNumericalReturnType() && other.hasNumericalReturnType()) { return Expression(std::shared_ptr<BaseExpression>(new BinaryRelationExpression(ExpressionReturnType::Bool, this->getBaseExpressionPointer(), other.getBaseExpressionPointer(), BinaryRelationExpression::RelationType::NotEqual))); } else { @@ -241,58 +241,58 @@ namespace storm { } Expression Expression::operator>(Expression const& other) const { - LOG_THROW(this->hasNumericalReturnType() && other.hasNumericalReturnType(), storm::exceptions::InvalidTypeException, "Operator '>' requires numerical operands."); + STORM_LOG_THROW(this->hasNumericalReturnType() && other.hasNumericalReturnType(), storm::exceptions::InvalidTypeException, "Operator '>' requires numerical operands."); return Expression(std::shared_ptr<BaseExpression>(new BinaryRelationExpression(ExpressionReturnType::Bool, this->getBaseExpressionPointer(), other.getBaseExpressionPointer(), BinaryRelationExpression::RelationType::Greater))); } Expression Expression::operator>=(Expression const& other) const { - LOG_THROW(this->hasNumericalReturnType() && other.hasNumericalReturnType(), storm::exceptions::InvalidTypeException, "Operator '>=' requires numerical operands."); + STORM_LOG_THROW(this->hasNumericalReturnType() && other.hasNumericalReturnType(), storm::exceptions::InvalidTypeException, "Operator '>=' requires numerical operands."); return Expression(std::shared_ptr<BaseExpression>(new BinaryRelationExpression(ExpressionReturnType::Bool, this->getBaseExpressionPointer(), other.getBaseExpressionPointer(), BinaryRelationExpression::RelationType::GreaterOrEqual))); } Expression Expression::operator<(Expression const& other) const { - LOG_THROW(this->hasNumericalReturnType() && other.hasNumericalReturnType(), storm::exceptions::InvalidTypeException, "Operator '<' requires numerical operands."); + STORM_LOG_THROW(this->hasNumericalReturnType() && other.hasNumericalReturnType(), storm::exceptions::InvalidTypeException, "Operator '<' requires numerical operands."); return Expression(std::shared_ptr<BaseExpression>(new BinaryRelationExpression(ExpressionReturnType::Bool, this->getBaseExpressionPointer(), other.getBaseExpressionPointer(), BinaryRelationExpression::RelationType::Less))); } Expression Expression::operator<=(Expression const& other) const { - LOG_THROW(this->hasNumericalReturnType() && other.hasNumericalReturnType(), storm::exceptions::InvalidTypeException, "Operator '<=' requires numerical operands."); + STORM_LOG_THROW(this->hasNumericalReturnType() && other.hasNumericalReturnType(), storm::exceptions::InvalidTypeException, "Operator '<=' requires numerical operands."); return Expression(std::shared_ptr<BaseExpression>(new BinaryRelationExpression(ExpressionReturnType::Bool, this->getBaseExpressionPointer(), other.getBaseExpressionPointer(), BinaryRelationExpression::RelationType::LessOrEqual))); } Expression Expression::minimum(Expression const& lhs, Expression const& rhs) { - LOG_THROW(lhs.hasNumericalReturnType() && rhs.hasNumericalReturnType(), storm::exceptions::InvalidTypeException, "Operator 'min' requires numerical operands."); + STORM_LOG_THROW(lhs.hasNumericalReturnType() && rhs.hasNumericalReturnType(), storm::exceptions::InvalidTypeException, "Operator 'min' requires numerical operands."); return Expression(std::shared_ptr<BaseExpression>(new BinaryNumericalFunctionExpression(lhs.getReturnType() == ExpressionReturnType::Int && rhs.getReturnType() == ExpressionReturnType::Int ? ExpressionReturnType::Int : ExpressionReturnType::Double, lhs.getBaseExpressionPointer(), rhs.getBaseExpressionPointer(), BinaryNumericalFunctionExpression::OperatorType::Min))); } Expression Expression::maximum(Expression const& lhs, Expression const& rhs) { - LOG_THROW(lhs.hasNumericalReturnType() && rhs.hasNumericalReturnType(), storm::exceptions::InvalidTypeException, "Operator 'max' requires numerical operands."); + STORM_LOG_THROW(lhs.hasNumericalReturnType() && rhs.hasNumericalReturnType(), storm::exceptions::InvalidTypeException, "Operator 'max' requires numerical operands."); return Expression(std::shared_ptr<BaseExpression>(new BinaryNumericalFunctionExpression(lhs.getReturnType() == ExpressionReturnType::Int && rhs.getReturnType() == ExpressionReturnType::Int ? ExpressionReturnType::Int : ExpressionReturnType::Double, lhs.getBaseExpressionPointer(), rhs.getBaseExpressionPointer(), BinaryNumericalFunctionExpression::OperatorType::Max))); } Expression Expression::ite(Expression const& thenExpression, Expression const& elseExpression) { - LOG_THROW(this->hasBooleanReturnType(), storm::exceptions::InvalidTypeException, "Condition of if-then-else operator must be of boolean type."); - LOG_THROW(thenExpression.hasBooleanReturnType() && elseExpression.hasBooleanReturnType() || thenExpression.hasNumericalReturnType() && elseExpression.hasNumericalReturnType(), storm::exceptions::InvalidTypeException, "'then' and 'else' expression of if-then-else operator must have equal return type."); + STORM_LOG_THROW(this->hasBooleanReturnType(), storm::exceptions::InvalidTypeException, "Condition of if-then-else operator must be of boolean type."); + STORM_LOG_THROW(thenExpression.hasBooleanReturnType() && elseExpression.hasBooleanReturnType() || thenExpression.hasNumericalReturnType() && elseExpression.hasNumericalReturnType(), storm::exceptions::InvalidTypeException, "'then' and 'else' expression of if-then-else operator must have equal return type."); return Expression(std::shared_ptr<BaseExpression>(new IfThenElseExpression(thenExpression.hasBooleanReturnType() && elseExpression.hasBooleanReturnType() ? ExpressionReturnType::Bool : (thenExpression.getReturnType() == ExpressionReturnType::Int && elseExpression.getReturnType() == ExpressionReturnType::Int ? ExpressionReturnType::Int : ExpressionReturnType::Double), this->getBaseExpressionPointer(), thenExpression.getBaseExpressionPointer(), elseExpression.getBaseExpressionPointer()))); } Expression Expression::implies(Expression const& other) const { - LOG_THROW(this->hasBooleanReturnType() && other.hasBooleanReturnType(), storm::exceptions::InvalidTypeException, "Operator '&&' requires boolean operands."); + STORM_LOG_THROW(this->hasBooleanReturnType() && other.hasBooleanReturnType(), storm::exceptions::InvalidTypeException, "Operator '&&' requires boolean operands."); return Expression(std::shared_ptr<BaseExpression>(new BinaryBooleanFunctionExpression(ExpressionReturnType::Bool, this->getBaseExpressionPointer(), other.getBaseExpressionPointer(), BinaryBooleanFunctionExpression::OperatorType::Implies))); } Expression Expression::iff(Expression const& other) const { - LOG_THROW(this->hasBooleanReturnType() && other.hasBooleanReturnType(), storm::exceptions::InvalidTypeException, "Operator '&&' requires boolean operands."); + STORM_LOG_THROW(this->hasBooleanReturnType() && other.hasBooleanReturnType(), storm::exceptions::InvalidTypeException, "Operator '&&' requires boolean operands."); return Expression(std::shared_ptr<BaseExpression>(new BinaryBooleanFunctionExpression(ExpressionReturnType::Bool, this->getBaseExpressionPointer(), other.getBaseExpressionPointer(), BinaryBooleanFunctionExpression::OperatorType::Iff))); } Expression Expression::floor() const { - LOG_THROW(this->hasNumericalReturnType(), storm::exceptions::InvalidTypeException, "Operator 'floor' requires numerical operand."); + STORM_LOG_THROW(this->hasNumericalReturnType(), storm::exceptions::InvalidTypeException, "Operator 'floor' requires numerical operand."); return Expression(std::shared_ptr<BaseExpression>(new UnaryNumericalFunctionExpression(ExpressionReturnType::Int, this->getBaseExpressionPointer(), UnaryNumericalFunctionExpression::OperatorType::Floor))); } Expression Expression::ceil() const { - LOG_THROW(this->hasNumericalReturnType(), storm::exceptions::InvalidTypeException, "Operator 'ceil' requires numerical operand."); + STORM_LOG_THROW(this->hasNumericalReturnType(), storm::exceptions::InvalidTypeException, "Operator 'ceil' requires numerical operand."); return Expression(std::shared_ptr<BaseExpression>(new UnaryNumericalFunctionExpression(ExpressionReturnType::Int, this->getBaseExpressionPointer(), UnaryNumericalFunctionExpression::OperatorType::Ceil))); } diff --git a/src/storage/expressions/IfThenElseExpression.cpp b/src/storage/expressions/IfThenElseExpression.cpp index 50c71af75..fb17fe142 100644 --- a/src/storage/expressions/IfThenElseExpression.cpp +++ b/src/storage/expressions/IfThenElseExpression.cpp @@ -1,6 +1,6 @@ #include "src/storage/expressions/IfThenElseExpression.h" -#include "src/exceptions/ExceptionMacros.h" +#include "src/utility/macros.h" #include "src/exceptions/InvalidAccessException.h" namespace storm { @@ -10,7 +10,7 @@ namespace storm { } std::shared_ptr<BaseExpression const> IfThenElseExpression::getOperand(uint_fast64_t operandIndex) const { - LOG_THROW(operandIndex < 3, storm::exceptions::InvalidAccessException, "Unable to access operand " << operandIndex << " in expression of arity 3."); + STORM_LOG_THROW(operandIndex < 3, storm::exceptions::InvalidAccessException, "Unable to access operand " << operandIndex << " in expression of arity 3."); if (operandIndex == 0) { return this->getCondition(); } else if (operandIndex == 1) { diff --git a/src/storage/expressions/LinearCoefficientVisitor.cpp b/src/storage/expressions/LinearCoefficientVisitor.cpp index 7525d6dde..dce0b4ece 100644 --- a/src/storage/expressions/LinearCoefficientVisitor.cpp +++ b/src/storage/expressions/LinearCoefficientVisitor.cpp @@ -1,7 +1,7 @@ #include "src/storage/expressions/LinearCoefficientVisitor.h" #include "src/storage/expressions/Expressions.h" -#include "src/exceptions/ExceptionMacros.h" +#include "src/utility/macros.h" #include "src/exceptions/InvalidArgumentException.h" namespace storm { @@ -12,11 +12,11 @@ namespace storm { } void LinearCoefficientVisitor::visit(IfThenElseExpression const* expression) { - LOG_THROW(false, storm::exceptions::InvalidArgumentException, "Expression is non-linear."); + STORM_LOG_THROW(false, storm::exceptions::InvalidArgumentException, "Expression is non-linear."); } void LinearCoefficientVisitor::visit(BinaryBooleanFunctionExpression const* expression) { - LOG_THROW(false, storm::exceptions::InvalidArgumentException, "Expression is non-linear."); + STORM_LOG_THROW(false, storm::exceptions::InvalidArgumentException, "Expression is non-linear."); } void LinearCoefficientVisitor::visit(BinaryNumericalFunctionExpression const* expression) { @@ -67,7 +67,7 @@ namespace storm { std::pair<SimpleValuation, double>& rightResult = resultStack.top(); // If the expression is linear, either the left or the right side must not contain variables. - LOG_THROW(leftResult.first.getNumberOfIdentifiers() == 0 || rightResult.first.getNumberOfIdentifiers() == 0, storm::exceptions::InvalidArgumentException, "Expression is non-linear."); + STORM_LOG_THROW(leftResult.first.getNumberOfIdentifiers() == 0 || rightResult.first.getNumberOfIdentifiers() == 0, storm::exceptions::InvalidArgumentException, "Expression is non-linear."); if (leftResult.first.getNumberOfIdentifiers() == 0) { for (auto const& identifier : rightResult.first.getDoubleIdentifiers()) { rightResult.first.setDoubleValue(identifier, leftResult.second * rightResult.first.getDoubleValue(identifier)); @@ -87,7 +87,7 @@ namespace storm { std::pair<SimpleValuation, double>& rightResult = resultStack.top(); // If the expression is linear, either the left or the right side must not contain variables. - LOG_THROW(leftResult.first.getNumberOfIdentifiers() == 0 || rightResult.first.getNumberOfIdentifiers() == 0, storm::exceptions::InvalidArgumentException, "Expression is non-linear."); + STORM_LOG_THROW(leftResult.first.getNumberOfIdentifiers() == 0 || rightResult.first.getNumberOfIdentifiers() == 0, storm::exceptions::InvalidArgumentException, "Expression is non-linear."); if (leftResult.first.getNumberOfIdentifiers() == 0) { for (auto const& identifier : rightResult.first.getDoubleIdentifiers()) { rightResult.first.setDoubleValue(identifier, leftResult.second / rightResult.first.getDoubleValue(identifier)); @@ -100,28 +100,28 @@ namespace storm { rightResult.second = leftResult.second / leftResult.second; return; } else { - LOG_THROW(false, storm::exceptions::InvalidArgumentException, "Expression is non-linear."); + STORM_LOG_THROW(false, storm::exceptions::InvalidArgumentException, "Expression is non-linear."); } } void LinearCoefficientVisitor::visit(BinaryRelationExpression const* expression) { - LOG_THROW(false, storm::exceptions::InvalidArgumentException, "Expression is non-linear."); + STORM_LOG_THROW(false, storm::exceptions::InvalidArgumentException, "Expression is non-linear."); } void LinearCoefficientVisitor::visit(VariableExpression const* expression) { SimpleValuation valuation; switch (expression->getReturnType()) { - case ExpressionReturnType::Bool: LOG_THROW(false, storm::exceptions::InvalidArgumentException, "Expression is non-linear."); break; + case ExpressionReturnType::Bool: STORM_LOG_THROW(false, storm::exceptions::InvalidArgumentException, "Expression is non-linear."); break; case ExpressionReturnType::Int: case ExpressionReturnType::Double: valuation.addDoubleIdentifier(expression->getVariableName(), 1); break; - case ExpressionReturnType::Undefined: LOG_THROW(false, storm::exceptions::InvalidArgumentException, "Illegal expression return type."); break; + case ExpressionReturnType::Undefined: STORM_LOG_THROW(false, storm::exceptions::InvalidArgumentException, "Illegal expression return type."); break; } resultStack.push(std::make_pair(valuation, 0)); } void LinearCoefficientVisitor::visit(UnaryBooleanFunctionExpression const* expression) { - LOG_THROW(false, storm::exceptions::InvalidArgumentException, "Expression is non-linear."); + STORM_LOG_THROW(false, storm::exceptions::InvalidArgumentException, "Expression is non-linear."); } void LinearCoefficientVisitor::visit(UnaryNumericalFunctionExpression const* expression) { @@ -132,12 +132,12 @@ namespace storm { valuationConstantPair.first.setDoubleValue(identifier, -valuationConstantPair.first.getDoubleValue(identifier)); } } else { - LOG_THROW(false, storm::exceptions::InvalidArgumentException, "Expression is non-linear."); + STORM_LOG_THROW(false, storm::exceptions::InvalidArgumentException, "Expression is non-linear."); } } void LinearCoefficientVisitor::visit(BooleanLiteralExpression const* expression) { - LOG_THROW(false, storm::exceptions::InvalidArgumentException, "Expression is non-linear."); + STORM_LOG_THROW(false, storm::exceptions::InvalidArgumentException, "Expression is non-linear."); } void LinearCoefficientVisitor::visit(IntegerLiteralExpression const* expression) { diff --git a/src/storage/expressions/LinearityCheckVisitor.cpp b/src/storage/expressions/LinearityCheckVisitor.cpp index 6f595900a..78b6cf1f4 100644 --- a/src/storage/expressions/LinearityCheckVisitor.cpp +++ b/src/storage/expressions/LinearityCheckVisitor.cpp @@ -1,7 +1,7 @@ #include "src/storage/expressions/LinearityCheckVisitor.h" #include "src/storage/expressions/Expressions.h" -#include "src/exceptions/ExceptionMacros.h" +#include "src/utility/macros.h" #include "src/exceptions/InvalidTypeException.h" namespace storm { diff --git a/src/storage/expressions/SimpleValuation.cpp b/src/storage/expressions/SimpleValuation.cpp index f50b1ef49..ae111c653 100644 --- a/src/storage/expressions/SimpleValuation.cpp +++ b/src/storage/expressions/SimpleValuation.cpp @@ -3,7 +3,7 @@ #include <set> #include <boost/functional/hash.hpp> -#include "src/exceptions/ExceptionMacros.h" +#include "src/utility/macros.h" #include "src/exceptions/InvalidArgumentException.h" #include "src/exceptions/InvalidAccessException.h" @@ -14,17 +14,17 @@ namespace storm { } void SimpleValuation::addBooleanIdentifier(std::string const& name, bool initialValue) { - LOG_THROW(this->identifierToValueMap.find(name) == this->identifierToValueMap.end(), storm::exceptions::InvalidArgumentException, "Identifier '" << name << "' already registered."); + STORM_LOG_THROW(this->identifierToValueMap.find(name) == this->identifierToValueMap.end(), storm::exceptions::InvalidArgumentException, "Identifier '" << name << "' already registered."); this->identifierToValueMap.emplace(name, initialValue); } void SimpleValuation::addIntegerIdentifier(std::string const& name, int_fast64_t initialValue) { - LOG_THROW(this->identifierToValueMap.find(name) == this->identifierToValueMap.end(), storm::exceptions::InvalidArgumentException, "Identifier '" << name << "' already registered."); + STORM_LOG_THROW(this->identifierToValueMap.find(name) == this->identifierToValueMap.end(), storm::exceptions::InvalidArgumentException, "Identifier '" << name << "' already registered."); this->identifierToValueMap.emplace(name, initialValue); } void SimpleValuation::addDoubleIdentifier(std::string const& name, double initialValue) { - LOG_THROW(this->identifierToValueMap.find(name) == this->identifierToValueMap.end(), storm::exceptions::InvalidArgumentException, "Identifier '" << name << "' already registered."); + STORM_LOG_THROW(this->identifierToValueMap.find(name) == this->identifierToValueMap.end(), storm::exceptions::InvalidArgumentException, "Identifier '" << name << "' already registered."); this->identifierToValueMap.emplace(name, initialValue); } @@ -42,13 +42,13 @@ namespace storm { void SimpleValuation::removeIdentifier(std::string const& name) { auto nameValuePair = this->identifierToValueMap.find(name); - LOG_THROW(nameValuePair != this->identifierToValueMap.end(), storm::exceptions::InvalidArgumentException, "Deleting unknown identifier '" << name << "'."); + STORM_LOG_THROW(nameValuePair != this->identifierToValueMap.end(), storm::exceptions::InvalidArgumentException, "Deleting unknown identifier '" << name << "'."); this->identifierToValueMap.erase(nameValuePair); } ExpressionReturnType SimpleValuation::getIdentifierType(std::string const& name) const { auto nameValuePair = this->identifierToValueMap.find(name); - LOG_THROW(nameValuePair != this->identifierToValueMap.end(), storm::exceptions::InvalidAccessException, "Access to unkown identifier '" << name << "'."); + STORM_LOG_THROW(nameValuePair != this->identifierToValueMap.end(), storm::exceptions::InvalidAccessException, "Access to unkown identifier '" << name << "'."); if (nameValuePair->second.type() == typeid(bool)) { return ExpressionReturnType::Bool; } else if (nameValuePair->second.type() == typeid(int_fast64_t)) { @@ -84,19 +84,19 @@ namespace storm { bool SimpleValuation::getBooleanValue(std::string const& name) const { auto nameValuePair = this->identifierToValueMap.find(name); - LOG_THROW(nameValuePair != this->identifierToValueMap.end(), storm::exceptions::InvalidAccessException, "Access to unkown identifier '" << name << "'."); + STORM_LOG_THROW(nameValuePair != this->identifierToValueMap.end(), storm::exceptions::InvalidAccessException, "Access to unkown identifier '" << name << "'."); return boost::get<bool>(nameValuePair->second); } int_fast64_t SimpleValuation::getIntegerValue(std::string const& name) const { auto nameValuePair = this->identifierToValueMap.find(name); - LOG_THROW(nameValuePair != this->identifierToValueMap.end(), storm::exceptions::InvalidAccessException, "Access to unkown identifier '" << name << "'."); + STORM_LOG_THROW(nameValuePair != this->identifierToValueMap.end(), storm::exceptions::InvalidAccessException, "Access to unkown identifier '" << name << "'."); return boost::get<int_fast64_t>(nameValuePair->second); } double SimpleValuation::getDoubleValue(std::string const& name) const { auto nameValuePair = this->identifierToValueMap.find(name); - LOG_THROW(nameValuePair != this->identifierToValueMap.end(), storm::exceptions::InvalidAccessException, "Access to unkown identifier '" << name << "'."); + STORM_LOG_THROW(nameValuePair != this->identifierToValueMap.end(), storm::exceptions::InvalidAccessException, "Access to unkown identifier '" << name << "'."); return boost::get<double>(nameValuePair->second); } diff --git a/src/storage/expressions/TypeCheckVisitor.cpp b/src/storage/expressions/TypeCheckVisitor.cpp index 521453042..11643abce 100644 --- a/src/storage/expressions/TypeCheckVisitor.cpp +++ b/src/storage/expressions/TypeCheckVisitor.cpp @@ -1,7 +1,7 @@ #include "src/storage/expressions/TypeCheckVisitor.h" #include "src/storage/expressions/Expressions.h" -#include "src/exceptions/ExceptionMacros.h" +#include "src/utility/macros.h" #include "src/exceptions/InvalidTypeException.h" namespace storm { @@ -44,8 +44,8 @@ namespace storm { template<typename MapType> void TypeCheckVisitor<MapType>::visit(VariableExpression const* expression) { auto identifierTypePair = this->identifierToTypeMap.find(expression->getVariableName()); - LOG_THROW(identifierTypePair != this->identifierToTypeMap.end(), storm::exceptions::InvalidArgumentException, "No type available for identifier '" << expression->getVariableName() << "'."); - LOG_THROW(identifierTypePair->second == expression->getReturnType(), storm::exceptions::InvalidTypeException, "Type mismatch for variable '" << expression->getVariableName() << "': expected '" << identifierTypePair->first << "', but found '" << expression->getReturnType() << "'."); + STORM_LOG_THROW(identifierTypePair != this->identifierToTypeMap.end(), storm::exceptions::InvalidArgumentException, "No type available for identifier '" << expression->getVariableName() << "'."); + STORM_LOG_THROW(identifierTypePair->second == expression->getReturnType(), storm::exceptions::InvalidTypeException, "Type mismatch for variable '" << expression->getVariableName() << "': expected '" << identifierTypePair->first << "', but found '" << expression->getReturnType() << "'."); } template<typename MapType> diff --git a/src/storage/expressions/UnaryBooleanFunctionExpression.cpp b/src/storage/expressions/UnaryBooleanFunctionExpression.cpp index 1d9e59119..d696ef22d 100644 --- a/src/storage/expressions/UnaryBooleanFunctionExpression.cpp +++ b/src/storage/expressions/UnaryBooleanFunctionExpression.cpp @@ -1,6 +1,6 @@ #include "src/storage/expressions/UnaryBooleanFunctionExpression.h" #include "src/storage/expressions/BooleanLiteralExpression.h" -#include "src/exceptions/ExceptionMacros.h" +#include "src/utility/macros.h" #include "src/exceptions/InvalidTypeException.h" namespace storm { @@ -20,7 +20,7 @@ namespace storm { } bool UnaryBooleanFunctionExpression::evaluateAsBool(Valuation const* valuation) const { - LOG_THROW(this->hasBooleanReturnType(), storm::exceptions::InvalidTypeException, "Unable to evaluate expression as boolean."); + STORM_LOG_THROW(this->hasBooleanReturnType(), storm::exceptions::InvalidTypeException, "Unable to evaluate expression as boolean."); bool operandEvaluated = this->getOperand()->evaluateAsBool(valuation); switch (this->getOperatorType()) { diff --git a/src/storage/expressions/UnaryExpression.cpp b/src/storage/expressions/UnaryExpression.cpp index 169466003..3569e5453 100644 --- a/src/storage/expressions/UnaryExpression.cpp +++ b/src/storage/expressions/UnaryExpression.cpp @@ -1,6 +1,6 @@ #include "src/storage/expressions/UnaryExpression.h" -#include "src/exceptions/ExceptionMacros.h" +#include "src/utility/macros.h" #include "src/exceptions/InvalidAccessException.h" namespace storm { @@ -34,7 +34,7 @@ namespace storm { } std::shared_ptr<BaseExpression const> UnaryExpression::getOperand(uint_fast64_t operandIndex) const { - LOG_THROW(operandIndex == 0, storm::exceptions::InvalidAccessException, "Unable to access operand " << operandIndex << " in expression of arity 2."); + STORM_LOG_THROW(operandIndex == 0, storm::exceptions::InvalidAccessException, "Unable to access operand " << operandIndex << " in expression of arity 2."); return this->getOperand(); } } diff --git a/src/storage/expressions/UnaryNumericalFunctionExpression.cpp b/src/storage/expressions/UnaryNumericalFunctionExpression.cpp index 972f2a24a..d90e460a1 100644 --- a/src/storage/expressions/UnaryNumericalFunctionExpression.cpp +++ b/src/storage/expressions/UnaryNumericalFunctionExpression.cpp @@ -1,7 +1,7 @@ #include <cmath> #include "src/storage/expressions/UnaryNumericalFunctionExpression.h" -#include "src/exceptions/ExceptionMacros.h" +#include "src/utility/macros.h" #include "src/exceptions/InvalidTypeException.h" namespace storm { @@ -23,7 +23,7 @@ namespace storm { } int_fast64_t UnaryNumericalFunctionExpression::evaluateAsInt(Valuation const* valuation) const { - LOG_THROW(this->hasIntegralReturnType(), storm::exceptions::InvalidTypeException, "Unable to evaluate expression as integer."); + STORM_LOG_THROW(this->hasIntegralReturnType(), storm::exceptions::InvalidTypeException, "Unable to evaluate expression as integer."); int_fast64_t operandEvaluated = this->getOperand()->evaluateAsInt(valuation); switch (this->getOperatorType()) { @@ -34,7 +34,7 @@ namespace storm { } double UnaryNumericalFunctionExpression::evaluateAsDouble(Valuation const* valuation) const { - LOG_THROW(this->hasNumericalReturnType(), storm::exceptions::InvalidTypeException, "Unable to evaluate expression as double."); + STORM_LOG_THROW(this->hasNumericalReturnType(), storm::exceptions::InvalidTypeException, "Unable to evaluate expression as double."); double operandEvaluated = this->getOperand()->evaluateAsDouble(valuation); switch (this->getOperatorType()) { diff --git a/src/storage/expressions/VariableExpression.cpp b/src/storage/expressions/VariableExpression.cpp index a9f714569..c65e9a47a 100644 --- a/src/storage/expressions/VariableExpression.cpp +++ b/src/storage/expressions/VariableExpression.cpp @@ -1,5 +1,5 @@ #include "src/storage/expressions/VariableExpression.h" -#include "src/exceptions/ExceptionMacros.h" +#include "src/utility/macros.h" #include "src/exceptions/InvalidTypeException.h" namespace storm { @@ -13,29 +13,29 @@ namespace storm { } bool VariableExpression::evaluateAsBool(Valuation const* valuation) const { - LOG_ASSERT(valuation != nullptr, "Evaluating expressions with unknowns without valuation."); - LOG_THROW(this->hasBooleanReturnType(), storm::exceptions::InvalidTypeException, "Cannot evaluate expression as boolean: return type is not a boolean."); + STORM_LOG_ASSERT(valuation != nullptr, "Evaluating expressions with unknowns without valuation."); + STORM_LOG_THROW(this->hasBooleanReturnType(), storm::exceptions::InvalidTypeException, "Cannot evaluate expression as boolean: return type is not a boolean."); return valuation->getBooleanValue(this->getVariableName()); } int_fast64_t VariableExpression::evaluateAsInt(Valuation const* valuation) const { - LOG_ASSERT(valuation != nullptr, "Evaluating expressions with unknowns without valuation."); - LOG_THROW(this->hasIntegralReturnType(), storm::exceptions::InvalidTypeException, "Cannot evaluate expression as integer: return type is not an integer."); + STORM_LOG_ASSERT(valuation != nullptr, "Evaluating expressions with unknowns without valuation."); + STORM_LOG_THROW(this->hasIntegralReturnType(), storm::exceptions::InvalidTypeException, "Cannot evaluate expression as integer: return type is not an integer."); return valuation->getIntegerValue(this->getVariableName()); } double VariableExpression::evaluateAsDouble(Valuation const* valuation) const { - LOG_ASSERT(valuation != nullptr, "Evaluating expressions with unknowns without valuation."); - LOG_THROW(this->hasNumericalReturnType(), storm::exceptions::InvalidTypeException, "Cannot evaluate expression as double: return type is not a double."); + STORM_LOG_ASSERT(valuation != nullptr, "Evaluating expressions with unknowns without valuation."); + STORM_LOG_THROW(this->hasNumericalReturnType(), storm::exceptions::InvalidTypeException, "Cannot evaluate expression as double: return type is not a double."); switch (this->getReturnType()) { case ExpressionReturnType::Int: return static_cast<double>(valuation->getIntegerValue(this->getVariableName())); break; case ExpressionReturnType::Double: valuation->getDoubleValue(this->getVariableName()); break; default: break; } - LOG_ASSERT(false, "Type of variable is required to be numeric."); + STORM_LOG_ASSERT(false, "Type of variable is required to be numeric."); // Silence warning. This point can never be reached. return 0; diff --git a/src/storage/prism/Constant.cpp b/src/storage/prism/Constant.cpp index c02deea99..d327461a7 100644 --- a/src/storage/prism/Constant.cpp +++ b/src/storage/prism/Constant.cpp @@ -1,5 +1,5 @@ #include "src/storage/prism/Constant.h" -#include "src/exceptions/ExceptionMacros.h" +#include "src/utility/macros.h" #include "src/exceptions/IllegalFunctionCallException.h" namespace storm { @@ -25,7 +25,7 @@ namespace storm { } storm::expressions::Expression const& Constant::getExpression() const { - LOG_THROW(this->isDefined(), storm::exceptions::IllegalFunctionCallException, "Unable to retrieve defining expression for undefined constant."); + STORM_LOG_THROW(this->isDefined(), storm::exceptions::IllegalFunctionCallException, "Unable to retrieve defining expression for undefined constant."); return this->expression; } diff --git a/src/storage/prism/Module.cpp b/src/storage/prism/Module.cpp index 6f4becb0a..327ffbcc3 100644 --- a/src/storage/prism/Module.cpp +++ b/src/storage/prism/Module.cpp @@ -1,5 +1,5 @@ #include "src/storage/prism/Module.h" -#include "src/exceptions/ExceptionMacros.h" +#include "src/utility/macros.h" #include "src/exceptions/OutOfRangeException.h" #include "src/exceptions/InvalidArgumentException.h" #include "src/exceptions/InvalidAccessException.h" @@ -25,7 +25,7 @@ namespace storm { storm::prism::BooleanVariable const& Module::getBooleanVariable(std::string const& variableName) const { auto const& nameIndexPair = this->booleanVariableToIndexMap.find(variableName); - LOG_THROW(nameIndexPair != this->booleanVariableToIndexMap.end(), storm::exceptions::InvalidArgumentException, "Unknown boolean variable '" << variableName << "'."); + STORM_LOG_THROW(nameIndexPair != this->booleanVariableToIndexMap.end(), storm::exceptions::InvalidArgumentException, "Unknown boolean variable '" << variableName << "'."); return this->getBooleanVariables()[nameIndexPair->second]; } @@ -35,7 +35,7 @@ namespace storm { storm::prism::IntegerVariable const& Module::getIntegerVariable(std::string const& variableName) const { auto const& nameIndexPair = this->integerVariableToIndexMap.find(variableName); - LOG_THROW(nameIndexPair != this->integerVariableToIndexMap.end(), storm::exceptions::InvalidArgumentException, "Unknown integer variable '" << variableName << "'."); + STORM_LOG_THROW(nameIndexPair != this->integerVariableToIndexMap.end(), storm::exceptions::InvalidArgumentException, "Unknown integer variable '" << variableName << "'."); return this->getIntegerVariables()[nameIndexPair->second]; } @@ -81,12 +81,12 @@ namespace storm { } std::string const& Module::getBaseModule() const { - LOG_THROW(this->isRenamedFromModule(), storm::exceptions::InvalidAccessException, "Unable to retrieve base module of module that was not created by renaming."); + STORM_LOG_THROW(this->isRenamedFromModule(), storm::exceptions::InvalidAccessException, "Unable to retrieve base module of module that was not created by renaming."); return this->renamedFromModule; } std::map<std::string, std::string> const& Module::getRenaming() const { - LOG_THROW(this->isRenamedFromModule(), storm::exceptions::InvalidAccessException, "Unable to retrieve renaming of module that was not created by renaming."); + STORM_LOG_THROW(this->isRenamedFromModule(), storm::exceptions::InvalidAccessException, "Unable to retrieve renaming of module that was not created by renaming."); return this->renaming; } @@ -96,7 +96,7 @@ namespace storm { return actionsCommandSetPair->second; } - LOG_THROW(false, storm::exceptions::OutOfRangeException, "Action name '" << action << "' does not exist in module."); + STORM_LOG_THROW(false, storm::exceptions::OutOfRangeException, "Action name '" << action << "' does not exist in module."); } void Module::createMappings() { diff --git a/src/storage/prism/Program.cpp b/src/storage/prism/Program.cpp index 617a1c52b..f053c93e8 100644 --- a/src/storage/prism/Program.cpp +++ b/src/storage/prism/Program.cpp @@ -2,7 +2,7 @@ #include <algorithm> -#include "src/exceptions/ExceptionMacros.h" +#include "src/utility/macros.h" #include "exceptions/InvalidArgumentException.h" #include "src/exceptions/OutOfRangeException.h" #include "src/exceptions/WrongFormatException.h" @@ -81,13 +81,13 @@ namespace storm { BooleanVariable const& Program::getGlobalBooleanVariable(std::string const& variableName) const { auto const& nameIndexPair = this->globalBooleanVariableToIndexMap.find(variableName); - LOG_THROW(nameIndexPair != this->globalBooleanVariableToIndexMap.end(), storm::exceptions::OutOfRangeException, "Unknown boolean variable '" << variableName << "'."); + STORM_LOG_THROW(nameIndexPair != this->globalBooleanVariableToIndexMap.end(), storm::exceptions::OutOfRangeException, "Unknown boolean variable '" << variableName << "'."); return this->getGlobalBooleanVariables()[nameIndexPair->second]; } IntegerVariable const& Program::getGlobalIntegerVariable(std::string const& variableName) const { auto const& nameIndexPair = this->globalIntegerVariableToIndexMap.find(variableName); - LOG_THROW(nameIndexPair != this->globalIntegerVariableToIndexMap.end(), storm::exceptions::OutOfRangeException, "Unknown integer variable '" << variableName << "'."); + STORM_LOG_THROW(nameIndexPair != this->globalIntegerVariableToIndexMap.end(), storm::exceptions::OutOfRangeException, "Unknown integer variable '" << variableName << "'."); return this->getGlobalIntegerVariables()[nameIndexPair->second]; } @@ -117,7 +117,7 @@ namespace storm { Module const& Program::getModule(std::string const& moduleName) const { auto const& nameIndexPair = this->moduleToIndexMap.find(moduleName); - LOG_THROW(nameIndexPair != this->moduleToIndexMap.end(), storm::exceptions::OutOfRangeException, "Unknown module '" << moduleName << "'."); + STORM_LOG_THROW(nameIndexPair != this->moduleToIndexMap.end(), storm::exceptions::OutOfRangeException, "Unknown module '" << moduleName << "'."); return this->getModules()[nameIndexPair->second]; } @@ -135,13 +135,13 @@ namespace storm { std::set<uint_fast64_t> const& Program::getModuleIndicesByAction(std::string const& action) const { auto const& actionModuleSetPair = this->actionsToModuleIndexMap.find(action); - LOG_THROW(actionModuleSetPair != this->actionsToModuleIndexMap.end(), storm::exceptions::OutOfRangeException, "Action name '" << action << "' does not exist."); + STORM_LOG_THROW(actionModuleSetPair != this->actionsToModuleIndexMap.end(), storm::exceptions::OutOfRangeException, "Action name '" << action << "' does not exist."); return actionModuleSetPair->second; } uint_fast64_t Program::getModuleIndexByVariable(std::string const& variableName) const { auto const& variableNameToModuleIndexPair = this->variableToModuleIndexMap.find(variableName); - LOG_THROW(variableNameToModuleIndexPair != this->variableToModuleIndexMap.end(), storm::exceptions::OutOfRangeException, "Variable '" << variableName << "' does not exist."); + STORM_LOG_THROW(variableNameToModuleIndexPair != this->variableToModuleIndexMap.end(), storm::exceptions::OutOfRangeException, "Variable '" << variableName << "' does not exist."); return variableNameToModuleIndexPair->second; } @@ -155,7 +155,7 @@ namespace storm { storm::prism::RewardModel const& Program::getRewardModel(std::string const& name) const { auto const& nameIndexPair = this->rewardModelToIndexMap.find(name); - LOG_THROW(nameIndexPair != this->rewardModelToIndexMap.end(), storm::exceptions::OutOfRangeException, "Reward model '" << name << "' does not exist."); + STORM_LOG_THROW(nameIndexPair != this->rewardModelToIndexMap.end(), storm::exceptions::OutOfRangeException, "Reward model '" << name << "' does not exist."); return this->getRewardModels()[nameIndexPair->second]; } @@ -238,7 +238,7 @@ namespace storm { // defining expression if (constant.isDefined()) { // Make sure we are not trying to define an already defined constant. - LOG_THROW(constantDefinitions.find(constant.getName()) == constantDefinitions.end(), storm::exceptions::InvalidArgumentException, "Illegally defining already defined constant '" << constant.getName() << "'."); + STORM_LOG_THROW(constantDefinitions.find(constant.getName()) == constantDefinitions.end(), storm::exceptions::InvalidArgumentException, "Illegally defining already defined constant '" << constant.getName() << "'."); // Now replace the occurrences of undefined constants in its defining expression. newConstants.emplace_back(constant.getType(), constant.getName(), constant.getExpression().substitute(constantDefinitions), constant.getFilename(), constant.getLineNumber()); @@ -253,7 +253,7 @@ namespace storm { definedUndefinedConstants.insert(constant.getName()); // Make sure the type of the constant is correct. - LOG_THROW(variableExpressionPair->second.getReturnType() == constant.getType(), storm::exceptions::InvalidArgumentException, "Illegal type of expression defining constant '" << constant.getName() << "'."); + STORM_LOG_THROW(variableExpressionPair->second.getReturnType() == constant.getType(), storm::exceptions::InvalidArgumentException, "Illegal type of expression defining constant '" << constant.getName() << "'."); // Now create the defined constant. newConstants.emplace_back(constant.getType(), constant.getName(), variableExpressionPair->second, constant.getFilename(), constant.getLineNumber()); @@ -264,7 +264,7 @@ namespace storm { // As a sanity check, we make sure that the given mapping does not contain any definitions for identifiers // that are not undefined constants. for (auto const& constantExpressionPair : constantDefinitions) { - LOG_THROW(definedUndefinedConstants.find(constantExpressionPair.first) != definedUndefinedConstants.end(), storm::exceptions::InvalidArgumentException, "Unable to define non-existant constant."); + STORM_LOG_THROW(definedUndefinedConstants.find(constantExpressionPair.first) != definedUndefinedConstants.end(), storm::exceptions::InvalidArgumentException, "Unable to define non-existant constant."); } return Program(this->getModelType(), newConstants, this->getGlobalBooleanVariables(), this->getGlobalIntegerVariables(), this->getFormulas(), this->getModules(), this->getRewardModels(), false, this->getInitialConstruct(), this->getLabels()); @@ -276,7 +276,7 @@ namespace storm { std::vector<Constant> newConstants(this->getConstants()); for (uint_fast64_t constantIndex = 0; constantIndex < newConstants.size(); ++constantIndex) { auto const& constant = newConstants[constantIndex]; - LOG_THROW(constant.isDefined(), storm::exceptions::InvalidArgumentException, "Cannot substitute constants in program that contains undefined constants."); + STORM_LOG_THROW(constant.isDefined(), storm::exceptions::InvalidArgumentException, "Cannot substitute constants in program that contains undefined constants."); // Put the corresponding expression in the substitution. constantSubstitution.emplace(constant.getName(), constant.getExpression()); @@ -339,19 +339,19 @@ namespace storm { std::set<std::string> constantNames; for (auto const& constant : this->getConstants()) { // Check for duplicate identifiers. - LOG_THROW(allIdentifiers.find(constant.getName()) == allIdentifiers.end(), storm::exceptions::WrongFormatException, "Error in " << constant.getFilename() << ", line " << constant.getLineNumber() << ": duplicate identifier '" << constant.getName() << "'."); + STORM_LOG_THROW(allIdentifiers.find(constant.getName()) == allIdentifiers.end(), storm::exceptions::WrongFormatException, "Error in " << constant.getFilename() << ", line " << constant.getLineNumber() << ": duplicate identifier '" << constant.getName() << "'."); // Check defining expressions of defined constants. if (constant.isDefined()) { std::set<std::string> containedIdentifiers = constant.getExpression().getVariables(); bool isValid = std::includes(constantNames.begin(), constantNames.end(), containedIdentifiers.begin(), containedIdentifiers.end()); - LOG_THROW(isValid, storm::exceptions::WrongFormatException, "Error in " << constant.getFilename() << ", line " << constant.getLineNumber() << ": defining expression refers to unknown identifiers."); + STORM_LOG_THROW(isValid, storm::exceptions::WrongFormatException, "Error in " << constant.getFilename() << ", line " << constant.getLineNumber() << ": defining expression refers to unknown identifiers."); // Now check that the constants appear with the right types. try { constant.getExpression().check(identifierToTypeMap); } catch (storm::exceptions::InvalidTypeException const& e) { - LOG_THROW(false, storm::exceptions::WrongFormatException, "Error in " << constant.getFilename() << ", line " << constant.getLineNumber() << ": " << e.what()); + STORM_LOG_THROW(false, storm::exceptions::WrongFormatException, "Error in " << constant.getFilename() << ", line " << constant.getLineNumber() << ": " << e.what()); } } @@ -368,16 +368,16 @@ namespace storm { std::set<std::string> variableNames; for (auto const& variable : this->getGlobalBooleanVariables()) { // Check for duplicate identifiers. - LOG_THROW(allIdentifiers.find(variable.getName()) == allIdentifiers.end(), storm::exceptions::WrongFormatException, "Error in " << variable.getFilename() << ", line " << variable.getLineNumber() << ": duplicate identifier '" << variable.getName() << "'."); + STORM_LOG_THROW(allIdentifiers.find(variable.getName()) == allIdentifiers.end(), storm::exceptions::WrongFormatException, "Error in " << variable.getFilename() << ", line " << variable.getLineNumber() << ": duplicate identifier '" << variable.getName() << "'."); // Check the initial value of the variable. std::set<std::string> containedIdentifiers = variable.getInitialValueExpression().getVariables(); bool isValid = std::includes(constantNames.begin(), constantNames.end(), containedIdentifiers.begin(), containedIdentifiers.end()); - LOG_THROW(isValid, storm::exceptions::WrongFormatException, "Error in " << variable.getFilename() << ", line " << variable.getLineNumber() << ": initial value expression refers to unknown constants."); + STORM_LOG_THROW(isValid, storm::exceptions::WrongFormatException, "Error in " << variable.getFilename() << ", line " << variable.getLineNumber() << ": initial value expression refers to unknown constants."); try { variable.getInitialValueExpression().check(identifierToTypeMap); } catch (storm::exceptions::InvalidTypeException const& e) { - LOG_THROW(false, storm::exceptions::WrongFormatException, "Error in " << variable.getFilename() << ", line " << variable.getLineNumber() << ": " << e.what()); + STORM_LOG_THROW(false, storm::exceptions::WrongFormatException, "Error in " << variable.getFilename() << ", line " << variable.getLineNumber() << ": " << e.what()); } // Register the type of the constant for later type checks. @@ -390,35 +390,35 @@ namespace storm { } for (auto const& variable : this->getGlobalIntegerVariables()) { // Check for duplicate identifiers. - LOG_THROW(allIdentifiers.find(variable.getName()) == allIdentifiers.end(), storm::exceptions::WrongFormatException, "Error in " << variable.getFilename() << ", line " << variable.getLineNumber() << ": duplicate identifier '" << variable.getName() << "'."); + STORM_LOG_THROW(allIdentifiers.find(variable.getName()) == allIdentifiers.end(), storm::exceptions::WrongFormatException, "Error in " << variable.getFilename() << ", line " << variable.getLineNumber() << ": duplicate identifier '" << variable.getName() << "'."); // Check that bound expressions of the range. std::set<std::string> containedIdentifiers = variable.getLowerBoundExpression().getVariables(); bool isValid = std::includes(constantNames.begin(), constantNames.end(), containedIdentifiers.begin(), containedIdentifiers.end()); - LOG_THROW(isValid, storm::exceptions::WrongFormatException, "Error in " << variable.getFilename() << ", line " << variable.getLineNumber() << ": lower bound expression refers to unknown constants."); + STORM_LOG_THROW(isValid, storm::exceptions::WrongFormatException, "Error in " << variable.getFilename() << ", line " << variable.getLineNumber() << ": lower bound expression refers to unknown constants."); try { variable.getLowerBoundExpression().check(identifierToTypeMap); } catch (storm::exceptions::InvalidTypeException const& e) { - LOG_THROW(false, storm::exceptions::WrongFormatException, "Error in " << variable.getFilename() << ", line " << variable.getLineNumber() << ": " << e.what()); + STORM_LOG_THROW(false, storm::exceptions::WrongFormatException, "Error in " << variable.getFilename() << ", line " << variable.getLineNumber() << ": " << e.what()); } containedIdentifiers = variable.getLowerBoundExpression().getVariables(); isValid = std::includes(constantNames.begin(), constantNames.end(), containedIdentifiers.begin(), containedIdentifiers.end()); - LOG_THROW(isValid, storm::exceptions::WrongFormatException, "Error in " << variable.getFilename() << ", line " << variable.getLineNumber() << ": upper bound expression refers to unknown constants."); + STORM_LOG_THROW(isValid, storm::exceptions::WrongFormatException, "Error in " << variable.getFilename() << ", line " << variable.getLineNumber() << ": upper bound expression refers to unknown constants."); try { variable.getUpperBoundExpression().check(identifierToTypeMap); } catch (storm::exceptions::InvalidTypeException const& e) { - LOG_THROW(false, storm::exceptions::WrongFormatException, "Error in " << variable.getFilename() << ", line " << variable.getLineNumber() << ": " << e.what()); + STORM_LOG_THROW(false, storm::exceptions::WrongFormatException, "Error in " << variable.getFilename() << ", line " << variable.getLineNumber() << ": " << e.what()); } // Check the initial value of the variable. containedIdentifiers = variable.getInitialValueExpression().getVariables(); isValid = std::includes(constantNames.begin(), constantNames.end(), containedIdentifiers.begin(), containedIdentifiers.end()); - LOG_THROW(isValid, storm::exceptions::WrongFormatException, "Error in " << variable.getFilename() << ", line " << variable.getLineNumber() << ": initial value expression refers to unknown constants."); + STORM_LOG_THROW(isValid, storm::exceptions::WrongFormatException, "Error in " << variable.getFilename() << ", line " << variable.getLineNumber() << ": initial value expression refers to unknown constants."); try { variable.getInitialValueExpression().check(identifierToTypeMap); } catch (storm::exceptions::InvalidTypeException const& e) { - LOG_THROW(false, storm::exceptions::WrongFormatException, "Error in " << variable.getFilename() << ", line " << variable.getLineNumber() << ": " << e.what()); + STORM_LOG_THROW(false, storm::exceptions::WrongFormatException, "Error in " << variable.getFilename() << ", line " << variable.getLineNumber() << ": " << e.what()); } // Register the type of the constant for later type checks. @@ -434,16 +434,16 @@ namespace storm { for (auto const& module : this->getModules()) { for (auto const& variable : module.getBooleanVariables()) { // Check for duplicate identifiers. - LOG_THROW(allIdentifiers.find(variable.getName()) == allIdentifiers.end(), storm::exceptions::WrongFormatException, "Error in " << variable.getFilename() << ", line " << variable.getLineNumber() << ": duplicate identifier '" << variable.getName() << "'."); + STORM_LOG_THROW(allIdentifiers.find(variable.getName()) == allIdentifiers.end(), storm::exceptions::WrongFormatException, "Error in " << variable.getFilename() << ", line " << variable.getLineNumber() << ": duplicate identifier '" << variable.getName() << "'."); // Check the initial value of the variable. std::set<std::string> containedIdentifiers = variable.getInitialValueExpression().getVariables(); bool isValid = std::includes(constantNames.begin(), constantNames.end(), containedIdentifiers.begin(), containedIdentifiers.end()); - LOG_THROW(isValid, storm::exceptions::WrongFormatException, "Error in " << variable.getFilename() << ", line " << variable.getLineNumber() << ": initial value expression refers to unknown constants."); + STORM_LOG_THROW(isValid, storm::exceptions::WrongFormatException, "Error in " << variable.getFilename() << ", line " << variable.getLineNumber() << ": initial value expression refers to unknown constants."); try { variable.getInitialValueExpression().check(identifierToTypeMap); } catch (storm::exceptions::InvalidTypeException const& e) { - LOG_THROW(false, storm::exceptions::WrongFormatException, "Error in " << variable.getFilename() << ", line " << variable.getLineNumber() << ": " << e.what()); + STORM_LOG_THROW(false, storm::exceptions::WrongFormatException, "Error in " << variable.getFilename() << ", line " << variable.getLineNumber() << ": " << e.what()); } // Register the type of the constant for later type checks. @@ -455,7 +455,7 @@ namespace storm { } for (auto const& variable : module.getIntegerVariables()) { // Check for duplicate identifiers. - LOG_THROW(allIdentifiers.find(variable.getName()) == allIdentifiers.end(), storm::exceptions::WrongFormatException, "Error in " << variable.getFilename() << ", line " << variable.getLineNumber() << ": duplicate identifier '" << variable.getName() << "'."); + STORM_LOG_THROW(allIdentifiers.find(variable.getName()) == allIdentifiers.end(), storm::exceptions::WrongFormatException, "Error in " << variable.getFilename() << ", line " << variable.getLineNumber() << ": duplicate identifier '" << variable.getName() << "'."); // Register the type of the constant for later type checks. identifierToTypeMap.emplace(variable.getName(), storm::expressions::ExpressionReturnType::Int); @@ -463,30 +463,30 @@ namespace storm { // Check that bound expressions of the range. std::set<std::string> containedIdentifiers = variable.getLowerBoundExpression().getVariables(); bool isValid = std::includes(constantNames.begin(), constantNames.end(), containedIdentifiers.begin(), containedIdentifiers.end()); - LOG_THROW(isValid, storm::exceptions::WrongFormatException, "Error in " << variable.getFilename() << ", line " << variable.getLineNumber() << ": lower bound expression refers to unknown constants."); + STORM_LOG_THROW(isValid, storm::exceptions::WrongFormatException, "Error in " << variable.getFilename() << ", line " << variable.getLineNumber() << ": lower bound expression refers to unknown constants."); try { variable.getLowerBoundExpression().check(identifierToTypeMap); } catch (storm::exceptions::InvalidTypeException const& e) { - LOG_THROW(false, storm::exceptions::WrongFormatException, "Error in " << variable.getFilename() << ", line " << variable.getLineNumber() << ": " << e.what()); + STORM_LOG_THROW(false, storm::exceptions::WrongFormatException, "Error in " << variable.getFilename() << ", line " << variable.getLineNumber() << ": " << e.what()); } containedIdentifiers = variable.getLowerBoundExpression().getVariables(); isValid = std::includes(constantNames.begin(), constantNames.end(), containedIdentifiers.begin(), containedIdentifiers.end()); - LOG_THROW(isValid, storm::exceptions::WrongFormatException, "Error in " << variable.getFilename() << ", line " << variable.getLineNumber() << ": upper bound expression refers to unknown constants."); + STORM_LOG_THROW(isValid, storm::exceptions::WrongFormatException, "Error in " << variable.getFilename() << ", line " << variable.getLineNumber() << ": upper bound expression refers to unknown constants."); try { variable.getUpperBoundExpression().check(identifierToTypeMap); } catch (storm::exceptions::InvalidTypeException const& e) { - LOG_THROW(false, storm::exceptions::WrongFormatException, "Error in " << variable.getFilename() << ", line " << variable.getLineNumber() << ": " << e.what()); + STORM_LOG_THROW(false, storm::exceptions::WrongFormatException, "Error in " << variable.getFilename() << ", line " << variable.getLineNumber() << ": " << e.what()); } // Check the initial value of the variable. containedIdentifiers = variable.getInitialValueExpression().getVariables(); isValid = std::includes(constantNames.begin(), constantNames.end(), containedIdentifiers.begin(), containedIdentifiers.end()); - LOG_THROW(isValid, storm::exceptions::WrongFormatException, "Error in " << variable.getFilename() << ", line " << variable.getLineNumber() << ": initial value expression refers to unknown constants."); + STORM_LOG_THROW(isValid, storm::exceptions::WrongFormatException, "Error in " << variable.getFilename() << ", line " << variable.getLineNumber() << ": initial value expression refers to unknown constants."); try { variable.getInitialValueExpression().check(identifierToTypeMap); } catch (storm::exceptions::InvalidTypeException const& e) { - LOG_THROW(false, storm::exceptions::WrongFormatException, "Error in " << variable.getFilename() << ", line " << variable.getLineNumber() << ": " << e.what()); + STORM_LOG_THROW(false, storm::exceptions::WrongFormatException, "Error in " << variable.getFilename() << ", line " << variable.getLineNumber() << ": " << e.what()); } // Record the new identifier for future checks. @@ -513,23 +513,23 @@ namespace storm { // Check the guard. std::set<std::string> containedIdentifiers = command.getGuardExpression().getVariables(); bool isValid = std::includes(variablesAndConstants.begin(), variablesAndConstants.end(), containedIdentifiers.begin(), containedIdentifiers.end()); - LOG_THROW(isValid, storm::exceptions::WrongFormatException, "Error in " << command.getFilename() << ", line " << command.getLineNumber() << ": guard refers to unknown identifiers."); + STORM_LOG_THROW(isValid, storm::exceptions::WrongFormatException, "Error in " << command.getFilename() << ", line " << command.getLineNumber() << ": guard refers to unknown identifiers."); try { command.getGuardExpression().check(identifierToTypeMap); } catch (storm::exceptions::InvalidTypeException const& e) { - LOG_THROW(false, storm::exceptions::WrongFormatException, "Error in " << command.getFilename() << ", line " << command.getLineNumber() << ": " << e.what()); + STORM_LOG_THROW(false, storm::exceptions::WrongFormatException, "Error in " << command.getFilename() << ", line " << command.getLineNumber() << ": " << e.what()); } - LOG_THROW(command.getGuardExpression().hasBooleanReturnType(), storm::exceptions::WrongFormatException, "Error in " << command.getFilename() << ", line " << command.getLineNumber() << ": expression for guard must evaluate to type 'bool'."); + STORM_LOG_THROW(command.getGuardExpression().hasBooleanReturnType(), storm::exceptions::WrongFormatException, "Error in " << command.getFilename() << ", line " << command.getLineNumber() << ": expression for guard must evaluate to type 'bool'."); // Check all updates. for (auto const& update : command.getUpdates()) { containedIdentifiers = update.getLikelihoodExpression().getVariables(); isValid = std::includes(variablesAndConstants.begin(), variablesAndConstants.end(), containedIdentifiers.begin(), containedIdentifiers.end()); - LOG_THROW(isValid, storm::exceptions::WrongFormatException, "Error in " << command.getFilename() << ", line " << command.getLineNumber() << ": likelihood expression refers to unknown identifiers."); + STORM_LOG_THROW(isValid, storm::exceptions::WrongFormatException, "Error in " << command.getFilename() << ", line " << command.getLineNumber() << ": likelihood expression refers to unknown identifiers."); try { update.getLikelihoodExpression().check(identifierToTypeMap); } catch (storm::exceptions::InvalidTypeException const& e) { - LOG_THROW(false, storm::exceptions::WrongFormatException, "Error in " << command.getFilename() << ", line " << command.getLineNumber() << ": " << e.what()); + STORM_LOG_THROW(false, storm::exceptions::WrongFormatException, "Error in " << command.getFilename() << ", line " << command.getLineNumber() << ": " << e.what()); } // Check all assignments. @@ -537,22 +537,22 @@ namespace storm { for (auto const& assignment : update.getAssignments()) { if (legalIdentifiers.find(assignment.getVariableName()) == legalIdentifiers.end()) { if (allIdentifiers.find(assignment.getVariableName()) != allIdentifiers.end()) { - LOG_THROW(false, storm::exceptions::WrongFormatException, "Error in " << command.getFilename() << ", line " << command.getLineNumber() << ": assignment illegally refers to variable '" << assignment.getVariableName() << "'."); + STORM_LOG_THROW(false, storm::exceptions::WrongFormatException, "Error in " << command.getFilename() << ", line " << command.getLineNumber() << ": assignment illegally refers to variable '" << assignment.getVariableName() << "'."); } else { - LOG_THROW(false, storm::exceptions::WrongFormatException, "Error in " << command.getFilename() << ", line " << command.getLineNumber() << ": assignment refers to unknown variable '" << assignment.getVariableName() << "'."); + STORM_LOG_THROW(false, storm::exceptions::WrongFormatException, "Error in " << command.getFilename() << ", line " << command.getLineNumber() << ": assignment refers to unknown variable '" << assignment.getVariableName() << "'."); } } - LOG_THROW(alreadyAssignedIdentifiers.find(assignment.getVariableName()) == alreadyAssignedIdentifiers.end(), storm::exceptions::WrongFormatException, "Error in " << command.getFilename() << ", line " << command.getLineNumber() << ": duplicate assignment to variable '" << assignment.getVariableName() << "'."); + STORM_LOG_THROW(alreadyAssignedIdentifiers.find(assignment.getVariableName()) == alreadyAssignedIdentifiers.end(), storm::exceptions::WrongFormatException, "Error in " << command.getFilename() << ", line " << command.getLineNumber() << ": duplicate assignment to variable '" << assignment.getVariableName() << "'."); auto variableTypePair = identifierToTypeMap.find(assignment.getVariableName()); - LOG_THROW(variableTypePair->second == assignment.getExpression().getReturnType(), storm::exceptions::WrongFormatException, "Error in " << command.getFilename() << ", line " << command.getLineNumber() << ": illegally assigning a value of type '" << assignment.getExpression().getReturnType() << "' to variable '" << variableTypePair->first << "' of type '" << variableTypePair->second << "'."); + STORM_LOG_THROW(variableTypePair->second == assignment.getExpression().getReturnType(), storm::exceptions::WrongFormatException, "Error in " << command.getFilename() << ", line " << command.getLineNumber() << ": illegally assigning a value of type '" << assignment.getExpression().getReturnType() << "' to variable '" << variableTypePair->first << "' of type '" << variableTypePair->second << "'."); containedIdentifiers = assignment.getExpression().getVariables(); isValid = std::includes(variablesAndConstants.begin(), variablesAndConstants.end(), containedIdentifiers.begin(), containedIdentifiers.end()); - LOG_THROW(isValid, storm::exceptions::WrongFormatException, "Error in " << command.getFilename() << ", line " << command.getLineNumber() << ": likelihood expression refers to unknown identifiers."); + STORM_LOG_THROW(isValid, storm::exceptions::WrongFormatException, "Error in " << command.getFilename() << ", line " << command.getLineNumber() << ": likelihood expression refers to unknown identifiers."); try { assignment.getExpression().check(identifierToTypeMap); } catch (storm::exceptions::InvalidTypeException const& e) { - LOG_THROW(false, storm::exceptions::WrongFormatException, "Error in " << command.getFilename() << ", line " << command.getLineNumber() << ": " << e.what()); + STORM_LOG_THROW(false, storm::exceptions::WrongFormatException, "Error in " << command.getFilename() << ", line " << command.getLineNumber() << ": " << e.what()); } // Add the current variable to the set of assigned variables (of this update). @@ -567,87 +567,87 @@ namespace storm { for (auto const& stateReward : rewardModel.getStateRewards()) { std::set<std::string> containedIdentifiers = stateReward.getStatePredicateExpression().getVariables(); bool isValid = std::includes(variablesAndConstants.begin(), variablesAndConstants.end(), containedIdentifiers.begin(), containedIdentifiers.end()); - LOG_THROW(isValid, storm::exceptions::WrongFormatException, "Error in " << stateReward.getFilename() << ", line " << stateReward.getLineNumber() << ": state reward expression refers to unknown identifiers."); + STORM_LOG_THROW(isValid, storm::exceptions::WrongFormatException, "Error in " << stateReward.getFilename() << ", line " << stateReward.getLineNumber() << ": state reward expression refers to unknown identifiers."); try { stateReward.getStatePredicateExpression().check(identifierToTypeMap); } catch (storm::exceptions::InvalidTypeException const& e) { - LOG_THROW(false, storm::exceptions::WrongFormatException, "Error in " << stateReward.getFilename() << ", line " << stateReward.getLineNumber() << ": " << e.what()); + STORM_LOG_THROW(false, storm::exceptions::WrongFormatException, "Error in " << stateReward.getFilename() << ", line " << stateReward.getLineNumber() << ": " << e.what()); } - LOG_THROW(stateReward.getStatePredicateExpression().hasBooleanReturnType(), storm::exceptions::WrongFormatException, "Error in " << stateReward.getFilename() << ", line " << stateReward.getLineNumber() << ": state predicate must evaluate to type 'bool'."); + STORM_LOG_THROW(stateReward.getStatePredicateExpression().hasBooleanReturnType(), storm::exceptions::WrongFormatException, "Error in " << stateReward.getFilename() << ", line " << stateReward.getLineNumber() << ": state predicate must evaluate to type 'bool'."); containedIdentifiers = stateReward.getRewardValueExpression().getVariables(); isValid = std::includes(variablesAndConstants.begin(), variablesAndConstants.end(), containedIdentifiers.begin(), containedIdentifiers.end()); - LOG_THROW(isValid, storm::exceptions::WrongFormatException, "Error in " << stateReward.getFilename() << ", line " << stateReward.getLineNumber() << ": state reward value expression refers to unknown identifiers."); + STORM_LOG_THROW(isValid, storm::exceptions::WrongFormatException, "Error in " << stateReward.getFilename() << ", line " << stateReward.getLineNumber() << ": state reward value expression refers to unknown identifiers."); try { stateReward.getRewardValueExpression().check(identifierToTypeMap); } catch (storm::exceptions::InvalidTypeException const& e) { - LOG_THROW(false, storm::exceptions::WrongFormatException, "Error in " << stateReward.getFilename() << ", line " << stateReward.getLineNumber() << ": " << e.what()); + STORM_LOG_THROW(false, storm::exceptions::WrongFormatException, "Error in " << stateReward.getFilename() << ", line " << stateReward.getLineNumber() << ": " << e.what()); } - LOG_THROW(stateReward.getRewardValueExpression().hasNumericalReturnType(), storm::exceptions::WrongFormatException, "Error in " << stateReward.getFilename() << ", line " << stateReward.getLineNumber() << ": reward value expression must evaluate to numerical type."); + STORM_LOG_THROW(stateReward.getRewardValueExpression().hasNumericalReturnType(), storm::exceptions::WrongFormatException, "Error in " << stateReward.getFilename() << ", line " << stateReward.getLineNumber() << ": reward value expression must evaluate to numerical type."); } for (auto const& transitionReward : rewardModel.getTransitionRewards()) { std::set<std::string> containedIdentifiers = transitionReward.getStatePredicateExpression().getVariables(); bool isValid = std::includes(variablesAndConstants.begin(), variablesAndConstants.end(), containedIdentifiers.begin(), containedIdentifiers.end()); - LOG_THROW(isValid, storm::exceptions::WrongFormatException, "Error in " << transitionReward.getFilename() << ", line " << transitionReward.getLineNumber() << ": state reward expression refers to unknown identifiers."); + STORM_LOG_THROW(isValid, storm::exceptions::WrongFormatException, "Error in " << transitionReward.getFilename() << ", line " << transitionReward.getLineNumber() << ": state reward expression refers to unknown identifiers."); try { transitionReward.getStatePredicateExpression().check(identifierToTypeMap); } catch (storm::exceptions::InvalidTypeException const& e) { - LOG_THROW(false, storm::exceptions::WrongFormatException, "Error in " << transitionReward.getFilename() << ", line " << transitionReward.getLineNumber() << ": " << e.what()); + STORM_LOG_THROW(false, storm::exceptions::WrongFormatException, "Error in " << transitionReward.getFilename() << ", line " << transitionReward.getLineNumber() << ": " << e.what()); } - LOG_THROW(transitionReward.getStatePredicateExpression().hasBooleanReturnType(), storm::exceptions::WrongFormatException, "Error in " << transitionReward.getFilename() << ", line " << transitionReward.getLineNumber() << ": state predicate must evaluate to type 'bool'."); + STORM_LOG_THROW(transitionReward.getStatePredicateExpression().hasBooleanReturnType(), storm::exceptions::WrongFormatException, "Error in " << transitionReward.getFilename() << ", line " << transitionReward.getLineNumber() << ": state predicate must evaluate to type 'bool'."); containedIdentifiers = transitionReward.getRewardValueExpression().getVariables(); isValid = std::includes(variablesAndConstants.begin(), variablesAndConstants.end(), containedIdentifiers.begin(), containedIdentifiers.end()); - LOG_THROW(isValid, storm::exceptions::WrongFormatException, "Error in " << transitionReward.getFilename() << ", line " << transitionReward.getLineNumber() << ": state reward value expression refers to unknown identifiers."); + STORM_LOG_THROW(isValid, storm::exceptions::WrongFormatException, "Error in " << transitionReward.getFilename() << ", line " << transitionReward.getLineNumber() << ": state reward value expression refers to unknown identifiers."); try { transitionReward.getRewardValueExpression().check(identifierToTypeMap); } catch (storm::exceptions::InvalidTypeException const& e) { - LOG_THROW(false, storm::exceptions::WrongFormatException, "Error in " << transitionReward.getFilename() << ", line " << transitionReward.getLineNumber() << ": " << e.what()); + STORM_LOG_THROW(false, storm::exceptions::WrongFormatException, "Error in " << transitionReward.getFilename() << ", line " << transitionReward.getLineNumber() << ": " << e.what()); } - LOG_THROW(transitionReward.getRewardValueExpression().hasNumericalReturnType(), storm::exceptions::WrongFormatException, "Error in " << transitionReward.getFilename() << ", line " << transitionReward.getLineNumber() << ": reward value expression must evaluate to numerical type."); + STORM_LOG_THROW(transitionReward.getRewardValueExpression().hasNumericalReturnType(), storm::exceptions::WrongFormatException, "Error in " << transitionReward.getFilename() << ", line " << transitionReward.getLineNumber() << ": reward value expression must evaluate to numerical type."); } } // Check the initial states expression. std::set<std::string> containedIdentifiers = this->getInitialConstruct().getInitialStatesExpression().getVariables(); bool isValid = std::includes(variablesAndConstants.begin(), variablesAndConstants.end(), containedIdentifiers.begin(), containedIdentifiers.end()); - LOG_THROW(isValid, storm::exceptions::WrongFormatException, "Error in " << this->getInitialConstruct().getFilename() << ", line " << this->getInitialConstruct().getLineNumber() << ": initial expression refers to unknown identifiers."); + STORM_LOG_THROW(isValid, storm::exceptions::WrongFormatException, "Error in " << this->getInitialConstruct().getFilename() << ", line " << this->getInitialConstruct().getLineNumber() << ": initial expression refers to unknown identifiers."); try { this->getInitialConstruct().getInitialStatesExpression().check(identifierToTypeMap); } catch (storm::exceptions::InvalidTypeException const& e) { - LOG_THROW(false, storm::exceptions::WrongFormatException, "Error in " << this->getInitialConstruct().getFilename() << ", line " << this->getInitialConstruct().getLineNumber() << ": " << e.what()); + STORM_LOG_THROW(false, storm::exceptions::WrongFormatException, "Error in " << this->getInitialConstruct().getFilename() << ", line " << this->getInitialConstruct().getLineNumber() << ": " << e.what()); } // Check the labels. for (auto const& label : this->getLabels()) { // Check for duplicate identifiers. - LOG_THROW(allIdentifiers.find(label.getName()) == allIdentifiers.end(), storm::exceptions::WrongFormatException, "Error in " << label.getFilename() << ", line " << label.getLineNumber() << ": duplicate identifier '" << label.getName() << "'."); + STORM_LOG_THROW(allIdentifiers.find(label.getName()) == allIdentifiers.end(), storm::exceptions::WrongFormatException, "Error in " << label.getFilename() << ", line " << label.getLineNumber() << ": duplicate identifier '" << label.getName() << "'."); std::set<std::string> containedIdentifiers = label.getStatePredicateExpression().getVariables(); bool isValid = std::includes(variablesAndConstants.begin(), variablesAndConstants.end(), containedIdentifiers.begin(), containedIdentifiers.end()); - LOG_THROW(isValid, storm::exceptions::WrongFormatException, "Error in " << label.getFilename() << ", line " << label.getLineNumber() << ": label expression refers to unknown identifiers."); + STORM_LOG_THROW(isValid, storm::exceptions::WrongFormatException, "Error in " << label.getFilename() << ", line " << label.getLineNumber() << ": label expression refers to unknown identifiers."); try { label.getStatePredicateExpression().check(identifierToTypeMap); } catch (storm::exceptions::InvalidTypeException const& e) { - LOG_THROW(false, storm::exceptions::WrongFormatException, "Error in " << label.getFilename() << ", line " << label.getLineNumber() << ": " << e.what()); + STORM_LOG_THROW(false, storm::exceptions::WrongFormatException, "Error in " << label.getFilename() << ", line " << label.getLineNumber() << ": " << e.what()); } - LOG_THROW(label.getStatePredicateExpression().hasBooleanReturnType(), storm::exceptions::WrongFormatException, "Error in " << label.getFilename() << ", line " << label.getLineNumber() << ": label predicate must evaluate to type 'bool'."); + STORM_LOG_THROW(label.getStatePredicateExpression().hasBooleanReturnType(), storm::exceptions::WrongFormatException, "Error in " << label.getFilename() << ", line " << label.getLineNumber() << ": label predicate must evaluate to type 'bool'."); } // Check the formulas. for (auto const& formula : this->getFormulas()) { // Check for duplicate identifiers. - LOG_THROW(allIdentifiers.find(formula.getName()) == allIdentifiers.end(), storm::exceptions::WrongFormatException, "Error in " << formula.getFilename() << ", line " << formula.getLineNumber() << ": duplicate identifier '" << formula.getName() << "'."); + STORM_LOG_THROW(allIdentifiers.find(formula.getName()) == allIdentifiers.end(), storm::exceptions::WrongFormatException, "Error in " << formula.getFilename() << ", line " << formula.getLineNumber() << ": duplicate identifier '" << formula.getName() << "'."); std::set<std::string> containedIdentifiers = formula.getExpression().getVariables(); bool isValid = std::includes(variablesAndConstants.begin(), variablesAndConstants.end(), containedIdentifiers.begin(), containedIdentifiers.end()); - LOG_THROW(isValid, storm::exceptions::WrongFormatException, "Error in " << formula.getFilename() << ", line " << formula.getLineNumber() << ": formula expression refers to unknown identifiers."); + STORM_LOG_THROW(isValid, storm::exceptions::WrongFormatException, "Error in " << formula.getFilename() << ", line " << formula.getLineNumber() << ": formula expression refers to unknown identifiers."); try { formula.getExpression().check(identifierToTypeMap); } catch (storm::exceptions::InvalidTypeException const& e) { - LOG_THROW(false, storm::exceptions::WrongFormatException, "Error in " << formula.getFilename() << ", line " << formula.getLineNumber() << ": " << e.what()); + STORM_LOG_THROW(false, storm::exceptions::WrongFormatException, "Error in " << formula.getFilename() << ", line " << formula.getLineNumber() << ": " << e.what()); } // Record the new identifier for future checks. diff --git a/src/storage/prism/Update.cpp b/src/storage/prism/Update.cpp index 9082bc6f1..c2fb2ccf5 100644 --- a/src/storage/prism/Update.cpp +++ b/src/storage/prism/Update.cpp @@ -1,5 +1,5 @@ #include "Update.h" -#include "src/exceptions/ExceptionMacros.h" +#include "src/utility/macros.h" #include "src/exceptions/OutOfRangeException.h" namespace storm { @@ -22,7 +22,7 @@ namespace storm { storm::prism::Assignment const& Update::getAssignment(std::string const& variableName) const { auto const& variableIndexPair = this->variableToAssignmentIndexMap.find(variableName); - LOG_THROW(variableIndexPair != this->variableToAssignmentIndexMap.end(), storm::exceptions::OutOfRangeException, "Variable '" << variableName << "' is not assigned in update."); + STORM_LOG_THROW(variableIndexPair != this->variableToAssignmentIndexMap.end(), storm::exceptions::OutOfRangeException, "Variable '" << variableName << "' is not assigned in update."); return this->getAssignments()[variableIndexPair->second]; } diff --git a/src/storm.cpp b/src/storm.cpp index 502e28c93..6b84773b2 100644 --- a/src/storm.cpp +++ b/src/storm.cpp @@ -1,328 +1,29 @@ - -/* - * STORM - a C++ Rebuild of MRMC - * - * STORM (Stochastic Reward Model Checker) is a model checker for discrete-time and continuous-time Markov - * reward models. It supports reward extensions of PCTL and CSL (PRCTL - * and CSRL), and allows for the automated verification of properties - * concerning long-run and instantaneous rewards as well as cumulative - * rewards. - * - * Authors: Philipp Berger - * - * Description: Central part of the application containing the main() Method - */ - -#include "src/utility/Initialize.h" -#include <fstream> -#include <cstdio> -#include <climits> -#include <sstream> -#include <vector> -#include <chrono> -#include <iostream> -#include <iomanip> - - - - +// Include generated headers. #include "storm-config.h" #include "storm-version.h" -#include "src/models/Dtmc.h" -#include "src/models/MarkovAutomaton.h" -#include "src/storage/SparseMatrix.h" -#include "src/storage/MaximalEndComponentDecomposition.h" -#include "src/modelchecker/csl/SparseMarkovAutomatonCslModelChecker.h" -#include "src/models/AtomicPropositionsLabeling.h" -#include "src/modelchecker/prctl/CreatePrctlModelChecker.h" -#include "src/modelchecker/prctl/SparseDtmcPrctlModelChecker.h" -#include "src/modelchecker/prctl/SparseMdpPrctlModelChecker.h" -#include "src/modelchecker/reachability/SparseSccModelChecker.h" -#include "src/solver/GmmxxLinearEquationSolver.h" -#include "src/solver/NativeLinearEquationSolver.h" -#include "src/solver/GmmxxNondeterministicLinearEquationSolver.h" -#include "src/solver/GurobiLpSolver.h" -// #include "src/counterexamples/GenerateCounterexample.h" -#include "src/counterexamples/MILPMinimalLabelSetGenerator.h" -#include "src/counterexamples/SMTMinimalCommandSetGenerator.h" -#include "src/counterexamples/PathBasedSubsystemGenerator.h" -#include "src/parser/AutoParser.h" -#include "src/parser/MarkovAutomatonParser.h" -#include "src/parser/PrctlParser.h" -#include "src/utility/ErrorHandling.h" -#include "src/properties/Prctl.h" -#include "src/utility/vector.h" -#include "src/utility/CLI.h" - - -#include "src/parser/PrctlFileParser.h" -#include "src/parser/LtlFileParser.h" - -#include "src/parser/PrismParser.h" -#include "src/adapters/ExplicitModelAdapter.h" -// #include "src/adapters/SymbolicModelAdapter.h" - -#include "src/exceptions/InvalidSettingsException.h" - - +// Include other headers. +#include "src/exceptions/BaseException.h" +#include "src/utility/macros.h" +#include "src/utility/cli.h" /*! - * Checks the PRCTL formulae provided on the command line on the given model checker. - * - * @param modelchecker The model checker that is to be invoked on all given formulae. + * Main entry point of the executable storm. */ -void checkPrctlFormulae(storm::modelchecker::prctl::AbstractModelChecker<double> const& modelchecker) { - storm::settings::modules::GeneralSettings const& settings = storm::settings::generalSettings(); - if (settings.isPctlSet()) { - std::string chosenPrctlFile = settings.getPctlPropertiesFilename(); - LOG4CPLUS_INFO(logger, "Parsing prctl file: " << chosenPrctlFile << "."); - std::list<std::shared_ptr<storm::properties::prctl::PrctlFilter<double>>> formulaList = storm::parser::PrctlFileParser::parsePrctlFile(chosenPrctlFile); +int main(const int argc, const char** argv) { + try { + storm::utility::cli::setUp(); + storm::utility::cli::printHeader(argc, argv); + storm::utility::cli::parseOptions(argc, argv); - for (auto formula : formulaList) { - std::chrono::high_resolution_clock::time_point startTime = std::chrono::high_resolution_clock::now(); - formula->check(modelchecker); - std::chrono::high_resolution_clock::time_point endTime = std::chrono::high_resolution_clock::now(); - std::cout << "Checking the formula took " << std::chrono::duration_cast<std::chrono::milliseconds>(endTime - startTime).count() << "ms." << std::endl; - } - } -} - -/*! - * Main entry point. - */ -int main(const int argc, const char* argv[]) { - // Register a signal handler to catch signals and display a backtrace. - installSignalHandler(); - - // Print an information header. - printHeader(argc, argv); - - // Initialize the logging engine and perform other initalizations. - initializeLogger(); - setUp(); - -// try { - LOG4CPLUS_INFO(logger, "StoRM was invoked."); - - // Parse options. - if (!parseOptions(argc, argv)) { - // If parsing failed or the option to see the usage was set, program execution stops here. - return 0; - } - - storm::settings::modules::GeneralSettings settings = storm::settings::generalSettings(); - - // If requested by the user, we install a timeout signal to abort computation. - if (settings.isTimeoutSet()) { - stormSetAlarm(settings.getTimeoutInSeconds()); - } - - // Execution Time measurement, start - std::chrono::high_resolution_clock::time_point executionStart = std::chrono::high_resolution_clock::now(); - - // Now, the settings are received and the specified model is parsed. The actual actions taken depend on whether - // the model was provided in explicit or symbolic format. - if (settings.isExplicitSet()) { - std::string const chosenTransitionSystemFile = settings.getTransitionFilename(); - std::string const chosenLabelingFile = settings.getLabelingFilename(); - - std::string chosenStateRewardsFile = ""; - if (settings.isStateRewardsSet()) { - chosenStateRewardsFile = settings.getStateRewardsFilename(); - } - std::string chosenTransitionRewardsFile = ""; - if (settings.isTransitionRewardsSet()) { - chosenTransitionRewardsFile = settings.getTransitionRewardsFilename(); - } - - std::shared_ptr<storm::models::AbstractModel<double>> model = storm::parser::AutoParser::parseModel(chosenTransitionSystemFile, chosenLabelingFile, chosenStateRewardsFile, chosenTransitionRewardsFile); - - // Model Parsing Time Measurement, End - std::chrono::high_resolution_clock::time_point parsingEnd = std::chrono::high_resolution_clock::now(); - std::cout << "Parsing the given model took " << std::chrono::duration_cast<std::chrono::milliseconds>(parsingEnd - executionStart).count() << " milliseconds." << std::endl; - - if (settings.isExportDotSet()) { - std::ofstream outputFileStream; - outputFileStream.open(settings.getExportDotFilename(), std::ofstream::out); - model->writeDotToStream(outputFileStream); - outputFileStream.close(); - } - - // Should there be a counterexample generated in case the formula is not satisfied? - if(settings.isCounterexampleSet()) { - // Counterexample Time Measurement, Start - std::chrono::high_resolution_clock::time_point counterexampleStart = std::chrono::high_resolution_clock::now(); - - // generateCounterExample(model); - - // Counterexample Time Measurement, End - std::chrono::high_resolution_clock::time_point counterexampleEnd = std::chrono::high_resolution_clock::now(); - std::cout << "Generating the counterexample took " << std::chrono::duration_cast<std::chrono::milliseconds>(counterexampleEnd - counterexampleStart).count() << " milliseconds." << std::endl; - } else { - // Depending on the model type, the appropriate model checking procedure is chosen. - storm::modelchecker::prctl::AbstractModelChecker<double>* modelchecker = nullptr; - model->printModelInformationToStream(std::cout); - - // Modelchecking Time Measurement, Start - std::chrono::high_resolution_clock::time_point modelcheckingStart = std::chrono::high_resolution_clock::now(); - - switch (model->getType()) { - case storm::models::DTMC: - LOG4CPLUS_INFO(logger, "Model is a DTMC."); - modelchecker = createPrctlModelChecker(*model->as<storm::models::Dtmc<double>>()); - checkPrctlFormulae(*modelchecker); - break; - case storm::models::MDP: - LOG4CPLUS_INFO(logger, "Model is an MDP."); - modelchecker = createPrctlModelChecker(*model->as<storm::models::Mdp<double>>()); - checkPrctlFormulae(*modelchecker); - break; - case storm::models::CTMC: - LOG4CPLUS_INFO(logger, "Model is a CTMC."); - LOG4CPLUS_ERROR(logger, "The selected model type is not supported."); - break; - case storm::models::CTMDP: - LOG4CPLUS_INFO(logger, "Model is a CTMDP."); - LOG4CPLUS_ERROR(logger, "The selected model type is not supported."); - break; - case storm::models::MA: { - LOG4CPLUS_INFO(logger, "Model is a Markov automaton."); - storm::models::MarkovAutomaton<double> markovAutomaton = *model->as<storm::models::MarkovAutomaton<double>>(); - markovAutomaton.close(); - storm::modelchecker::csl::SparseMarkovAutomatonCslModelChecker<double> mc(markovAutomaton); -// std::cout << mc.checkExpectedTime(true, markovAutomaton->getLabeledStates("goal")) << std::endl; -// std::cout << mc.checkExpectedTime(false, markovAutomaton->getLabeledStates("goal")) << std::endl; - std::cout << mc.checkLongRunAverage(true, markovAutomaton.getLabeledStates("goal")) << std::endl; - std::cout << mc.checkLongRunAverage(false, markovAutomaton.getLabeledStates("goal")) << std::endl; -// std::cout << mc.checkTimeBoundedEventually(true, markovAutomaton->getLabeledStates("goal"), 0, 1) << std::endl; -// std::cout << mc.checkTimeBoundedEventually(true, markovAutomaton->getLabeledStates("goal"), 1, 2) << std::endl; - break; - } - case storm::models::Unknown: - default: - LOG4CPLUS_ERROR(logger, "The model type could not be determined correctly."); - break; - } - - if (modelchecker != nullptr) { - delete modelchecker; - } - - // Modelchecking Time Measurement, End - std::chrono::high_resolution_clock::time_point modelcheckingEnd = std::chrono::high_resolution_clock::now(); - std::cout << "Running the ModelChecker took " << std::chrono::duration_cast<std::chrono::milliseconds>(modelcheckingEnd - modelcheckingStart).count() << " milliseconds." << std::endl; - } - } else if (settings.isSymbolicSet()) { - // Program Translation Time Measurement, Start - std::chrono::high_resolution_clock::time_point programTranslationStart = std::chrono::high_resolution_clock::now(); - - // First, we build the model using the given symbolic model description and constant definitions. - std::string const& programFile = settings.getSymbolicModelFilename(); - std::string const& constants = settings.getConstantDefinitionString(); - storm::prism::Program program = storm::parser::PrismParser::parse(programFile); - std::shared_ptr<storm::models::AbstractModel<double>> model = storm::adapters::ExplicitModelAdapter<double>::translateProgram(program, constants); - model->printModelInformationToStream(std::cout); - - // Program Translation Time Measurement, End - std::chrono::high_resolution_clock::time_point programTranslationEnd = std::chrono::high_resolution_clock::now(); - std::cout << "Parsing and translating the Symbolic Input took " << std::chrono::duration_cast<std::chrono::milliseconds>(programTranslationEnd - programTranslationStart).count() << " milliseconds." << std::endl; - - storm::modelchecker::reachability::SparseSccModelChecker<double> modelChecker; - storm::storage::BitVector trueStates(model->getNumberOfStates(), true); - storm::storage::BitVector targetStates = model->getLabeledStates("observe0Greater1"); -// storm::storage::BitVector targetStates = model->getLabeledStates("one"); -// storm::storage::BitVector targetStates = model->getLabeledStates("elected"); - double value = modelChecker.computeReachabilityProbability(*model->as<storm::models::Dtmc<double>>(), trueStates, targetStates); - std::cout << "computed value " << value << std::endl; - - if (storm::settings::counterexampleGeneratorSettings().isMinimalCommandGenerationSet()) { - if (model->getType() != storm::models::MDP) { - LOG4CPLUS_ERROR(logger, "Minimal command counterexample generation is only supported for models of type MDP."); - throw storm::exceptions::InternalTypeErrorException() << "Minimal command counterexample generation is only supported for models of type MDP."; - } - - std::shared_ptr<storm::models::Mdp<double>> mdp = model->as<storm::models::Mdp<double>>(); - - // Determine whether we are required to use the MILP-version or the SAT-version. - bool useMILP = storm::settings::counterexampleGeneratorSettings().isUseMilpBasedMinimalCommandSetGenerationSet(); - - // MinCMD Time Measurement, Start - std::chrono::high_resolution_clock::time_point minCmdStart = std::chrono::high_resolution_clock::now(); - - // Now parse the property file and receive the list of parsed formulas. - std::string const& propertyFile = storm::settings::generalSettings().getPctlPropertiesFilename(); - std::list<std::shared_ptr<storm::properties::prctl::PrctlFilter<double>>> formulaList = storm::parser::PrctlFileParser::parsePrctlFile(propertyFile); - - // Now generate the counterexamples for each formula. - for (auto formulaPtr : formulaList) { - if (useMILP) { - storm::counterexamples::MILPMinimalLabelSetGenerator<double>::computeCounterexample(program, *mdp, formulaPtr->getChild()); - } else { - // storm::counterexamples::SMTMinimalCommandSetGenerator<double>::computeCounterexample(program, constants, *mdp, formulaPtr->getChild()); - } - } - - // MinCMD Time Measurement, End - std::chrono::high_resolution_clock::time_point minCmdEnd = std::chrono::high_resolution_clock::now(); - std::cout << "Minimal command Counterexample generation took " << std::chrono::duration_cast<std::chrono::milliseconds>(minCmdEnd - minCmdStart).count() << " milliseconds." << std::endl; - } else if (settings.isPctlSet()) { -// // Depending on the model type, the appropriate model checking procedure is chosen. -// storm::modelchecker::prctl::AbstractModelChecker<double>* modelchecker = nullptr; -// - // Modelchecking Time Measurement, Start - std::chrono::high_resolution_clock::time_point modelcheckingStart = std::chrono::high_resolution_clock::now(); -// -// switch (model->getType()) { -// case storm::models::DTMC: -// LOG4CPLUS_INFO(logger, "Model is a DTMC."); -// modelchecker = createPrctlModelChecker(*model->as<storm::models::Dtmc<double>>()); -// checkPrctlFormulae(*modelchecker); -// break; -// case storm::models::MDP: -// LOG4CPLUS_INFO(logger, "Model is an MDP."); -// modelchecker = createPrctlModelChecker(*model->as<storm::models::Mdp<double>>()); -// checkPrctlFormulae(*modelchecker); -// break; -// case storm::models::CTMC: -// LOG4CPLUS_INFO(logger, "Model is a CTMC."); -// LOG4CPLUS_ERROR(logger, "The selected model type is not supported."); -// break; -// case storm::models::CTMDP: -// LOG4CPLUS_INFO(logger, "Model is a CTMDP."); -// LOG4CPLUS_ERROR(logger, "The selected model type is not supported."); -// break; -// case storm::models::MA: -// LOG4CPLUS_INFO(logger, "Model is a Markov automaton."); -// break; -// case storm::models::Unknown: -// default: -// LOG4CPLUS_ERROR(logger, "The model type could not be determined correctly."); -// break; -// } -// -// if (modelchecker != nullptr) { -// delete modelchecker; -// } - - // Modelchecking Time Measurement, End - std::chrono::high_resolution_clock::time_point modelcheckingEnd = std::chrono::high_resolution_clock::now(); - std::cout << "Running the PRCTL ModelChecker took " << std::chrono::duration_cast<std::chrono::milliseconds>(modelcheckingEnd - modelcheckingStart).count() << " milliseconds." << std::endl; - } - } - - // Execution Time Measurement, End - std::chrono::high_resolution_clock::time_point executionEnd = std::chrono::high_resolution_clock::now(); - std::cout << "Complete execution took " << std::chrono::duration_cast<std::chrono::milliseconds>(executionEnd - executionStart).count() << " milliseconds." << std::endl; + // From this point on we are ready to carry out the actual computations. + storm::utility::cli::processOptions(); - // Perform clean-up and terminate. - cleanUp(); - printUsage(); - LOG4CPLUS_INFO(logger, "StoRM terminating."); - return 0; -// } catch (std::exception& e) { -// LOG4CPLUS_FATAL(logger, "An exception was thrown. Terminating."); -// LOG4CPLUS_FATAL(logger, "\t" << e.what()); -// } - return 1; + // All operations have now been performed, so we clean up everything and terminate. + storm::utility::cli::cleanUp(); + } catch (storm::exceptions::BaseException const& exception) { + STORM_LOG_ERROR("An exception caused StoRM to terminate. The message of the exception is " << exception.what()); + } catch (std::exception const& exception) { + STORM_LOG_ERROR("An unexpected exception occurred and caused StoRM to terminate. The message of this exception is: " << exception.what()); + } } diff --git a/src/utility/CLI.h b/src/utility/CLI.h deleted file mode 100644 index a94caa94a..000000000 --- a/src/utility/CLI.h +++ /dev/null @@ -1,166 +0,0 @@ -#ifndef STORM_UTILITY_CLI_H_ -#define STORM_UTILITY_CLI_H_ - -#include <iostream> -#include <fstream> -#include <cstdio> -#include <sstream> - - -#include "src/utility/OsDetection.h" - -// Includes for the linked libraries and versions header -#ifdef STORM_HAVE_INTELTBB -# include "tbb/tbb_stddef.h" -#endif -#ifdef STORM_HAVE_GLPK -# include "glpk.h" -#endif -#ifdef STORM_HAVE_GUROBI -# include "gurobi_c.h" -#endif -#ifdef STORM_HAVE_Z3 -# include "z3.h" -#endif - -/*! -* Gives the current working directory -* -* @return std::string The path of the current working directory -*/ -std::string getCurrentWorkingDirectory() { - char temp[512]; - return (GetCurrentDir(temp, 512 - 1) ? std::string(temp) : std::string("")); -} - - -void printUsage() { -#ifndef WINDOWS - struct rusage ru; - getrusage(RUSAGE_SELF, &ru); - - std::cout << "===== Statistics ==============================" << std::endl; - std::cout << "peak memory usage: " << ru.ru_maxrss/1024/1024 << "MB" << std::endl; - std::cout << "CPU time: " << ru.ru_utime.tv_sec << "." << std::setw(3) << std::setfill('0') << ru.ru_utime.tv_usec/1000 << " seconds" << std::endl; - std::cout << "===============================================" << std::endl; -#else - HANDLE hProcess = GetCurrentProcess (); - FILETIME ftCreation, ftExit, ftUser, ftKernel; - PROCESS_MEMORY_COUNTERS pmc; - if (GetProcessMemoryInfo( hProcess, &pmc, sizeof(pmc))) { - std::cout << "Memory Usage: " << std::endl; - std::cout << "\tPageFaultCount: " << pmc.PageFaultCount << std::endl; - std::cout << "\tPeakWorkingSetSize: " << pmc.PeakWorkingSetSize << std::endl; - std::cout << "\tWorkingSetSize: " << pmc.WorkingSetSize << std::endl; - std::cout << "\tQuotaPeakPagedPoolUsage: " << pmc.QuotaPeakPagedPoolUsage << std::endl; - std::cout << "\tQuotaPagedPoolUsage: " << pmc.QuotaPagedPoolUsage << std::endl; - std::cout << "\tQuotaPeakNonPagedPoolUsage: " << pmc.QuotaPeakNonPagedPoolUsage << std::endl; - std::cout << "\tQuotaNonPagedPoolUsage: " << pmc.QuotaNonPagedPoolUsage << std::endl; - std::cout << "\tPagefileUsage:" << pmc.PagefileUsage << std::endl; - std::cout << "\tPeakPagefileUsage: " << pmc.PeakPagefileUsage << std::endl; - } - - GetProcessTimes (hProcess, &ftCreation, &ftExit, &ftKernel, &ftUser); - - ULARGE_INTEGER uLargeInteger; - uLargeInteger.LowPart = ftKernel.dwLowDateTime; - uLargeInteger.HighPart = ftKernel.dwHighDateTime; - double kernelTime = static_cast<double>(uLargeInteger.QuadPart) / 10000.0; // 100 ns Resolution to milliseconds - uLargeInteger.LowPart = ftUser.dwLowDateTime; - uLargeInteger.HighPart = ftUser.dwHighDateTime; - double userTime = static_cast<double>(uLargeInteger.QuadPart) / 10000.0; - - std::cout << "CPU Time: " << std::endl; - std::cout << "\tKernel Time: " << std::setprecision(5) << kernelTime << "ms" << std::endl; - std::cout << "\tUser Time: " << std::setprecision(5) << userTime << "ms" << std::endl; -#endif -} - - - -/*! - * Prints the header. - */ -void printHeader(const int argc, const char* argv[]) { - std::cout << "StoRM" << std::endl; - std::cout << "-----" << std::endl << std::endl; - - std::cout << "Version: " << STORM_CPP_VERSION_MAJOR << "." << STORM_CPP_VERSION_MINOR << "." << STORM_CPP_VERSION_PATCH; - if (STORM_CPP_VERSION_COMMITS_AHEAD != 0) { - std::cout << " (+" << STORM_CPP_VERSION_COMMITS_AHEAD << " commits)"; - } - std::cout << " build from revision " << STORM_CPP_VERSION_HASH; - if (STORM_CPP_VERSION_DIRTY == 1) { - std::cout << " (DIRTY)"; - } - std::cout << "." << std::endl; - -#ifdef STORM_HAVE_INTELTBB - std::cout << "Linked with Intel Threading Building Blocks v" << TBB_VERSION_MAJOR << "." << TBB_VERSION_MINOR << " (Interface version " << TBB_INTERFACE_VERSION << ")." << std::endl; -#endif -#ifdef STORM_HAVE_GLPK - std::cout << "Linked with GNU Linear Programming Kit v" << GLP_MAJOR_VERSION << "." << GLP_MINOR_VERSION << "." << std::endl; -#endif -#ifdef STORM_HAVE_GUROBI - std::cout << "Linked with Gurobi Optimizer v" << GRB_VERSION_MAJOR << "." << GRB_VERSION_MINOR << "." << GRB_VERSION_TECHNICAL << "." << std::endl; -#endif -#ifdef STORM_HAVE_Z3 - unsigned int z3Major, z3Minor, z3BuildNumber, z3RevisionNumber; - Z3_get_version(&z3Major, &z3Minor, &z3BuildNumber, &z3RevisionNumber); - std::cout << "Linked with Microsoft Z3 Optimizer v" << z3Major << "." << z3Minor << " Build " << z3BuildNumber << " Rev " << z3RevisionNumber << "." << std::endl; -#endif - - // "Compute" the command line argument string with which STORM was invoked. - std::stringstream commandStream; - for (int i = 0; i < argc; ++i) { - commandStream << argv[i] << " "; - } - std::cout << "Command line: " << commandStream.str() << std::endl << std::endl; - std::cout << "Current working directory: " << getCurrentWorkingDirectory() << std::endl << std::endl; -} - -/*! - * Parses the given command line arguments. - * - * @param argc The argc argument of main(). - * @param argv The argv argument of main(). - * @return True iff the program should continue to run after parsing the options. - */ -bool parseOptions(const int argc, const char* argv[]) { - storm::settings::SettingsManager& manager = storm::settings::mutableManager(); - try { - manager.setFromCommandLine(argc, argv); - } catch (storm::exceptions::OptionParserException& e) { - std::cout << "Could not recover from settings error: " << e.what() << "." << std::endl; - std::cout << std::endl; - manager.printHelp(); - return false; - } - - if (storm::settings::generalSettings().isHelpSet()) { - storm::settings::manager().printHelp(storm::settings::generalSettings().getHelpModuleName()); - return false; - } - - if (storm::settings::generalSettings().isVerboseSet()) { - logger.getAppender("mainConsoleAppender")->setThreshold(log4cplus::INFO_LOG_LEVEL); - LOG4CPLUS_INFO(logger, "Enabled verbose mode, log output gets printed to console."); - } - if (storm::settings::debugSettings().isDebugSet()) { - logger.setLogLevel(log4cplus::DEBUG_LOG_LEVEL); - logger.getAppender("mainConsoleAppender")->setThreshold(log4cplus::DEBUG_LOG_LEVEL); - LOG4CPLUS_INFO(logger, "Enabled very verbose mode, log output gets printed to console."); - } - if (storm::settings::debugSettings().isTraceSet()) { - logger.setLogLevel(log4cplus::TRACE_LOG_LEVEL); - logger.getAppender("mainConsoleAppender")->setThreshold(log4cplus::TRACE_LOG_LEVEL); - LOG4CPLUS_INFO(logger, "Enabled trace mode, log output gets printed to console."); - } - if (storm::settings::debugSettings().isLogfileSet()) { - setUpFileLogging(); - } - return true; -} - - -#endif \ No newline at end of file diff --git a/src/utility/Initialize.h b/src/utility/Initialize.h deleted file mode 100644 index cf2facda5..000000000 --- a/src/utility/Initialize.h +++ /dev/null @@ -1,22 +0,0 @@ -#ifndef STORM_UTILITY_INITIALIZE_H_ -#define STORM_UTILITY_INITIALIZE_H_ - -#include "InitializeLogging.h" - -/*! - * Performs some necessary initializations. - */ -void setUp() { - // Increase the precision of output. - std::cout.precision(10); -} - -/*! - * Performs some necessary clean-up. - */ -void cleanUp() { - // Intentionally left empty. -} - - -#endif \ No newline at end of file diff --git a/src/utility/InitializeLogging.h b/src/utility/InitializeLogging.h deleted file mode 100644 index ea8394705..000000000 --- a/src/utility/InitializeLogging.h +++ /dev/null @@ -1,37 +0,0 @@ -#ifndef STORM_UTILITY_INITIALIZELOGGING_H_ -#define STORM_UTILITY_INITIALIZELOGGING_H_ - -#include "log4cplus/logger.h" -#include "log4cplus/loggingmacros.h" -#include "log4cplus/consoleappender.h" -#include "log4cplus/fileappender.h" - -#include "src/settings/SettingsManager.h" - -log4cplus::Logger logger; - -/*! - * Initializes the logging framework and sets up logging to console. - */ -void initializeLogger() { - logger = log4cplus::Logger::getInstance(LOG4CPLUS_TEXT("main")); - logger.setLogLevel(log4cplus::INFO_LOG_LEVEL); - log4cplus::SharedAppenderPtr consoleLogAppender(new log4cplus::ConsoleAppender()); - consoleLogAppender->setName("mainConsoleAppender"); - consoleLogAppender->setThreshold(log4cplus::WARN_LOG_LEVEL); - consoleLogAppender->setLayout(std::auto_ptr<log4cplus::Layout>(new log4cplus::PatternLayout("%-5p - %D{%H:%M:%S} (%r ms) - %b:%L: %m%n"))); - logger.addAppender(consoleLogAppender); -} - -/*! - * Sets up the logging to file. - */ -void setUpFileLogging() { - log4cplus::SharedAppenderPtr fileLogAppender(new log4cplus::FileAppender(storm::settings::debugSettings().getLogfilename())); - fileLogAppender->setName("mainFileAppender"); - fileLogAppender->setLayout(std::auto_ptr<log4cplus::Layout>(new log4cplus::PatternLayout("%-5p - %D{%H:%M:%S} (%r ms) - %F:%L: %m%n"))); - logger.addAppender(fileLogAppender); -} - - -#endif \ No newline at end of file diff --git a/src/utility/PrismUtility.h b/src/utility/PrismUtility.h index de8bcb2c7..5dda96313 100644 --- a/src/utility/PrismUtility.h +++ b/src/utility/PrismUtility.h @@ -3,7 +3,7 @@ #include "src/storage/LabeledValues.h" #include "src/storage/prism/Program.h" -#include "src/exceptions/ExceptionMacros.h" +#include "src/utility/macros.h" #include "src/exceptions/InvalidArgumentException.h" namespace storm { @@ -217,8 +217,8 @@ namespace storm { if (program.hasConstant(constantName)) { // Get the actual constant and check whether it's in fact undefined. auto const& constant = program.getConstant(constantName); - LOG_THROW(!constant.isDefined(), storm::exceptions::InvalidArgumentException, "Illegally trying to define already defined constant '" << constantName <<"'."); - LOG_THROW(definedConstants.find(constantName) == definedConstants.end(), storm::exceptions::InvalidArgumentException, "Illegally trying to define constant '" << constantName <<"' twice."); + STORM_LOG_THROW(!constant.isDefined(), storm::exceptions::InvalidArgumentException, "Illegally trying to define already defined constant '" << constantName <<"'."); + STORM_LOG_THROW(definedConstants.find(constantName) == definedConstants.end(), storm::exceptions::InvalidArgumentException, "Illegally trying to define constant '" << constantName <<"' twice."); definedConstants.insert(constantName); if (constant.getType() == storm::expressions::ExpressionReturnType::Bool) { diff --git a/src/utility/cli.h b/src/utility/cli.h new file mode 100644 index 000000000..f097a6a7c --- /dev/null +++ b/src/utility/cli.h @@ -0,0 +1,222 @@ +#ifndef STORM_UTILITY_CLI_H_ +#define STORM_UTILITY_CLI_H_ + +#include <iostream> +#include <iomanip> +#include <fstream> +#include <cstdio> +#include <sstream> + +#include "src/utility/OsDetection.h" +#include "src/settings/SettingsManager.h" + +#include "log4cplus/logger.h" +#include "log4cplus/loggingmacros.h" +#include "log4cplus/consoleappender.h" +#include "log4cplus/fileappender.h" +log4cplus::Logger logger; + +// Includes for the linked libraries and versions header +#ifdef STORM_HAVE_INTELTBB +# include "tbb/tbb_stddef.h" +#endif +#ifdef STORM_HAVE_GLPK +# include "glpk.h" +#endif +#ifdef STORM_HAVE_GUROBI +# include "gurobi_c.h" +#endif +#ifdef STORM_HAVE_Z3 +# include "z3.h" +#endif + +namespace storm { + namespace utility { + namespace cli { + + /*! + * Initializes the logging framework and sets up logging to console. + */ + void initializeLogger() { + logger = log4cplus::Logger::getInstance(LOG4CPLUS_TEXT("main")); + logger.setLogLevel(log4cplus::INFO_LOG_LEVEL); + log4cplus::SharedAppenderPtr consoleLogAppender(new log4cplus::ConsoleAppender()); + consoleLogAppender->setName("mainConsoleAppender"); + consoleLogAppender->setThreshold(log4cplus::WARN_LOG_LEVEL); + consoleLogAppender->setLayout(std::auto_ptr<log4cplus::Layout>(new log4cplus::PatternLayout("%-5p - %D{%H:%M:%S} (%r ms) - %b:%L: %m%n"))); + logger.addAppender(consoleLogAppender); + } + + /*! + * Performs some necessary initializations. + */ + void setUp() { + initializeLogger(); + std::cout.precision(10); + } + + /*! + * Performs some necessary clean-up. + */ + void cleanUp() { + // Intentionally left empty. + } + + /*! + * Sets up the logging to file. + */ + void setUpFileLogging() { + log4cplus::SharedAppenderPtr fileLogAppender(new log4cplus::FileAppender(storm::settings::debugSettings().getLogfilename())); + fileLogAppender->setName("mainFileAppender"); + fileLogAppender->setLayout(std::auto_ptr<log4cplus::Layout>(new log4cplus::PatternLayout("%-5p - %D{%H:%M:%S} (%r ms) - %F:%L: %m%n"))); + logger.addAppender(fileLogAppender); + } + + /*! + * Gives the current working directory + * + * @return std::string The path of the current working directory + */ + std::string getCurrentWorkingDirectory() { + char temp[512]; + return (GetCurrentDir(temp, 512 - 1) ? std::string(temp) : std::string("")); + } + + + void printUsage() { +#ifndef WINDOWS + struct rusage ru; + getrusage(RUSAGE_SELF, &ru); + + std::cout << "===== Statistics ==============================" << std::endl; + std::cout << "peak memory usage: " << ru.ru_maxrss/1024/1024 << "MB" << std::endl; + std::cout << "CPU time: " << ru.ru_utime.tv_sec << "." << std::setw(3) << std::setfill('0') << ru.ru_utime.tv_usec/1000 << " seconds" << std::endl; + std::cout << "===============================================" << std::endl; +#else + HANDLE hProcess = GetCurrentProcess (); + FILETIME ftCreation, ftExit, ftUser, ftKernel; + PROCESS_MEMORY_COUNTERS pmc; + if (GetProcessMemoryInfo( hProcess, &pmc, sizeof(pmc))) { + std::cout << "Memory Usage: " << std::endl; + std::cout << "\tPageFaultCount: " << pmc.PageFaultCount << std::endl; + std::cout << "\tPeakWorkingSetSize: " << pmc.PeakWorkingSetSize << std::endl; + std::cout << "\tWorkingSetSize: " << pmc.WorkingSetSize << std::endl; + std::cout << "\tQuotaPeakPagedPoolUsage: " << pmc.QuotaPeakPagedPoolUsage << std::endl; + std::cout << "\tQuotaPagedPoolUsage: " << pmc.QuotaPagedPoolUsage << std::endl; + std::cout << "\tQuotaPeakNonPagedPoolUsage: " << pmc.QuotaPeakNonPagedPoolUsage << std::endl; + std::cout << "\tQuotaNonPagedPoolUsage: " << pmc.QuotaNonPagedPoolUsage << std::endl; + std::cout << "\tPagefileUsage:" << pmc.PagefileUsage << std::endl; + std::cout << "\tPeakPagefileUsage: " << pmc.PeakPagefileUsage << std::endl; + } + + GetProcessTimes (hProcess, &ftCreation, &ftExit, &ftKernel, &ftUser); + + ULARGE_INTEGER uLargeInteger; + uLargeInteger.LowPart = ftKernel.dwLowDateTime; + uLargeInteger.HighPart = ftKernel.dwHighDateTime; + double kernelTime = static_cast<double>(uLargeInteger.QuadPart) / 10000.0; // 100 ns Resolution to milliseconds + uLargeInteger.LowPart = ftUser.dwLowDateTime; + uLargeInteger.HighPart = ftUser.dwHighDateTime; + double userTime = static_cast<double>(uLargeInteger.QuadPart) / 10000.0; + + std::cout << "CPU Time: " << std::endl; + std::cout << "\tKernel Time: " << std::setprecision(5) << kernelTime << "ms" << std::endl; + std::cout << "\tUser Time: " << std::setprecision(5) << userTime << "ms" << std::endl; +#endif + } + + + + /*! + * Prints the header. + */ + void printHeader(const int argc, const char* argv[]) { + std::cout << "StoRM" << std::endl; + std::cout << "-----" << std::endl << std::endl; + + std::cout << "Version: " << STORM_CPP_VERSION_MAJOR << "." << STORM_CPP_VERSION_MINOR << "." << STORM_CPP_VERSION_PATCH; + if (STORM_CPP_VERSION_COMMITS_AHEAD != 0) { + std::cout << " (+" << STORM_CPP_VERSION_COMMITS_AHEAD << " commits)"; + } + std::cout << " build from revision " << STORM_CPP_VERSION_HASH; + if (STORM_CPP_VERSION_DIRTY == 1) { + std::cout << " (DIRTY)"; + } + std::cout << "." << std::endl; + +#ifdef STORM_HAVE_INTELTBB + std::cout << "Linked with Intel Threading Building Blocks v" << TBB_VERSION_MAJOR << "." << TBB_VERSION_MINOR << " (Interface version " << TBB_INTERFACE_VERSION << ")." << std::endl; +#endif +#ifdef STORM_HAVE_GLPK + std::cout << "Linked with GNU Linear Programming Kit v" << GLP_MAJOR_VERSION << "." << GLP_MINOR_VERSION << "." << std::endl; +#endif +#ifdef STORM_HAVE_GUROBI + std::cout << "Linked with Gurobi Optimizer v" << GRB_VERSION_MAJOR << "." << GRB_VERSION_MINOR << "." << GRB_VERSION_TECHNICAL << "." << std::endl; +#endif +#ifdef STORM_HAVE_Z3 + unsigned int z3Major, z3Minor, z3BuildNumber, z3RevisionNumber; + Z3_get_version(&z3Major, &z3Minor, &z3BuildNumber, &z3RevisionNumber); + std::cout << "Linked with Microsoft Z3 Optimizer v" << z3Major << "." << z3Minor << " Build " << z3BuildNumber << " Rev " << z3RevisionNumber << "." << std::endl; +#endif + + // "Compute" the command line argument string with which STORM was invoked. + std::stringstream commandStream; + for (int i = 0; i < argc; ++i) { + commandStream << argv[i] << " "; + } + std::cout << "Command line: " << commandStream.str() << std::endl; + std::cout << "Current working directory: " << getCurrentWorkingDirectory() << std::endl << std::endl; + } + + /*! + * Parses the given command line arguments. + * + * @param argc The argc argument of main(). + * @param argv The argv argument of main(). + * @return True iff the program should continue to run after parsing the options. + */ + bool parseOptions(const int argc, const char* argv[]) { + storm::settings::SettingsManager& manager = storm::settings::mutableManager(); + try { + manager.setFromCommandLine(argc, argv); + } catch (storm::exceptions::OptionParserException& e) { + std::cout << "Could not recover from settings error: " << e.what() << "." << std::endl; + std::cout << std::endl; + manager.printHelp(); + return false; + } + + if (storm::settings::generalSettings().isHelpSet()) { + storm::settings::manager().printHelp(storm::settings::generalSettings().getHelpModuleName()); + return false; + } + + if (storm::settings::generalSettings().isVerboseSet()) { + logger.getAppender("mainConsoleAppender")->setThreshold(log4cplus::INFO_LOG_LEVEL); + LOG4CPLUS_INFO(logger, "Enabled verbose mode, log output gets printed to console."); + } + if (storm::settings::debugSettings().isDebugSet()) { + logger.setLogLevel(log4cplus::DEBUG_LOG_LEVEL); + logger.getAppender("mainConsoleAppender")->setThreshold(log4cplus::DEBUG_LOG_LEVEL); + LOG4CPLUS_INFO(logger, "Enabled very verbose mode, log output gets printed to console."); + } + if (storm::settings::debugSettings().isTraceSet()) { + logger.setLogLevel(log4cplus::TRACE_LOG_LEVEL); + logger.getAppender("mainConsoleAppender")->setThreshold(log4cplus::TRACE_LOG_LEVEL); + LOG4CPLUS_INFO(logger, "Enabled trace mode, log output gets printed to console."); + } + if (storm::settings::debugSettings().isLogfileSet()) { + setUpFileLogging(); + } + return true; + } + + void processOptions() { + + } + + } + } +} + +#endif \ No newline at end of file diff --git a/src/utility/macros.h b/src/utility/macros.h new file mode 100644 index 000000000..511fdcc12 --- /dev/null +++ b/src/utility/macros.h @@ -0,0 +1,57 @@ +#ifndef STORM_UTILITY_MACROS_H_ +#define STORM_UTILITY_MACROS_H_ + +#include <cassert> + +// Include the parts necessary for Log4cplus. +#include "log4cplus/logger.h" +#include "log4cplus/loggingmacros.h" +extern log4cplus::Logger logger; + +/*! + * Define the macros STORM_LOG_ASSERT and STORM_LOG_DEBUG to be silent in non-debug mode and log the message in case the condition + * fails to evaluate to true. + */ +#ifndef NDEBUG +#define STORM_LOG_ASSERT(cond, message) \ +{ \ + if (!(cond)) { \ + LOG4CPLUS_ERROR(logger, message); \ + assert(cond); \ + } \ +} while (false) +#define STORM_LOG_DEBUG(message) \ +{ \ + LOG4CPLUS_DEBUG(logger, message); \ +} while (false) +#else +#define STORM_LOG_ASSERT(cond, message) /* empty */ +#define STORM_LOG_DEBUG(message) /* empty */ +#endif + +// Define STORM_LOG_THROW to always throw the exception with the given message if the condition fails to hold. +#define STORM_LOG_THROW(cond, exception, message) \ +{ \ + if (!(cond)) { \ + LOG4CPLUS_ERROR(logger, message); \ + throw exception() << message; \ + } \ +} while (false) + +// Define STORM_LOG_WARN, STORM_LOG_ERROR and STORM_LOG_INFO to log the given message with the corresponding log levels. +#define STORM_LOG_WARN(message) \ +{ \ + LOG4CPLUS_WARN(logger, message); \ +} while (false) + +#define STORM_LOG_INFO(message) \ +{ \ + LOG4CPLUS_INFO(logger, message); \ +} while (false) + +#define STORM_LOG_ERROR(message) \ +{ \ + LOG4CPLUS_ERROR(logger, message); \ +} while (false) + +#endif /* STORM_UTILITY_MACROS_H_ */ \ No newline at end of file