mirror of
https://github.com/NGSolve/netgen.git
synced 2025-01-27 13:20:34 +05:00
add RangeException, NETGEN_CHECK_RANGE macro
This commit is contained in:
parent
c000160f92
commit
5602322e94
@ -21,6 +21,7 @@ option( ENABLE_UNIT_TESTS "Enable Catch unit tests")
|
|||||||
option( ENABLE_CPP_CORE_GUIDELINES_CHECK "Enable cpp core guideline checks on ngcore" OFF)
|
option( ENABLE_CPP_CORE_GUIDELINES_CHECK "Enable cpp core guideline checks on ngcore" OFF)
|
||||||
option( USE_SPDLOG "Enable spd log logging" ON)
|
option( USE_SPDLOG "Enable spd log logging" ON)
|
||||||
option( DEBUG_LOG "Enable more debug output (may increase computation time) - only works with USE_SPDLOG=ON" OFF)
|
option( DEBUG_LOG "Enable more debug output (may increase computation time) - only works with USE_SPDLOG=ON" OFF)
|
||||||
|
option( CHECK_RANGE "Check array range access, automatically enabled if built in debug mode" OFF)
|
||||||
|
|
||||||
option( USE_SUPERBUILD "use ccache" ON)
|
option( USE_SUPERBUILD "use ccache" ON)
|
||||||
|
|
||||||
|
@ -144,6 +144,7 @@ set_vars( NETGEN_CMAKE_ARGS
|
|||||||
ENABLE_CPP_CORE_GUIDELINES_CHECK
|
ENABLE_CPP_CORE_GUIDELINES_CHECK
|
||||||
USE_SPDLOG
|
USE_SPDLOG
|
||||||
DEBUG_LOG
|
DEBUG_LOG
|
||||||
|
CHECK_RANGE
|
||||||
)
|
)
|
||||||
|
|
||||||
# propagate all variables set on the command line using cmake -DFOO=BAR
|
# propagate all variables set on the command line using cmake -DFOO=BAR
|
||||||
|
@ -1,11 +1,17 @@
|
|||||||
|
|
||||||
add_library(ngcore SHARED archive.cpp logging.cpp)
|
add_library(ngcore SHARED archive.cpp logging.cpp flags.cpp)
|
||||||
|
|
||||||
target_compile_definitions(ngcore PRIVATE NGCORE_EXPORTS)
|
target_compile_definitions(ngcore PRIVATE NGCORE_EXPORTS)
|
||||||
if(NOT WIN32)
|
if(NOT WIN32)
|
||||||
target_compile_options(ngcore PRIVATE -fvisibility=hidden)
|
target_compile_options(ngcore PRIVATE -fvisibility=hidden)
|
||||||
endif(NOT WIN32)
|
endif(NOT WIN32)
|
||||||
|
|
||||||
|
target_compile_definitions(ngcore PUBLIC $<$<CONFIG:DEBUG>:NETGEN_ENABLE_CHECK_RANGE>)
|
||||||
|
|
||||||
|
if(CHECK_RANGE)
|
||||||
|
target_compile_definitions(ngcore PUBLIC NETGEN_ENABLE_CHECK_RANGE)
|
||||||
|
endif(CHECK_RANGE)
|
||||||
|
|
||||||
if(USE_SPDLOG)
|
if(USE_SPDLOG)
|
||||||
include_directories(${SPDLOG_INCLUDE_DIR})
|
include_directories(${SPDLOG_INCLUDE_DIR})
|
||||||
install(DIRECTORY ${SPDLOG_INCLUDE_DIR}
|
install(DIRECTORY ${SPDLOG_INCLUDE_DIR}
|
||||||
|
@ -51,13 +51,21 @@ namespace ngcore
|
|||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
/// where it occurs, index, minimal and maximal indices
|
/// where it occurs, index, minimal and maximal indices
|
||||||
RangeException (const std::string & where,
|
RangeException (const std::string & where,
|
||||||
int ind, int imin, int imax) : Exception("")
|
int ind, int imin, int imax) : Exception("")
|
||||||
{
|
{
|
||||||
std::stringstream str;
|
std::stringstream str;
|
||||||
str << where << ": index " << ind << " out of range [" << imin << "," << imax << "]\n";
|
str << where << ": index " << ind << " out of range [" << imin << "," << imax << "]\n";
|
||||||
Append (str.str());
|
Append (str.str());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
template<typename T>
|
||||||
|
RangeException(const std::string& where, const T& value)
|
||||||
|
{
|
||||||
|
std::stringstream str;
|
||||||
|
str << where << " called with wrong value " << value << "\n";
|
||||||
|
Append(str.str());
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
// Exception used if no simd implementation is available to fall back to standard evaluation
|
// Exception used if no simd implementation is available to fall back to standard evaluation
|
||||||
@ -65,4 +73,18 @@ namespace ngcore
|
|||||||
{ public: using Exception::Exception; };
|
{ public: using Exception::Exception; };
|
||||||
} // namespace ngcore
|
} // namespace ngcore
|
||||||
|
|
||||||
|
#define NETGEN_CORE_NGEXEPTION_STR_HELPER(x) #x
|
||||||
|
#define NETGEN_CORE_NGEXEPTION_STR(x) NETGEN_CORE_NGEXEPTION_STR_HELPER(x)
|
||||||
|
|
||||||
|
// Convenience macro to append file name and line of exception origin to the string
|
||||||
|
#define NG_EXCEPTION(s) ngcore::Exception(__FILE__ ":" NETGEN_CORE_NGEXEPTION_STR(__LINE__) "\t"+std::string(s))
|
||||||
|
|
||||||
|
#ifdef NETGEN_ENABLE_CHECK_RANGE
|
||||||
|
#define NETGEN_CHECK_RANGE(value, min, max) \
|
||||||
|
{ if ((value)<(min) || (value)>=(max)) \
|
||||||
|
throw ngcore::RangeException(__FILE__ ":" NETGEN_CORE_NGEXEPTION_STR(__LINE__) "\t", (value), (min), (max)); }
|
||||||
|
#else // NETGEN_ENABLE_CHECK_RANGE
|
||||||
|
#define NETGEN_CHECK_RANGE(value, min, max)
|
||||||
|
#endif // NETGEN_ENABLE_CHECK_RANGE
|
||||||
|
|
||||||
#endif // NETGEN_CORE_EXCEPTION_HPP
|
#endif // NETGEN_CORE_EXCEPTION_HPP
|
||||||
|
Loading…
Reference in New Issue
Block a user