 |
NAVTOR SDK
v.3.0
Software Development Kit for fast and efficient development of ECDIS, ECS and generic marine applications
|
|
Go to the documentation of this file. 1 #ifndef SDK_BASE_PLATFORM_H_
11 #define SDK_BASE_PLATFORM_H_
17 #if (_MSC_VER >= 1600) || defined(__GNUC__)
22 #define SDK_VERSION_MAJOR ${SDK_VERSION_MAJOR}
23 #define SDK_VERSION_MINOR ${SDK_VERSION_MINOR}
24 #define SDK_VERSION_PATCH ${SDK_VERSION_PATCH}
26 #if !defined(SDK_ARCH_CPU_LITTLE_ENDIAN)
27 # define SDK_ARCH_CPU_LITTLE_ENDIAN 1
31 #if defined(__APPLE__)
32 # include <TargetConditionals.h>
33 # if !defined(SDK_OS_MAC) // MacOS/IOS
36 # if defined(TARGET_OS_MACOS) && !defined(SDK_OS_MACOSX) // MacOS
37 # define SDK_OS_MACOSX 1
39 # if defined(TARGET_OS_IOS) && !defined(SDK_OS_IOS) // IOS
42 #elif defined(ANDROID) || defined(__ANDROID__) // Android
43 # if !defined(SDK_OS_ANDROID)
44 # define SDK_OS_ANDROID 1
46 #elif defined(__linux__) || defined(__linux) // Linux
47 # if !defined(SDK_OS_LINUX)
48 # define SDK_OS_LINUX 1
50 #elif defined(_WIN32) || defined(__WIN32__) // Windows
51 # if !defined(SDK_OS_WIN)
55 # error "Error: Unknown or unsupported OS!"
59 #if defined(SDK_OS_MAC) || defined(SDK_OS_LINUX) || defined(SDK_OS_ANDROID)
60 # if !defined(SDK_OS_POSIX)
61 # define SDK_OS_POSIX 1
66 #if defined(_DEBUG) || defined(DEBUG)
67 # if !defined(SDK_DEBUG)
71 # if !defined(SDK_NDEBUG)
77 #if defined(__clang__)
80 # if !defined(SDK_CC_CLANG)
83 #elif defined(_MSC_VER)
84 # if !defined(SDK_CC_MSVC)
87 #elif defined(__BORLANDC__)
88 # if !defined(SDK_CC_BCC)
91 #elif defined(__GNUC__)
92 # if !defined(SDK_CC_GNU)
96 # if defined(__MINGW32__)
97 # if !defined(SDK_CC_MINGW)
104 #if defined(_WIN64) || defined(__LP64__) || defined(__x86_64) || defined(__x86_64__) || defined(_M_X64) || defined(__powerpc64__) || defined(__alpha__) || defined(__ia64__) || defined(__s390__) || defined(__s390x__) || defined(__arm64__) || defined(__aarch64__)
105 # if !defined(SDK_ARCH_64BITS)
106 # define SDK_ARCH_64BITS
109 # if !defined(SDK_ARCH_32BITS)
110 # define SDK_ARCH_32BITS
114 #if defined(__i386) || defined(__i386__) || defined(_X86_) || defined(__x86_64) || defined(_M_IX86) || defined(_M_X64)
115 # if !defined(SDK_ARCH_X86)
116 # define SDK_ARCH_X86
118 #elif defined(__arm__) || defined(__thumb__) || defined(__arm64__) || defined(__aarch64__)
119 # if !defined(SDK_ARCH_ARM)
120 # define SDK_ARCH_ARM
123 # error "Error: Unsupported architecture!"
130 #if (defined(SDK_ARCH_X86) || defined(SDK_ARCH_ARM)) && defined(SDK_ARCH_32BITS)
132 typedef signed char SDKInt8;
133 typedef unsigned char SDKUInt8;
134 typedef signed short SDKInt16;
135 typedef unsigned short SDKUInt16;
136 typedef signed long SDKInt32;
137 typedef unsigned long SDKUInt32;
138 typedef signed long long SDKInt64;
139 typedef unsigned long long SDKUInt64;
140 typedef SDKInt32 SDKIntptr;
141 typedef SDKUInt32 SDKUIntptr;
143 #elif (defined(SDK_ARCH_X86) || defined(SDK_ARCH_ARM)) && defined(SDK_ARCH_64BITS)
144 typedef signed char SDKInt8;
145 typedef unsigned char SDKUInt8;
146 typedef signed short SDKInt16;
147 typedef unsigned short SDKUInt16;
148 typedef signed int SDKInt32;
149 typedef unsigned int SDKUInt32;
150 typedef int64_t SDKInt64;
151 typedef uint64_t SDKUInt64;
152 typedef SDKInt64 SDKIntptr;
153 typedef SDKUInt64 SDKUIntptr;
155 #error "Error: Portable integers were not defined!"
181 #if defined(SDK_CC_MSVC)
207 #if !defined(SDK_DETERMINE_BYTES_ORDER)
213 SDK_LITTLE_ENDIAN = 0x04030201UL,
214 SDK_BIG_ENDIAN = 0x01020304UL,
215 SDK_PDP_ENDIAN = 0x02010403UL
222 } g_sdk_bytes_order_checker_host = {{ 1, 2, 3, 4 }};
229 # define SDK_DETERMINE_BYTES_ORDER (g_sdk_bytes_order_checker_host.val)
230 #endif // !defined(SDK_DETERMINE_BYTES_ORDER)
233 #if !defined(SDK_ARRAY_LENGTH)
234 # define SDK_ARRAY_LENGTH( array ) ( sizeof( array ) / sizeof( array[0] ) )
238 #if !defined(SDK_UNUSED)
239 # define SDK_UNUSED( x ) (void)x;
247 #if defined(SDK_OS_WIN)
248 # define SDK_ERRNO ::GetLastError()
249 #elif defined(SDK_OS_POSIX)
250 # define SDK_ERRNO errno
256 #if defined(SDK_CC_MSVC)
257 # define SDK_INLINE __inline
258 # define SDK_FORCE_INLINE __forceinline
259 # define SDK_NO_INLINE __declspec(noinline)
260 #elif defined(SDK_CC_BCC)
261 # define SDK_INLINE inline
262 # define SDK_FORCE_INLINE inline
263 # define SDK_NO_INLINE
264 #else // assumes the compiler is GCC-compatible
265 # define SDK_INLINE __inline__
266 # define SDK_FORCE_INLINE __attribute__((always_inline))
267 # define SDK_NO_INLINE __attribute__((noinline))
271 #define SDK_EXTERN_C extern "C"
272 #define SDK_EXTERN_C_BEGIN extern "C" {
273 #define SDK_EXTERN_C_END }
279 #if defined(SDK_OS_ANDROID)
280 # define S_IREAD S_IRUSR
281 # define S_IWRITE S_IWUSR
282 # define S_IEXEC S_IXUSR
286 #if defined(SDK_CC_MSVC)
287 # define SDK_DLL_LOCAL
288 # define SDK_DLL_EXPORT __declspec(dllexport)
289 # define SDK_DLL_IMPORT __declspec(dllimport)
291 # define SDK_DLL_LOCAL __attribute__ ((visibility ("hidden")))
292 # define SDK_DLL_EXPORT __attribute__ ((visibility ("default")))
293 # define SDK_DLL_IMPORT __attribute__ ((visibility ("default")))
304 #if defined (SDK_DYNAMIC_LIB)
305 # if defined(SDK_EXPORT)
306 # define SDK_EXPORT_API SDK_DLL_EXPORT
308 # define SDK_EXPORT_API SDK_DLL_IMPORT
311 # define SDK_EXPORT_API
318 #if !defined(SDK_STATIC_BASE_LIBRARY)
320 # if defined(SDK_BASE_LIBRARY_EXPORT) // SDK_BASE_LIBRARY_EXPORT uses internally only
321 # define SDK_BASE_LIBRARY_EXPORT_API SDK_DLL_EXPORT
323 # define SDK_BASE_LIBRARY_EXPORT_API SDK_DLL_IMPORT
327 # define SDK_BASE_LIBRARY_EXPORT_API
334 #if defined(SDK_CC_MSVC)
335 # define SDK_PACK( decl ) __pragma( pack(push, 1) ) decl __pragma( pack(pop) )
336 #elif defined(SDK_CC_BCC)
337 # define SDK_PACK( decl ) decl
339 # // NAVICO #if defined(SDK_ARCH_ARM)
341 # define SDK_PACK( decl ) __packed decl
343 # define SDK_PACK( decl ) decl __attribute__((__packed__))
347 #if !defined(SDK_CDECL)
348 # if defined(SDK_CC_MSVC)
349 # define SDK_CDECL __cdecl
350 # elif defined(SDK_CC_BCC)
351 # define SDK_CDECL __cdecl
353 # if defined(SDK_CC_GNU) || defined(SDK_CC_GCC) || defined(SDK_CC_CLANG)
354 # define SDK_CDECL //__attribute__((cdecl))
362 #if !defined(SDK_CALLTYPE)
363 # define SDK_CALLTYPE SDK_CDECL
366 #if !defined(SDK_APICALLTYPE)
367 # define SDK_APICALLTYPE SDK_CALLTYPE
370 #if !defined(SDK_API)
371 # define SDK_API SDKInt32 SDK_APICALLTYPE
374 #if defined(SDK_CC_GCC) || defined(SDK_CC_CLANG)
375 # if !defined(__cdecl)
381 #if defined(SDK_CC_MSVC)
382 # pragma warning( push )
383 # pragma warning( default : 4005 )
384 # pragma warning( disable : 4100 ) // unreferenced formal parameter
387 #if defined(SDK_CC_BCC)
388 # pragma warn -8098 // Multi-character constant
395 #if defined(SDK_CC_MSVC)
396 # define OVERRIDE override
397 #elif defined(SDK_CC_CLANG)
398 # define OVERRIDE override
403 #if defined(SDK_ARCH_64BITS)
404 typedef SDKInt64 SDKAtomicRefCount;
406 typedef SDKInt32 SDKAtomicRefCount;
411 #if defined(SDK_CC_CLANG)
421 # if defined(SDK_CC_MSVC)
422 # if (_MSC_FULL_VER > 100000000)
423 # define SDK_MSVC_FULL_VER _MSC_FULL_VER
425 # define SDK_MSVC_FULL_VER (_MSC_FULL_VER * 10)
429 # pragma warning( disable : 4503 ) // warning: decorated name length exceeded
432 # if (_MSC_VER >= 1600)
433 # define SDK_CXX0X_SYNTAX_SUPPORT 1
434 # define SDK_HAS_CXX0X_AUTO_DECLARATIONS
435 # define SDK_HAS_CXX0X_AUTO_MULTIDECLARATIONS
436 # define SDK_HAS_CXX0X_LAMBDAS
437 # define SDK_HAS_CXX0X_RVALUE_REFS
438 # define SDK_HAS_CXX0X_STATIC_ASSERT
439 # define SDK_HAS_CXX0X_NULLPTR
440 # define SDK_HAS_CXX0X_DECLTYPE
441 # endif // _MSC_VER >= 1600
444 # if _MSC_FULL_VER >= 180020827
445 # define SDK_HAS_CXX0X_DEFAULTED_FUNCTIONS
446 # define SDK_HAS_CXX0X_NON_PUBLIC_DEFAULTED_FUNCTIONS
448 # elif defined(SDK_CC_GNU)
449 # define SDK_GNUC_FULL_VER (10000 * __GNUC__ + 100 * __GNUC_MINOR__ + __GNUC_PATCHLEVEL__)
450 # if defined(__GXX_EXPERIMENTAL_CXX0X__) || (__cplusplus >= 201103L)
451 # define SDK_CXX0X_SYNTAX_SUPPORT 1
453 # if (SDK_GNUC_FULL_VER >= 40300) && defined(SDK_CXX0X_SYNTAX_SUPPORT)
454 # define SDK_HAS_CXX0X_DECLTYPE
455 # define SDK_HAS_CXX0X_RVALUE_REFS
456 # define SDK_HAS_CXX0X_STATIC_ASSERT
457 # define SDK_HAS_CXX0X_VARIADIC_TMPL
459 # if (SDK_GNUC_FULL_VER >= 40400) && defined(SDK_CXX0X_SYNTAX_SUPPORT)
460 # define SDK_HAS_CXX0X_DEFAULTED_FUNCTIONS
462 # if (SDK_GNUC_FULL_VER >= 40500) && defined(SDK_CXX0X_SYNTAX_SUPPORT)
463 # define SDK_HAS_CXX0X_NON_PUBLIC_DEFAULTED_FUNCTIONS
465 # elif defined(SDK_CC_BCC)
467 # if (__BORLANDC__ >= 0x599)
468 # pragma defineonoption BOOST_CODEGEAR_0X_SUPPORT -Ax
473 # if !defined( BOOST_CODEGEAR_0X_SUPPORT ) || (__BORLANDC__ < 0x610)
474 # define SDK_NO_CXX11_CHAR16_T
475 # define SDK_NO_CXX11_CHAR32_T
476 # define SDK_NO_CXX11_DECLTYPE
477 # define SDK_NO_CXX11_EXPLICIT_CONVERSION_OPERATORS
478 # define SDK_NO_CXX11_EXTERN_TEMPLATE
479 # define SDK_NO_CXX11_RVALUE_REFERENCES
480 # define SDK_NO_CXX11_SCOPED_ENUMS
481 # define SDK_NO_CXX11_STATIC_ASSERT
483 # define SDK_CXX0X_SYNTAX_SUPPORT 1
484 # define SDK_HAS_CXX0X_ALIGNOF
485 # define SDK_HAS_CXX0X_CHAR16_T
486 # define SDK_HAS_CXX0X_CHAR32_T
487 # define SDK_HAS_CXX0X_DECLTYPE
488 # define SDK_HAS_CXX0X_EXPLICIT_CONVERSION_OPS
489 # define SDK_HAS_CXX0X_REF_QUALIFIER
490 # define SDK_HAS_CXX0X_RVALUE_REFS
491 # define SDK_HAS_CXX0X_STATIC_ASSERT
493 # endif // SDK_CC_BCC
495 # if defined(SDK_HAS_CXX0X_DEFAULTED_FUNCTIONS) \
496 && defined(SDK_HAS_CXX0X_NON_PUBLIC_DEFAULTED_FUNCTIONS)
497 # define SDK_CXX0X_DEFAULTED_FUNCTION(fun, body) fun = default;
499 # define SDK_CXX0X_DEFAULTED_FUNCTION(fun, body) fun body
502 # define SDK_PP_COMMA() ,
505 #endif // SDK_BASE_PLATFORM_H_
static const float SDK_MIN_FLOAT
Min limit of float.
Definition: platform.h:199
static const SDKInt64 SDK_MAX_INT64
Max limit of 64-bit signed integer.
Definition: platform.h:188
static const SDKUInt8 SDK_MAX_UINT8
Max limit of 8-bit unsigned integer.
Definition: platform.h:165
static const SDKInt32 SDK_MIN_INT32
Min limit of 32-bit signed integer.
Definition: platform.h:175
static const SDKInt64 SDK_MIN_INT64
Min limit of 64-bit signed integer.
Definition: platform.h:194
static const double SDK_MAX_DOUBLE
Max limit of double.
Definition: platform.h:202
static const SDKInt16 SDK_MIN_INT16
Min limit of 16-bit signed integer.
Definition: platform.h:168
static const SDKInt32 SDK_MAX_INT32
Max limit of 32-bit signed integer.
Definition: platform.h:177
static const double SDK_MIN_DOUBLE
Min limit of double.
Definition: platform.h:204
static const SDKInt8 SDK_MAX_INT8
Max limit of 8-bit signed integer.
Definition: platform.h:163
static const SDKUInt32 SDK_MAX_UINT32
Max limit of 32-bit unsigned integer.
Definition: platform.h:179
static const SDKUInt64 SDK_MAX_UINT64
Max limit of 64-bit unsigned integer.
Definition: platform.h:190
static const float SDK_MAX_FLOAT
Max limit of float.
Definition: platform.h:197
static const SDKInt8 SDK_MIN_INT8
Min limit of 8-bit signed integer.
Definition: platform.h:161
static const SDKUInt16 SDK_MAX_UINT16
Max limit of 16-bit unsigned integer.
Definition: platform.h:172
static const SDKInt16 SDK_MAX_INT16
Max limit of 16-bit signed integer.
Definition: platform.h:170