add a way to disable at runtime polygon assertions

some algorithms works with strictly simple polygons
but implementation such a check function is hard
This commit is contained in:
Sébastien Loriot 2020-11-06 12:02:23 +01:00
parent e1dd96414d
commit a5c5a618d2
1 changed files with 57 additions and 32 deletions

View File

@ -32,6 +32,31 @@
#undef CGAL_polygon_assertion_msg
#undef CGAL_polygon_assertion_code
#ifndef CGAL_POLYGON_ASSERTIONS_H
#define CGAL_POLYGON_ASSERTIONS_H
#if defined(CGAL_POLYGON_NO_ASSERTIONS) || defined(CGAL_NO_ASSERTIONS) \
|| defined(NDEBUG)
namespace CGAL{
inline void set_use_polygon_assertions(bool){}
inline bool get_use_polygon_assertions(){return true;}
}
#else
#include <CGAL/tss.h>
namespace CGAL{
inline bool& get_use_polygon_assertions()
{
CGAL_STATIC_THREAD_LOCAL_VARIABLE(bool, b, true);
return b;
}
inline void set_use_polygon_assertions(bool b)
{
get_use_polygon_assertions() = b;
}
}
#endif
#endif // CGAL_POLYGON_ASSERTIONS_H
#if defined(CGAL_POLYGON_NO_ASSERTIONS) || defined(CGAL_NO_ASSERTIONS) \
|| defined(NDEBUG)
# define CGAL_polygon_assertion(EX) (static_cast<void>(0))
@ -39,9 +64,9 @@
# define CGAL_polygon_assertion_code(CODE)
#else
# define CGAL_polygon_assertion(EX) \
(CGAL::possibly(EX)?(static_cast<void>(0)): ::CGAL::assertion_fail( # EX , __FILE__, __LINE__))
((!get_use_polygon_assertions() || CGAL::possibly(EX))?(static_cast<void>(0)): ::CGAL::assertion_fail( # EX , __FILE__, __LINE__))
# define CGAL_polygon_assertion_msg(EX,MSG) \
(CGAL::possibly(EX)?(static_cast<void>(0)): ::CGAL::assertion_fail( # EX , __FILE__, __LINE__, MSG))
((!get_use_polygon_assertions() || CGAL::possibly(EX))?(static_cast<void>(0)): ::CGAL::assertion_fail( # EX , __FILE__, __LINE__, MSG))
# define CGAL_polygon_assertion_code(CODE) CODE
# define CGAL_polygon_assertions 1
#endif // CGAL_POLYGON_NO_ASSERTIONS
@ -59,9 +84,9 @@
# define CGAL_polygon_exactness_assertion_code(CODE)
#else
# define CGAL_polygon_exactness_assertion(EX) \
(CGAL::possibly(EX)?(static_cast<void>(0)): ::CGAL::assertion_fail( # EX , __FILE__, __LINE__))
((!get_use_polygon_assertions() || CGAL::possibly(EX))?(static_cast<void>(0)): ::CGAL::assertion_fail( # EX , __FILE__, __LINE__))
# define CGAL_polygon_exactness_assertion_msg(EX,MSG) \
(CGAL::possibly(EX)?(static_cast<void>(0)): ::CGAL::assertion_fail( # EX , __FILE__, __LINE__, MSG))
((!get_use_polygon_assertions() || CGAL::possibly(EX))?(static_cast<void>(0)): ::CGAL::assertion_fail( # EX , __FILE__, __LINE__, MSG))
# define CGAL_polygon_exactness_assertion_code(CODE) CODE
# define CGAL_polygon_exactness_assertions 1
#endif // CGAL_POLYGON_NO_ASSERTIONS
@ -80,9 +105,9 @@
# define CGAL_polygon_expensive_assertion_code(CODE)
#else
# define CGAL_polygon_expensive_assertion(EX) \
(CGAL::possibly(EX)?(static_cast<void>(0)): ::CGAL::assertion_fail( # EX , __FILE__, __LINE__))
((!get_use_polygon_assertions() || CGAL::possibly(EX))?(static_cast<void>(0)): ::CGAL::assertion_fail( # EX , __FILE__, __LINE__))
# define CGAL_polygon_expensive_assertion_msg(EX,MSG) \
(CGAL::possibly(EX)?(static_cast<void>(0)): ::CGAL::assertion_fail( # EX , __FILE__, __LINE__, MSG))
((!get_use_polygon_assertions() || CGAL::possibly(EX))?(static_cast<void>(0)): ::CGAL::assertion_fail( # EX , __FILE__, __LINE__, MSG))
# define CGAL_polygon_expensive_assertion_code(CODE) CODE
# define CGAL_polygon_expensive_assertions 1
#endif // CGAL_POLYGON_NO_ASSERTIONS
@ -101,9 +126,9 @@
# define CGAL_polygon_expensive_exactness_assertion_code(CODE)
#else
# define CGAL_polygon_expensive_exactness_assertion(EX) \
(CGAL::possibly(EX)?(static_cast<void>(0)): ::CGAL::assertion_fail( # EX , __FILE__, __LINE__))
((!get_use_polygon_assertions() || CGAL::possibly(EX))?(static_cast<void>(0)): ::CGAL::assertion_fail( # EX , __FILE__, __LINE__))
# define CGAL_polygon_expensive_exactness_assertion_msg(EX,MSG) \
(CGAL::possibly(EX)?(static_cast<void>(0)): ::CGAL::assertion_fail( # EX , __FILE__, __LINE__, MSG))
((!get_use_polygon_assertions() || CGAL::possibly(EX))?(static_cast<void>(0)): ::CGAL::assertion_fail( # EX , __FILE__, __LINE__, MSG))
# define CGAL_polygon_expensive_exactness_assertion_code(CODE) CODE
# define CGAL_polygon_expensive_exactness_assertions 1
#endif // CGAL_POLYGON_NO_ASSERTIONS
@ -123,9 +148,9 @@
# define CGAL_polygon_precondition_code(CODE)
#else
# define CGAL_polygon_precondition(EX) \
(CGAL::possibly(EX)?(static_cast<void>(0)): ::CGAL::precondition_fail( # EX , __FILE__, __LINE__))
((!get_use_polygon_assertions() || CGAL::possibly(EX))?(static_cast<void>(0)): ::CGAL::precondition_fail( # EX , __FILE__, __LINE__))
# define CGAL_polygon_precondition_msg(EX,MSG) \
(CGAL::possibly(EX)?(static_cast<void>(0)): ::CGAL::precondition_fail( # EX , __FILE__, __LINE__, MSG))
((!get_use_polygon_assertions() || CGAL::possibly(EX))?(static_cast<void>(0)): ::CGAL::precondition_fail( # EX , __FILE__, __LINE__, MSG))
# define CGAL_polygon_precondition_code(CODE) CODE
# define CGAL_polygon_preconditions 1
#endif // CGAL_POLYGON_NO_PRECONDITIONS
@ -143,9 +168,9 @@
# define CGAL_polygon_exactness_precondition_code(CODE)
#else
# define CGAL_polygon_exactness_precondition(EX) \
(CGAL::possibly(EX)?(static_cast<void>(0)): ::CGAL::precondition_fail( # EX , __FILE__, __LINE__))
((!get_use_polygon_assertions() || CGAL::possibly(EX))?(static_cast<void>(0)): ::CGAL::precondition_fail( # EX , __FILE__, __LINE__))
# define CGAL_polygon_exactness_precondition_msg(EX,MSG) \
(CGAL::possibly(EX)?(static_cast<void>(0)): ::CGAL::precondition_fail( # EX , __FILE__, __LINE__, MSG))
((!get_use_polygon_assertions() || CGAL::possibly(EX))?(static_cast<void>(0)): ::CGAL::precondition_fail( # EX , __FILE__, __LINE__, MSG))
# define CGAL_polygon_exactness_precondition_code(CODE) CODE
# define CGAL_polygon_exactness_preconditions 1
#endif // CGAL_POLYGON_NO_PRECONDITIONS
@ -163,9 +188,9 @@
# define CGAL_polygon_expensive_precondition_code(CODE)
#else
# define CGAL_polygon_expensive_precondition(EX) \
(CGAL::possibly(EX)?(static_cast<void>(0)): ::CGAL::precondition_fail( # EX , __FILE__, __LINE__))
((!get_use_polygon_assertions() || CGAL::possibly(EX))?(static_cast<void>(0)): ::CGAL::precondition_fail( # EX , __FILE__, __LINE__))
# define CGAL_polygon_expensive_precondition_msg(EX,MSG) \
(CGAL::possibly(EX)?(static_cast<void>(0)): ::CGAL::precondition_fail( # EX , __FILE__, __LINE__, MSG))
((!get_use_polygon_assertions() || CGAL::possibly(EX))?(static_cast<void>(0)): ::CGAL::precondition_fail( # EX , __FILE__, __LINE__, MSG))
# define CGAL_polygon_expensive_precondition_code(CODE) CODE
# define CGAL_polygon_expensive_preconditions 1
#endif // CGAL_POLYGON_NO_PRECONDITIONS
@ -184,9 +209,9 @@
# define CGAL_polygon_expensive_exactness_precondition_code(CODE)
#else
# define CGAL_polygon_expensive_exactness_precondition(EX) \
(CGAL::possibly(EX)?(static_cast<void>(0)): ::CGAL::precondition_fail( # EX , __FILE__, __LINE__))
((!get_use_polygon_assertions() || CGAL::possibly(EX))?(static_cast<void>(0)): ::CGAL::precondition_fail( # EX , __FILE__, __LINE__))
# define CGAL_polygon_expensive_exactness_precondition_msg(EX,MSG) \
(CGAL::possibly(EX)?(static_cast<void>(0)): ::CGAL::precondition_fail( # EX , __FILE__, __LINE__, MSG))
((!get_use_polygon_assertions() || CGAL::possibly(EX))?(static_cast<void>(0)): ::CGAL::precondition_fail( # EX , __FILE__, __LINE__, MSG))
# define CGAL_polygon_expensive_exactness_precondition_code(CODE) CODE
# define CGAL_polygon_expensive_exactness_preconditions 1
#endif // CGAL_POLYGON_NO_PRECONDITIONS
@ -206,9 +231,9 @@
# define CGAL_polygon_postcondition_code(CODE)
#else
# define CGAL_polygon_postcondition(EX) \
(CGAL::possibly(EX)?(static_cast<void>(0)): ::CGAL::postcondition_fail( # EX , __FILE__, __LINE__))
((!get_use_polygon_assertions() || CGAL::possibly(EX))?(static_cast<void>(0)): ::CGAL::postcondition_fail( # EX , __FILE__, __LINE__))
# define CGAL_polygon_postcondition_msg(EX,MSG) \
(CGAL::possibly(EX)?(static_cast<void>(0)): ::CGAL::postcondition_fail( # EX , __FILE__, __LINE__, MSG))
((!get_use_polygon_assertions() || CGAL::possibly(EX))?(static_cast<void>(0)): ::CGAL::postcondition_fail( # EX , __FILE__, __LINE__, MSG))
# define CGAL_polygon_postcondition_code(CODE) CODE
# define CGAL_polygon_postconditions 1
#endif // CGAL_POLYGON_NO_POSTCONDITIONS
@ -226,9 +251,9 @@
# define CGAL_polygon_exactness_postcondition_code(CODE)
#else
# define CGAL_polygon_exactness_postcondition(EX) \
(CGAL::possibly(EX)?(static_cast<void>(0)): ::CGAL::postcondition_fail( # EX , __FILE__, __LINE__))
((!get_use_polygon_assertions() || CGAL::possibly(EX))?(static_cast<void>(0)): ::CGAL::postcondition_fail( # EX , __FILE__, __LINE__))
# define CGAL_polygon_exactness_postcondition_msg(EX,MSG) \
(CGAL::possibly(EX)?(static_cast<void>(0)): ::CGAL::postcondition_fail( # EX , __FILE__, __LINE__, MSG))
((!get_use_polygon_assertions() || CGAL::possibly(EX))?(static_cast<void>(0)): ::CGAL::postcondition_fail( # EX , __FILE__, __LINE__, MSG))
# define CGAL_polygon_exactness_postcondition_code(CODE) CODE
# define CGAL_polygon_exactness_postconditions 1
#endif // CGAL_POLYGON_NO_POSTCONDITIONS
@ -246,9 +271,9 @@
# define CGAL_polygon_expensive_postcondition_code(CODE)
#else
# define CGAL_polygon_expensive_postcondition(EX) \
(CGAL::possibly(EX)?(static_cast<void>(0)): ::CGAL::postcondition_fail( # EX , __FILE__, __LINE__))
((!get_use_polygon_assertions() || CGAL::possibly(EX))?(static_cast<void>(0)): ::CGAL::postcondition_fail( # EX , __FILE__, __LINE__))
# define CGAL_polygon_expensive_postcondition_msg(EX,MSG) \
(CGAL::possibly(EX)?(static_cast<void>(0)): ::CGAL::postcondition_fail( # EX , __FILE__, __LINE__, MSG))
((!get_use_polygon_assertions() || CGAL::possibly(EX))?(static_cast<void>(0)): ::CGAL::postcondition_fail( # EX , __FILE__, __LINE__, MSG))
# define CGAL_polygon_expensive_postcondition_code(CODE) CODE
# define CGAL_polygon_expensive_postconditions 1
#endif // CGAL_POLYGON_NO_POSTCONDITIONS
@ -267,9 +292,9 @@
# define CGAL_polygon_expensive_exactness_postcondition_code(CODE)
#else
# define CGAL_polygon_expensive_exactness_postcondition(EX) \
(CGAL::possibly(EX)?(static_cast<void>(0)): ::CGAL::postcondition_fail( # EX , __FILE__, __LINE__))
((!get_use_polygon_assertions() || CGAL::possibly(EX))?(static_cast<void>(0)): ::CGAL::postcondition_fail( # EX , __FILE__, __LINE__))
# define CGAL_polygon_expensive_exactness_postcondition_msg(EX,MSG) \
(CGAL::possibly(EX)?(static_cast<void>(0)): ::CGAL::postcondition_fail( # EX , __FILE__, __LINE__, MSG))
((!get_use_polygon_assertions() || CGAL::possibly(EX))?(static_cast<void>(0)): ::CGAL::postcondition_fail( # EX , __FILE__, __LINE__, MSG))
# define CGAL_polygon_expensive_exactness_postcondition_code(CODE) CODE
# define CGAL_polygon_expensive_exactness_postconditions 1
#endif // CGAL_POLYGON_NO_POSTCONDITIONS
@ -289,9 +314,9 @@
# define CGAL_polygon_warning_code(CODE)
#else
# define CGAL_polygon_warning(EX) \
(CGAL::possibly(EX)?(static_cast<void>(0)): ::CGAL::warning_fail( # EX , __FILE__, __LINE__))
((!get_use_polygon_assertions() || CGAL::possibly(EX))?(static_cast<void>(0)): ::CGAL::warning_fail( # EX , __FILE__, __LINE__))
# define CGAL_polygon_warning_msg(EX,MSG) \
(CGAL::possibly(EX)?(static_cast<void>(0)): ::CGAL::warning_fail( # EX , __FILE__, __LINE__, MSG))
((!get_use_polygon_assertions() || CGAL::possibly(EX))?(static_cast<void>(0)): ::CGAL::warning_fail( # EX , __FILE__, __LINE__, MSG))
# define CGAL_polygon_warning_code(CODE) CODE
# define CGAL_polygon_warnings 1
#endif // CGAL_POLYGON_NO_WARNINGS
@ -309,9 +334,9 @@
# define CGAL_polygon_exactness_warning_code(CODE)
#else
# define CGAL_polygon_exactness_warning(EX) \
(CGAL::possibly(EX)?(static_cast<void>(0)): ::CGAL::warning_fail( # EX , __FILE__, __LINE__))
((!get_use_polygon_assertions() || CGAL::possibly(EX))?(static_cast<void>(0)): ::CGAL::warning_fail( # EX , __FILE__, __LINE__))
# define CGAL_polygon_exactness_warning_msg(EX,MSG) \
(CGAL::possibly(EX)?(static_cast<void>(0)): ::CGAL::warning_fail( # EX , __FILE__, __LINE__, MSG))
((!get_use_polygon_assertions() || CGAL::possibly(EX))?(static_cast<void>(0)): ::CGAL::warning_fail( # EX , __FILE__, __LINE__, MSG))
# define CGAL_polygon_exactness_warning_code(CODE) CODE
# define CGAL_polygon_exactness_warnings 1
#endif // CGAL_POLYGON_NO_WARNINGS
@ -329,9 +354,9 @@
# define CGAL_polygon_expensive_warning_code(CODE)
#else
# define CGAL_polygon_expensive_warning(EX) \
(CGAL::possibly(EX)?(static_cast<void>(0)): ::CGAL::warning_fail( # EX , __FILE__, __LINE__))
((!get_use_polygon_assertions() || CGAL::possibly(EX))?(static_cast<void>(0)): ::CGAL::warning_fail( # EX , __FILE__, __LINE__))
# define CGAL_polygon_expensive_warning_msg(EX,MSG) \
(CGAL::possibly(EX)?(static_cast<void>(0)): ::CGAL::warning_fail( # EX , __FILE__, __LINE__, MSG))
((!get_use_polygon_assertions() || CGAL::possibly(EX))?(static_cast<void>(0)): ::CGAL::warning_fail( # EX , __FILE__, __LINE__, MSG))
# define CGAL_polygon_expensive_warning_code(CODE) CODE
# define CGAL_polygon_expensive_warnings 1
#endif // CGAL_POLYGON_NO_WARNINGS
@ -350,9 +375,9 @@
# define CGAL_polygon_expensive_exactness_warning_code(CODE)
#else
# define CGAL_polygon_expensive_exactness_warning(EX) \
(CGAL::possibly(EX)?(static_cast<void>(0)): ::CGAL::warning_fail( # EX , __FILE__, __LINE__))
((!get_use_polygon_assertions() || CGAL::possibly(EX))?(static_cast<void>(0)): ::CGAL::warning_fail( # EX , __FILE__, __LINE__))
# define CGAL_polygon_expensive_exactness_warning_msg(EX,MSG) \
(CGAL::possibly(EX)?(static_cast<void>(0)): ::CGAL::warning_fail( # EX , __FILE__, __LINE__, MSG))
((!get_use_polygon_assertions() || CGAL::possibly(EX))?(static_cast<void>(0)): ::CGAL::warning_fail( # EX , __FILE__, __LINE__, MSG))
# define CGAL_polygon_expensive_exactness_warning_code(CODE) CODE
# define CGAL_polygon_expensive_exactness_warnings 1
#endif // CGAL_POLYGON_NO_WARNINGS