Program Listing for File error.h
↰ Return to documentation for file (framework/utils/error.h)
// SPDX-FileCopyrightText: 2024 The OpenSn Authors <https://open-sn.github.io/opensn/>
// SPDX-License-Identifier: MIT
#pragma once
#include <string>
#include <stdexcept>
namespace opensn
{
[[noreturn]] void ThrowPETScError(int ierr, const char* expr, const char* file, int line);
inline void
CheckPETScCall(int ierr, const char* expr, const char* file, int line)
{
const bool failed =
#if defined(__GNUC__) || defined(__clang__)
__builtin_expect(ierr != 0, 0);
#else
ierr != 0;
#endif
if (failed)
ThrowPETScError(ierr, expr, file, line);
}
} // namespace opensn
#define OpenSnInvalidArgumentIf(condition, message) \
if (condition) \
throw std::invalid_argument(std::string(__PRETTY_FUNCTION__) + ": " + (message))
#define OpenSnInvalidArgument(message) \
throw std::invalid_argument(std::string(__PRETTY_FUNCTION__) + ": " + (message))
#define OpenSnLogicalErrorIf(condition, message) \
if (condition) \
throw std::logic_error(std::string(__PRETTY_FUNCTION__) + ": " + (message))
#define OpenSnLogicalError(message) \
throw std::logic_error(std::string(__PRETTY_FUNCTION__) + ": " + (message))
#define OpenSnRecoverableInvalidArgument(condition, message) \
{ \
if (condition) \
throw std::RecoverableException(std::string("Recoverable Invalid Argument: "), \
std::string(__PRETTY_FUNCTION__) + ": " + #message); \
}
#define OpenSnRecoverableLogicalError(condition, message) \
{ \
if (condition) \
throw std::RecoverableException(std::string("Recoverable Logic Error: ") \
std::string(__PRETTY_FUNCTION__) + \
": " + #message); \
}
#define OpenSnPETScCall(expr) ::opensn::CheckPETScCall((expr), #expr, __FILE__, __LINE__)