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# define OGDF_CPLUSPLUS _MSVC_LANG
68# define OGDF_CPLUSPLUS __cplusplus
72#if OGDF_CPLUSPLUS < 201703L
75# error "Compiling OGDF requires C++17 (Visual Studio 2017 15.8) or higher!"
77# elif defined(__GNUC__)
78# error "Compiling OGDF requires C++17 (compile with -std=c++17)!"
81# error "Compiling OGDF requires a C++17 compliant compiler!"
86#ifdef __has_cpp_attribute
87# define OGDF_HAS_CPP_ATTRIBUTE(x) \
88 (__has_cpp_attribute(x) && OGDF_CPLUSPLUS >= __has_cpp_attribute(x))
90# define OGDF_HAS_CPP_ATTRIBUTE(x) 0
162#define OGDF_EXPORT_TEMPL_DECL OGDF_EXPORT
170#define OGDF_EXPORT_TEMPL_INST
181#ifdef OGDF_SYSTEM_WINDOWS
185# define OGDF_EXPORT __declspec(dllexport)
186# undef OGDF_EXPORT_TEMPL_DECL
187# undef OGDF_EXPORT_TEMPL_INST
188# define OGDF_EXPORT_TEMPL_DECL
189# define OGDF_EXPORT_TEMPL_INST OGDF_EXPORT
191# define OGDF_EXPORT __declspec(dllimport)
197# define OGDF_EXPORT __attribute__((visibility("default")))
198# define OGDF_LOCAL __attribute__((visibility("hidden")))
207#define OGDF_DEPRECATED(reason)
209#if OGDF_HAS_CPP_ATTRIBUTE(deprecated)
210# undef OGDF_DEPRECATED
211# define OGDF_DEPRECATED(reason) [[deprecated(reason)]]
212#elif defined(_MSC_VER)
213# undef OGDF_DEPRECATED
214# define OGDF_DEPRECATED(reason) __declspec(deprecated(reason))
215#elif defined(__GNUC__)
216# undef OGDF_DEPRECATED
217# define OGDF_DEPRECATED(reason) __attribute__((deprecated(reason)))
226#define OGDF_DISABLE_WARNING_PUSH
230#define OGDF_DISABLE_WARNING_POP
234#define OGDF_DISABLE_WARNING(warningNumber)
238#define OGDF_DISABLE_WARNING_THROW_TERMINATE
242#define OGDF_DISABLE_WARNING_UNUSED
246#define OGDF_DISABLE_WARNING_DEPRECATED
249# undef OGDF_DISABLE_WARNING_PUSH
250# undef OGDF_DISABLE_WARNING_POP
251# undef OGDF_DISABLE_WARNING
253# define OGDF_DISABLE_WARNING_PUSH __pragma(warning(push))
254# define OGDF_DISABLE_WARNING_POP __pragma(warning(pop))
255# define OGDF_DISABLE_WARNING(warningNumber) __pragma(warning(disable : warningNumber))
256#elif defined(__GNUC__) || defined(__clang__)
257# undef OGDF_DISABLE_WARNING_PUSH
258# undef OGDF_DISABLE_WARNING_POP
259# undef OGDF_DISABLE_WARNING
261# define OGDF_DO_PRAGMA(X) _Pragma(#X)
262# define OGDF_DISABLE_WARNING_PUSH OGDF_DO_PRAGMA(GCC diagnostic push)
263# define OGDF_DISABLE_WARNING_POP OGDF_DO_PRAGMA(GCC diagnostic pop)
264# define OGDF_DISABLE_WARNING(warningName) OGDF_DO_PRAGMA(GCC diagnostic ignored warningName)
268# if defined(__clang__)
269# undef OGDF_DISABLE_WARNING_THROW_TERMINATE
270# define OGDF_DISABLE_WARNING_THROW_TERMINATE OGDF_DISABLE_WARNING("-Wexceptions")
272# undef OGDF_DISABLE_WARNING_THROW_TERMINATE
273# define OGDF_DISABLE_WARNING_THROW_TERMINATE OGDF_DISABLE_WARNING("-Wterminate")
275# undef OGDF_DISABLE_WARNING_UNUSED
276# define OGDF_DISABLE_WARNING_UNUSED OGDF_DISABLE_WARNING("-Wunused")
277# undef OGDF_DISABLE_WARNING_DEPRECATED
278# define OGDF_DISABLE_WARNING_DEPRECATED OGDF_DISABLE_WARNING("-Wdeprecated-declarations")
279#elif defined(_MSC_VER)
280# undef OGDF_DISABLE_WARNING_THROW_TERMINATE
281# define OGDF_DISABLE_WARNING_THROW_TERMINATE OGDF_DISABLE_WARNING(4297)
290#define OGDF_NODISCARD
292#if OGDF_HAS_CPP_ATTRIBUTE(nodiscard)
293# undef OGDF_NODISCARD
294# define OGDF_NODISCARD [[nodiscard]]
295#elif defined(__GNUC__)
296# undef OGDF_NODISCARD
297# define OGDF_NODISCARD __attribute__((warn_unused_result))
310#define OGDF_LIKELY(x) (x)
317#define OGDF_UNLIKELY(x) (x)
321#define OGDF_DECL_ALIGN(b)
324# undef OGDF_DECL_ALIGN
325# define OGDF_DECL_ALIGN(b) __declspec(align(b))
326#elif defined(__GNUC__)
328# define OGDF_LIKELY(x) __builtin_expect((x), 1)
330# define OGDF_UNLIKELY(x) __builtin_expect((x), 0)
331# undef OGDF_DECL_ALIGN
332# define OGDF_DECL_ALIGN(b) __attribute__((aligned(b)))
338#define OGDF_CASE_FALLTHROUGH
339#if OGDF_HAS_CPP_ATTRIBUTE(fallthrough)
340# undef OGDF_CASE_FALLTHROUGH
341# define OGDF_CASE_FALLTHROUGH [[fallthrough]]
342#elif defined(__GNUC__) && __GNUC__ >= 7
343# undef OGDF_CASE_FALLTHROUGH
344# define OGDF_CASE_FALLTHROUGH __attribute__((fallthrough))
401#ifdef OGDF_SYSTEM_WINDOWS
402 return System::Windows;
403#elif defined(OGDF_SYSTEM_OSX)
405#elif defined(OGDF_SYSTEM_UNIX)
408 return System::Unknown
419 static constexpr
bool haveLPSolver() {
return true; }
423#if defined(COIN_OSI_CLP)
424 return LPSolver::Clp;
425#elif defined(COIN_OSI_SYM)
426 return LPSolver::Symphony;
427#elif defined(COIN_OSI_CPX)
428 return LPSolver::CPLEX;
429#elif defined(COIN_OSI_GRB)
430 return LPSolver::Gurobi;
432# error "OGDF is compiled without LP solver. Check your build configuration."
445 static constexpr
bool haveCoin() {
return true; }
456 static constexpr
bool haveAbacus() {
return true; }
468#if defined(OGDF_MEMORY_POOL_TS)
469 return MemoryManager::PoolTS;
470#elif defined(OGDF_MEMORY_POOL_NTS)
471 return MemoryManager::PoolNTS;
472#elif defined(OGDF_MEMORY_MALLOC_TS)
473 return MemoryManager::Malloc;
475# 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.