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
67#if __cplusplus < 201103
71# error "Compiling OGDF requires Visual C++ 11 (Visual Studio 2012) or higher!"
74# elif defined(__GNUC__)
75# ifndef __GXX_EXPERIMENTAL_CXX0X__
76# error "No C++11 support activated for g++ (compile with -std=c++0x or -std=c++11)!"
80# error "Compiling OGDF requires a C++11 compliant compiler!"
85#ifdef __has_cpp_attribute
86# define OGDF_HAS_CPP_ATTRIBUTE(x) \
87 (__has_cpp_attribute(x) && __cplusplus >= __has_cpp_attribute(x))
89# define OGDF_HAS_CPP_ATTRIBUTE(x) 0
161#define OGDF_EXPORT_TEMPL_DECL OGDF_EXPORT
169#define OGDF_EXPORT_TEMPL_INST
180#ifdef OGDF_SYSTEM_WINDOWS
184# define OGDF_EXPORT __declspec(dllexport)
185# undef OGDF_EXPORT_TEMPL_DECL
186# undef OGDF_EXPORT_TEMPL_INST
187# define OGDF_EXPORT_TEMPL_DECL
188# define OGDF_EXPORT_TEMPL_INST OGDF_EXPORT
190# define OGDF_EXPORT __declspec(dllimport)
196# define OGDF_EXPORT __attribute__((visibility("default")))
197# define OGDF_LOCAL __attribute__((visibility("hidden")))
206#define OGDF_DEPRECATED(reason)
208#if OGDF_HAS_CPP_ATTRIBUTE(deprecated)
209# undef OGDF_DEPRECATED
210# define OGDF_DEPRECATED(reason) [[deprecated(reason)]]
211#elif defined(_MSC_VER)
212# undef OGDF_DEPRECATED
213# define OGDF_DEPRECATED(reason) __declspec(deprecated(reason))
214#elif defined(__GNUC__)
215# undef OGDF_DEPRECATED
216# define OGDF_DEPRECATED(reason) __attribute__((deprecated(reason)))
225#define OGDF_DISABLE_WARNING_PUSH
229#define OGDF_DISABLE_WARNING_POP
233#define OGDF_DISABLE_WARNING(warningNumber)
237#define OGDF_DISABLE_WARNING_THROW_TERMINATE
241#define OGDF_DISABLE_WARNING_UNUSED
245#define OGDF_DISABLE_WARNING_DEPRECATED
248# undef OGDF_DISABLE_WARNING_PUSH
249# undef OGDF_DISABLE_WARNING_POP
250# undef OGDF_DISABLE_WARNING
252# define OGDF_DISABLE_WARNING_PUSH __pragma(warning(push))
253# define OGDF_DISABLE_WARNING_POP __pragma(warning(pop))
254# define OGDF_DISABLE_WARNING(warningNumber) __pragma(warning(disable : warningNumber))
255#elif defined(__GNUC__) || defined(__clang__)
256# undef OGDF_DISABLE_WARNING_PUSH
257# undef OGDF_DISABLE_WARNING_POP
258# undef OGDF_DISABLE_WARNING
260# define OGDF_DO_PRAGMA(X) _Pragma(#X)
261# define OGDF_DISABLE_WARNING_PUSH OGDF_DO_PRAGMA(GCC diagnostic push)
262# define OGDF_DISABLE_WARNING_POP OGDF_DO_PRAGMA(GCC diagnostic pop)
263# define OGDF_DISABLE_WARNING(warningName) OGDF_DO_PRAGMA(GCC diagnostic ignored warningName)
267# if defined(__clang__)
268# undef OGDF_DISABLE_WARNING_THROW_TERMINATE
269# define OGDF_DISABLE_WARNING_THROW_TERMINATE OGDF_DISABLE_WARNING("-Wexceptions")
271# undef OGDF_DISABLE_WARNING_THROW_TERMINATE
272# define OGDF_DISABLE_WARNING_THROW_TERMINATE OGDF_DISABLE_WARNING("-Wterminate")
274# undef OGDF_DISABLE_WARNING_UNUSED
275# define OGDF_DISABLE_WARNING_UNUSED OGDF_DISABLE_WARNING("-Wunused")
276# undef OGDF_DISABLE_WARNING_DEPRECATED
277# define OGDF_DISABLE_WARNING_DEPRECATED OGDF_DISABLE_WARNING("-Wdeprecated-declarations")
278#elif defined(_MSC_VER)
279# undef OGDF_DISABLE_WARNING_THROW_TERMINATE
280# define OGDF_DISABLE_WARNING_THROW_TERMINATE OGDF_DISABLE_WARNING(4297)
289#define OGDF_NODISCARD
291#if OGDF_HAS_CPP_ATTRIBUTE(nodiscard)
292# undef OGDF_NODISCARD
293# define OGDF_NODISCARD [[nodiscard]]
294#elif defined(__GNUC__)
295# undef OGDF_NODISCARD
296# define OGDF_NODISCARD __attribute__((warn_unused_result))
309#define OGDF_LIKELY(x) (x)
316#define OGDF_UNLIKELY(x) (x)
320#define OGDF_DECL_ALIGN(b)
323# undef OGDF_DECL_ALIGN
324# define OGDF_DECL_ALIGN(b) __declspec(align(b))
325#elif defined(__GNUC__)
327# define OGDF_LIKELY(x) __builtin_expect((x), 1)
329# define OGDF_UNLIKELY(x) __builtin_expect((x), 0)
330# undef OGDF_DECL_ALIGN
331# define OGDF_DECL_ALIGN(b) __attribute__((aligned(b)))
337#define OGDF_CASE_FALLTHROUGH
338#if OGDF_HAS_CPP_ATTRIBUTE(fallthrough)
339# undef OGDF_CASE_FALLTHROUGH
340# define OGDF_CASE_FALLTHROUGH [[fallthrough]]
341#elif defined(__GNUC__) && __GNUC__ >= 7
342# undef OGDF_CASE_FALLTHROUGH
343# define OGDF_CASE_FALLTHROUGH __attribute__((fallthrough))
400#ifdef OGDF_SYSTEM_WINDOWS
401 return System::Windows;
402#elif defined(OGDF_SYSTEM_OSX)
404#elif defined(OGDF_SYSTEM_UNIX)
407 return System::Unknown
418 static constexpr
bool haveLPSolver() {
return true; }
422#if defined(COIN_OSI_CLP)
423 return LPSolver::Clp;
424#elif defined(COIN_OSI_SYM)
425 return LPSolver::Symphony;
426#elif defined(COIN_OSI_CPX)
427 return LPSolver::CPLEX;
428#elif defined(COIN_OSI_GRB)
429 return LPSolver::Gurobi;
431# error "OGDF is compiled without LP solver. Check your build configuration."
444 static constexpr
bool haveCoin() {
return true; }
455 static constexpr
bool haveAbacus() {
return true; }
467#if defined(OGDF_MEMORY_POOL_TS)
468 return MemoryManager::PoolTS;
469#elif defined(OGDF_MEMORY_POOL_NTS)
470 return MemoryManager::PoolNTS;
471#elif defined(OGDF_MEMORY_MALLOC_TS)
472 return MemoryManager::Malloc;
474# 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.