34#include <ogdf/basic/internal/config_autogen.h>
40#if defined(OGDF_DEBUG) && defined(NDEBUG)
41# error "Contradicting configuration: Macros OGDF_DEBUG and NDEBUG are defined."
52#if defined(unix) || defined(__unix__) || defined(__unix) || defined(_AIX) || defined(__APPLE__)
53# define OGDF_SYSTEM_UNIX
56#if defined(__WIN32__) || defined(_WIN32) || defined(__NT__)
57# define OGDF_SYSTEM_WINDOWS
62# define OGDF_SYSTEM_OSX
66#if __cplusplus < 201703
70# error "Compiling OGDF requires C++17 (Visual Studio 2017 15.8) or higher!"
73# elif defined(__GNUC__)
74# error "Compiling OGDF requires C++17 (compile with -std=c++17)!"
77# error "Compiling OGDF requires a C++17 compliant compiler!"
82#ifdef __has_cpp_attribute
83# define OGDF_HAS_CPP_ATTRIBUTE(x) \
84 (__has_cpp_attribute(x) && __cplusplus >= __has_cpp_attribute(x))
86# define OGDF_HAS_CPP_ATTRIBUTE(x) 0
158#define OGDF_EXPORT_TEMPL_DECL OGDF_EXPORT
166#define OGDF_EXPORT_TEMPL_INST
177#ifdef OGDF_SYSTEM_WINDOWS
181# define OGDF_EXPORT __declspec(dllexport)
182# undef OGDF_EXPORT_TEMPL_DECL
183# undef OGDF_EXPORT_TEMPL_INST
184# define OGDF_EXPORT_TEMPL_DECL
185# define OGDF_EXPORT_TEMPL_INST OGDF_EXPORT
187# define OGDF_EXPORT __declspec(dllimport)
193# define OGDF_EXPORT __attribute__((visibility("default")))
194# define OGDF_LOCAL __attribute__((visibility("hidden")))
203#define OGDF_DEPRECATED(reason)
205#if OGDF_HAS_CPP_ATTRIBUTE(deprecated)
206# undef OGDF_DEPRECATED
207# define OGDF_DEPRECATED(reason) [[deprecated(reason)]]
208#elif defined(_MSC_VER)
209# undef OGDF_DEPRECATED
210# define OGDF_DEPRECATED(reason) __declspec(deprecated(reason))
211#elif defined(__GNUC__)
212# undef OGDF_DEPRECATED
213# define OGDF_DEPRECATED(reason) __attribute__((deprecated(reason)))
222#define OGDF_DISABLE_WARNING_PUSH
226#define OGDF_DISABLE_WARNING_POP
230#define OGDF_DISABLE_WARNING(warningNumber)
234#define OGDF_DISABLE_WARNING_THROW_TERMINATE
238#define OGDF_DISABLE_WARNING_UNUSED
242#define OGDF_DISABLE_WARNING_DEPRECATED
245# undef OGDF_DISABLE_WARNING_PUSH
246# undef OGDF_DISABLE_WARNING_POP
247# undef OGDF_DISABLE_WARNING
249# define OGDF_DISABLE_WARNING_PUSH __pragma(warning(push))
250# define OGDF_DISABLE_WARNING_POP __pragma(warning(pop))
251# define OGDF_DISABLE_WARNING(warningNumber) __pragma(warning(disable : warningNumber))
252#elif defined(__GNUC__) || defined(__clang__)
253# undef OGDF_DISABLE_WARNING_PUSH
254# undef OGDF_DISABLE_WARNING_POP
255# undef OGDF_DISABLE_WARNING
257# define OGDF_DO_PRAGMA(X) _Pragma(#X)
258# define OGDF_DISABLE_WARNING_PUSH OGDF_DO_PRAGMA(GCC diagnostic push)
259# define OGDF_DISABLE_WARNING_POP OGDF_DO_PRAGMA(GCC diagnostic pop)
260# define OGDF_DISABLE_WARNING(warningName) OGDF_DO_PRAGMA(GCC diagnostic ignored warningName)
264# if defined(__clang__)
265# undef OGDF_DISABLE_WARNING_THROW_TERMINATE
266# define OGDF_DISABLE_WARNING_THROW_TERMINATE OGDF_DISABLE_WARNING("-Wexceptions")
268# undef OGDF_DISABLE_WARNING_THROW_TERMINATE
269# define OGDF_DISABLE_WARNING_THROW_TERMINATE OGDF_DISABLE_WARNING("-Wterminate")
271# undef OGDF_DISABLE_WARNING_UNUSED
272# define OGDF_DISABLE_WARNING_UNUSED OGDF_DISABLE_WARNING("-Wunused")
273# undef OGDF_DISABLE_WARNING_DEPRECATED
274# define OGDF_DISABLE_WARNING_DEPRECATED OGDF_DISABLE_WARNING("-Wdeprecated-declarations")
275#elif defined(_MSC_VER)
276# undef OGDF_DISABLE_WARNING_THROW_TERMINATE
277# define OGDF_DISABLE_WARNING_THROW_TERMINATE OGDF_DISABLE_WARNING(4297)
286#define OGDF_NODISCARD
288#if OGDF_HAS_CPP_ATTRIBUTE(nodiscard)
289# undef OGDF_NODISCARD
290# define OGDF_NODISCARD [[nodiscard]]
291#elif defined(__GNUC__)
292# undef OGDF_NODISCARD
293# define OGDF_NODISCARD __attribute__((warn_unused_result))
306#define OGDF_LIKELY(x) (x)
313#define OGDF_UNLIKELY(x) (x)
317#define OGDF_DECL_ALIGN(b)
320# undef OGDF_DECL_ALIGN
321# define OGDF_DECL_ALIGN(b) __declspec(align(b))
322#elif defined(__GNUC__)
324# define OGDF_LIKELY(x) __builtin_expect((x), 1)
326# define OGDF_UNLIKELY(x) __builtin_expect((x), 0)
327# undef OGDF_DECL_ALIGN
328# define OGDF_DECL_ALIGN(b) __attribute__((aligned(b)))
334#define OGDF_CASE_FALLTHROUGH
335#if OGDF_HAS_CPP_ATTRIBUTE(fallthrough)
336# undef OGDF_CASE_FALLTHROUGH
337# define OGDF_CASE_FALLTHROUGH [[fallthrough]]
338#elif defined(__GNUC__) && __GNUC__ >= 7
339# undef OGDF_CASE_FALLTHROUGH
340# define OGDF_CASE_FALLTHROUGH __attribute__((fallthrough))
397#ifdef OGDF_SYSTEM_WINDOWS
398 return System::Windows;
399#elif defined(OGDF_SYSTEM_OSX)
401#elif defined(OGDF_SYSTEM_UNIX)
404 return System::Unknown
415 static constexpr
bool haveLPSolver() {
return true; }
419#if defined(COIN_OSI_CLP)
420 return LPSolver::Clp;
421#elif defined(COIN_OSI_SYM)
422 return LPSolver::Symphony;
423#elif defined(COIN_OSI_CPX)
424 return LPSolver::CPLEX;
425#elif defined(COIN_OSI_GRB)
426 return LPSolver::Gurobi;
428# error "OGDF is compiled without LP solver. Check your build configuration."
441 static constexpr
bool haveCoin() {
return true; }
452 static constexpr
bool haveAbacus() {
return true; }
464#if defined(OGDF_MEMORY_POOL_TS)
465 return MemoryManager::PoolTS;
466#elif defined(OGDF_MEMORY_POOL_NTS)
467 return MemoryManager::PoolNTS;
468#elif defined(OGDF_MEMORY_MALLOC_TS)
469 return MemoryManager::Malloc;
471# error "OGDF is compiled without memory manager. Check your build configuration."
Provides information about how OGDF has been configured.
static constexpr System whichSystem()
Returns the operating system for which OGDF has been configured.
static const string & toString(System sys)
Converts sys to a (readable) string.
static constexpr LPSolver whichLPSolver()
Returns the LP-solver used by OGDF.
LPSolver
Specifies the LP-solver used by OGDF.
static const string & toString(LPSolver lps)
Converts lps to a (readable) string.
System
Specifies the operating system for which OGDF has been configured/built.
MemoryManager
Specifies the memory-manager used by OGDF.
static const string & toString(MemoryManager mm)
Converts mm to a (readable) string.
static constexpr MemoryManager whichMemoryManager()
Returns the memory manager used by OGDF.
#define OGDF_EXPORT
Specifies that a function or class is exported by the OGDF dynamic library (shared object / DLL),...
#define OGDF_DEPRECATED(reason)
Mark a class / member / function as deprecated.
#define OGDF_DISABLE_WARNING(warningNumber)
Disable the warning with the given number of MSVC or name of g++/clang.
The namespace for all OGDF objects.
@ None
Two geometric objects do not intersect.
std::ostream & operator<<(std::ostream &os, const ogdf::Array< E, INDEX > &a)
Prints array a to output stream os.