mirror of
https://github.com/NGSolve/netgen.git
synced 2024-11-11 16:49:16 +05:00
throw range exception via function call -> reduces code size
This commit is contained in:
parent
304ce7364a
commit
63986a4e5f
@ -22,6 +22,21 @@ namespace ngcore
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
RangeException :: RangeException (// const std::string & where,
|
||||||
|
const char * where,
|
||||||
|
int ind, int imin, int imax) : Exception("")
|
||||||
|
{
|
||||||
|
std::stringstream str;
|
||||||
|
str << where << ": index " << ind << " out of range [" << imin << "," << imax << ")\n";
|
||||||
|
Append (str.str());
|
||||||
|
Append (GetBackTrace());
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void ThrowRangeException(const char * s, int ind, int imin, int imax)
|
||||||
|
{
|
||||||
|
throw RangeException(s, ind, imin, imax);
|
||||||
|
}
|
||||||
|
|
||||||
void ThrowException(const std::string & s)
|
void ThrowException(const std::string & s)
|
||||||
{
|
{
|
||||||
@ -32,6 +47,13 @@ namespace ngcore
|
|||||||
{
|
{
|
||||||
throw Exception (s);
|
throw Exception (s);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void ThrowNotTheSameException(const char * s, long int a, long int b)
|
||||||
|
{
|
||||||
|
throw ngcore::Exception(std::string(s) + ", a="+ToString(a) + ", b="+ToString(b) + GetBackTrace());
|
||||||
|
}
|
||||||
|
|
||||||
} // namespace ngcore
|
} // namespace ngcore
|
||||||
|
|
||||||
|
|
||||||
|
@ -57,15 +57,18 @@ 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("")
|
const char * where,
|
||||||
|
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());
|
||||||
Append (GetBackTrace());
|
Append (GetBackTrace());
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
template<typename T>
|
template<typename T>
|
||||||
RangeException(const std::string& where, const T& value)
|
RangeException(const std::string& where, const T& value)
|
||||||
{
|
{
|
||||||
@ -75,6 +78,10 @@ namespace ngcore
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
NGCORE_API void ThrowRangeException(const char * s, int ind, int imin, int imax);
|
||||||
|
NGCORE_API void ThrowNotTheSameException(const char * s, long int a, long int b);
|
||||||
|
|
||||||
|
|
||||||
// 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
|
||||||
class NGCORE_API ExceptionNOSIMD : public Exception
|
class NGCORE_API ExceptionNOSIMD : public Exception
|
||||||
{ public: using Exception::Exception; };
|
{ public: using Exception::Exception; };
|
||||||
@ -89,18 +96,22 @@ namespace ngcore
|
|||||||
#if defined(NETGEN_ENABLE_CHECK_RANGE) && !defined(__CUDA_ARCH__)
|
#if defined(NETGEN_ENABLE_CHECK_RANGE) && !defined(__CUDA_ARCH__)
|
||||||
#define NETGEN_CHECK_RANGE(value, min, max_plus_one) \
|
#define NETGEN_CHECK_RANGE(value, min, max_plus_one) \
|
||||||
{ if ((value)<(min) || (value)>=(max_plus_one)) \
|
{ if ((value)<(min) || (value)>=(max_plus_one)) \
|
||||||
throw ngcore::RangeException(__FILE__ ":" NETGEN_CORE_NGEXEPTION_STR(__LINE__) "\t", int(value), int(min), int(max_plus_one)); }
|
ThrowRangeException(__FILE__ ":" NETGEN_CORE_NGEXEPTION_STR(__LINE__) "\t", int(value), int(min), int(max_plus_one)); }
|
||||||
#define NETGEN_CHECK_SHAPE(a,b) \
|
// #define NETGEN_CHECK_SHAPE(a,b) \
|
||||||
{ if(a.Shape() != b.Shape()) \
|
// { if(a.Shape() != b.Shape()) \
|
||||||
throw ngcore::Exception(__FILE__ ":" NETGEN_CORE_NGEXEPTION_STR(__LINE__) "\t: shape don't match"); }
|
// ngcore::ThrowException(__FILE__ ":" NETGEN_CORE_NGEXEPTION_STR(__LINE__) "\t: shapes don't match"); }
|
||||||
#define NETGEN_CHECK_SAME(a,b) \
|
#define NETGEN_CHECK_SAME(a,b) \
|
||||||
{ if(a != b) \
|
{ if(a != b) { \
|
||||||
throw ngcore::Exception(__FILE__ ":" NETGEN_CORE_NGEXEPTION_STR(__LINE__) "\t: not the same, a="+ToString(a) + ", b="+ToString(b) + GetBackTrace()); }
|
if constexpr(std::is_same<decltype(a),size_t>() && std::is_same<decltype(b),size_t>()) \
|
||||||
|
ThrowNotTheSameException(__FILE__ ":" NETGEN_CORE_NGEXEPTION_STR(__LINE__) "\t: not the same, a=", long(a), long(b)); \
|
||||||
|
else \
|
||||||
|
throw ngcore::Exception(__FILE__ ":" NETGEN_CORE_NGEXEPTION_STR(__LINE__) "\t: not the same, a="+ToString(a) + ", b="+ToString(b) + GetBackTrace()); \
|
||||||
|
} }
|
||||||
#define NETGEN_NOEXCEPT
|
#define NETGEN_NOEXCEPT
|
||||||
#else // defined(NETGEN_ENABLE_CHECK_RANGE) && !defined(__CUDA_ARCH__)
|
#else // defined(NETGEN_ENABLE_CHECK_RANGE) && !defined(__CUDA_ARCH__)
|
||||||
#define NETGEN_CHECK_RANGE(value, min, max)
|
#define NETGEN_CHECK_RANGE(value, min, max)
|
||||||
#define NETGEN_CHECK_SAME(a,b)
|
#define NETGEN_CHECK_SAME(a,b)
|
||||||
#define NETGEN_CHECK_SHAPE(a,b)
|
// #define NETGEN_CHECK_SHAPE(a,b)
|
||||||
#define NETGEN_NOEXCEPT noexcept
|
#define NETGEN_NOEXCEPT noexcept
|
||||||
#endif // defined(NETGEN_ENABLE_CHECK_RANGE) && !defined(__CUDA_ARCH__)
|
#endif // defined(NETGEN_ENABLE_CHECK_RANGE) && !defined(__CUDA_ARCH__)
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user