]> pd.if.org Git - pdclib/blobdiff - internals/_PDCLIB_aux.h
Import dlmalloc (public domain) as a malloc implementation. Add stub opt/notime
[pdclib] / internals / _PDCLIB_aux.h
index a4e7a621e3565ec5457deeea061b273be519491f..8ea40f4254ced580769d959e866a307b1f0c8dab 100644 (file)
@@ -1,6 +1,5 @@
-/* $Id$ */
-
-/* Release $Name$ */
+#ifndef _PDCLIB_AUX_H
+#define _PDCLIB_AUX_H
 
 /* Auxiliary PDCLib code <_PDCLIB_aux.h>
 
@@ -8,6 +7,11 @@
    Permission is granted to use, modify, and / or redistribute at will.
 */
 
+/* -------------------------------------------------------------------------- */
+/* You should not have to edit anything in this file; if you DO have to, it   */
+/* would be considered a bug / missing feature: notify the author(s).         */
+/* -------------------------------------------------------------------------- */
+
 /* -------------------------------------------------------------------------- */
 /* Standard Version                                                           */
 /* -------------------------------------------------------------------------- */
 #error Compiler does not define _ _STDC_ _ to 1 (not standard-compliant)!
 #endif
 
-#ifndef __STDC_VERSION__
-#define _PDCLIB_C_VERSION 90
-#define _PDCLIB_restrict
-#define _PDCLIB_inline
+#if defined(_PDCLIB_C_VERSION)
+       /* Pass - conditional simplification case */
+#elif !defined(__STDC_VERSION__)
+       #define _PDCLIB_C_VERSION 1990
 #elif __STDC_VERSION__ == 199409L
-#define _PDCLIB_C_VERSION 95
-#define _PDCLIB_restrict
-#define _PDCLIB_inline
+       #define _PDCLIB_C_VERSION 1995
 #elif __STDC_VERSION__ == 199901L
-#define _PDCLIB_C_VERSION 99
-#define _PDCLIB_restrict restrict
-#define _PDCLIB_inline inline
+       #define _PDCLIB_C_VERSION 1999
+#elif __STDC_VERSION__ == 201112L
+       #define _PDCLIB_C_VERSION 2011
 #else
-#error Unsupported _ _STDC_VERSION_ _ (__STDC_VERSION__) (supported: ISO/IEC 9899:1990, 9899/AMD1:1995, and 9899:1999).
+       #error Unsupported _ _STDC_VERSION_ _ (__STDC_VERSION__) (supported: ISO/IEC 9899:1990, 9899/AMD1:1995, 9899:1999, 9899:2011).
+#endif
+
+#if !defined(__cplusplus) || defined(_PDCLIB_CXX_VERSION)
+       /* Pass - conditional simplification case */
+#elif __cplusplus == 201103L
+       #define _PDCLIB_CXX_VERSION 2011
+       #if _PDCLIB_C_VERSION < 2011
+               #undef _PDCLIB_C_VERSION
+               #define _PDCLIB_C_VERSION 2011
+       #endif
+#elif __cplusplus == 199711L
+   #define _PDCLIB_CXX_VERSION 1997
+#else
+   #error Unsupported _ _cplusplus (__cplusplus) (supported: ISO/IEC 14882:1997, ISO/IEC 14882:2011).
+#endif
+
+#if _PDCLIB_C_VERSION >= 1999 || defined(__cplusplus)
+       #ifndef __cplusplus
+               #define _PDCLIB_restrict restrict
+       #endif
+       #define _PDCLIB_inline   inline
+#endif
+
+#if _PDCLIB_CXX_VERSION >= 2011
+       #define _PDCLIB_noreturn [[noreturn]]
+#elif _PDCLIB_C_VERSION >= 2011
+       #define _PDCLIB_noreturn _Noreturn
+#endif
+
+#ifdef _WIN32
+   #define _PDCLIB_EXPORT __declspec(dllexport)
+   #define _PDCLIB_IMPORT __declspec(dllimport)
+#endif
+
+#ifdef __GNUC__
+       #ifndef _PDCLIB_EXPORT
+               #define _PDCLIB_EXPORT __attribute__((__visibility__("protected")))
+       #endif
+
+       #ifndef _PDCLIB_IMPORT
+               #define _PDCLIB_IMPORT
+       #endif
+
+       #ifndef _PDCLIB_HIDDEN
+               #define _PDCLIB_HIDDEN __attribute__((__visibility__("hidden")))
+       #endif
+
+       #ifndef _PDCLIB_restrict
+               #define _PDCLIB_restrict __restrict
+       #endif
+
+       #ifndef _PDCLIB_inline
+               #define _PDCLIB_inline __inline
+       #endif
+
+       #ifndef _PDCLIB_noreturn
+               #define _PDCLIB_noreturn __attribute__((noreturn))
+       #endif
+#endif
+
+#ifndef _PDCLIB_EXPORT
+       #define _PDCLIB_EXPORT
+#endif
+#ifndef _PDCLIB_IMPORT
+       #define _PDCLIB_IMPORT
+#endif
+#ifndef _PDCLIB_HIDDEN
+       #define _PDCLIB_HIDDEN
+#endif
+
+#if defined(_PDCLIB_SHARED) 
+       #if defined(_PDCLIB_BUILD)
+               #define _PDCLIB_API _PDCLIB_EXPORT
+       #else
+               #define _PDCLIB_API _PDCLIB_IMPORT
+       #endif
+#else
+       #define _PDCLIB_API _PDCLIB_HIDDEN
+#endif
+
+#ifndef _PDCLIB_restrict
+       #define _PDCLIB_restrict
+#endif
+
+#ifndef _PDCLIB_inline
+       #define _PDCLIB_inline
+#endif
+
+#ifndef _PDCLIB_noreturn
+       #define _PDCLIB_noreturn
 #endif
 
 #ifndef __STDC_HOSTED__
 #error Compiler does not define _ _STDC_HOSTED_ _ to 0 or 1 (not standard-compliant)!
 #endif
 
-#if _PDCLIB_C_VERSION != 99
-#error PDCLib might not be fully conforming to either C89 or C95 prior to v2.x.
+#ifdef __cplusplus
+       #define _PDCLIB_BEGIN_EXTERN_C extern "C" {
+       #define _PDCLIB_END_EXTERN_C }
+#else
+   #define _PDCLIB_BEGIN_EXTERN_C
+   #define _PDCLIB_END_EXTERN_C
 #endif
 
+/*#if _PDCLIB_C_VERSION != 1999
+#error PDCLib might not be fully conforming to either C89 or C95 prior to v2.x.
+#endif*/
+
 /* -------------------------------------------------------------------------- */
 /* Helper macros:                                                             */
 /* _PDCLIB_cc( x, y ) concatenates two preprocessor tokens without extending  */
 
 #define _PDCLIB_symbol2value( x ) #x
 #define _PDCLIB_symbol2string( x ) _PDCLIB_symbol2value( x )
-#define _PDCLIB_symbol2identity( x ) x
 
-/* -------------------------------------------------------------------------- */
-/* Internal data types                                                        */
-/* -------------------------------------------------------------------------- */
+#ifndef __PDCLIB_PURE
+    #define __PDCLIB_PURE 0
+#endif
 
-/* Structure required by both atexit() and exit() for handling atexit functions */
-struct _PDCLIB_exitfunc_t
-{
-    struct _PDCLIB_exitfunc_t * next;
-    void (*func)( void );
-};
+#ifndef _PDCLIB_POSIX_EX
+    #define _PDCLIB_POSIX_EX (!__PDCLIB_PURE)
+#endif
+#endif
\ No newline at end of file