/* xbt.h - Public interface to the xbt (simgrid's toolbox) */
-/* Copyright (c) 2004-2018. The SimGrid Team. All rights reserved. */
+/* Copyright (c) 2004-2019. The SimGrid Team. All rights reserved. */
/* This program is free software; you can redistribute it and/or modify it
* under the terms of the license (GNU LGPL) which comes with this package. */
#define XBT_ATTRIB_UNUSED [[maybe_unused]]
#endif
#if __cplusplus >= 201402L
-#define XBT_ATTRIB_DEPRECATED(msg) [[deprecated(msg)]]
+#define XBT_ATTRIB_DEPRECATED(mesg) [[deprecated(mesg)]]
#endif
#elif defined(__STDC_VERSION__)
#if __STDC_VERSION__ >= 201112L
#define XBT_ATTRIB_UNUSED __attribute__((unused))
#endif
#ifndef XBT_ATTRIB_DEPRECATED
-#define XBT_ATTRIB_DEPRECATED(msg) __attribute__((deprecated(msg)))
+#define XBT_ATTRIB_DEPRECATED(mesg) __attribute__((deprecated(mesg)))
#endif
-#define XBT_ATTRIB_DEPRECATED_v320(msg) XBT_ATTRIB_DEPRECATED(msg) /* Will be dropped in v3.20 */
-#define XBT_ATTRIB_DEPRECATED_v321(msg) XBT_ATTRIB_DEPRECATED(msg) /* Will be dropped in v3.21 */
-#define XBT_ATTRIB_DEPRECATED_v322(msg) XBT_ATTRIB_DEPRECATED(msg) /* Will be dropped in v3.22 */
+#define XBT_ATTRIB_DEPRECATED_v325(mesg) \
+ XBT_ATTRIB_DEPRECATED(mesg " (this compatibility wrapper will be dropped in v3.25)") /* Will be dropped in v3.25 */
+#define XBT_ATTRIB_DEPRECATED_v327(mesg) \
+ XBT_ATTRIB_DEPRECATED(mesg " (this compatibility wrapper will be dropped in v3.27)") /* Will be dropped in v3.27 */
-#define XBT_ATTRIB_CONSTRUCTOR(prio) __attribute__((__constructor__(prio)))
-#define XBT_ATTRIB_DESTRUCTOR(prio) __attribute__((__destructor__(prio)))
-
-#if defined(__GNUC__)
-# define XBT_ALWAYS_INLINE inline __attribute__ ((always_inline))
+#if !defined(__APPLE__)
+# define XBT_ATTRIB_CONSTRUCTOR(prio) __attribute__((__constructor__(prio)))
+# define XBT_ATTRIB_DESTRUCTOR(prio) __attribute__((__destructor__(prio)))
#else
-# define XBT_ALWAYS_INLINE inline
+# define XBT_ATTRIB_CONSTRUCTOR(prio) __attribute__((__constructor__))
+# define XBT_ATTRIB_DESTRUCTOR(prio) __attribute__((__destructor__))
#endif
-#if defined(__GNUC__)
-# define XBT_THREAD_LOCAL __thread
-#else
-# define XBT_THREAD_LOCAL No thread local on this architecture
+#ifndef XBT_ALWAYS_INLINE /* defined also in libsosp */
+# if defined(__GNUC__)
+# define XBT_ALWAYS_INLINE inline __attribute__ ((always_inline))
+# else
+# define XBT_ALWAYS_INLINE inline
+# endif
#endif
-/* improvable on gcc (by evaluating arguments only once), but wouldn't be portable */
-#ifdef MIN
-# undef MIN
-#endif
-#define MIN(a,b) ((a)<(b)?(a):(b))
+/* Stringify argument. */
+#define _XBT_STRINGIFY(a) #a
-#ifdef MAX
-# undef MAX
-#endif
-#define MAX(a,b) ((a)>(b)?(a):(b))
+/* Concatenate arguments. _XBT_CONCAT2 adds a level of indirection over _XBT_CONCAT. */
+#define _XBT_CONCAT(a, b) a##b
+#define _XBT_CONCAT2(a, b) _XBT_CONCAT(a, b)
+#define _XBT_CONCAT3(a, b, c) _XBT_CONCAT2(_XBT_CONCAT(a, b), c)
+#define _XBT_CONCAT4(a, b, c, d) _XBT_CONCAT2(_XBT_CONCAT3(a, b, c), d)
/*
* Expands to `one' if there is only one argument for the variadic part.
/* Build the DLL */
#if defined(DLL_EXPORT)
-# define XBT_PUBLIC __declspec(dllexport)
-# define XBT_EXPORT_NO_IMPORT(type) __declspec(dllexport) type
-# define XBT_IMPORT_NO_EXPORT(type) type
-# define XBT_PUBLIC_DATA(type) extern __declspec(dllexport) type
-# define XBT_PUBLIC_CLASS class __declspec(dllexport)
+# define XBT_PUBLIC __declspec(dllexport)
+# define XBT_EXPORT_NO_IMPORT __declspec(dllexport)
+# define XBT_IMPORT_NO_EXPORT
+# define XBT_PUBLIC_DATA extern __declspec(dllexport)
# define XBT_PRIVATE
/* Link against the DLL */
#elif (defined(_WIN32) && !defined(DLL_EXPORT))
-# define XBT_PUBLIC __declspec(dllimport)
-# define XBT_EXPORT_NO_IMPORT(type) type
-# define XBT_IMPORT_NO_EXPORT(type) __declspec(dllimport) type
-# define XBT_PUBLIC_DATA(type) extern __declspec(dllimport) type
-# define XBT_PUBLIC_CLASS class __declspec(dllimport)
+# define XBT_PUBLIC __declspec(dllimport)
+# define XBT_EXPORT_NO_IMPORT
+# define XBT_IMPORT_NO_EXPORT __declspec(dllimport)
+# define XBT_PUBLIC_DATA extern __declspec(dllimport)
# define XBT_PRIVATE
#elif defined(__ELF__)
-# define XBT_PUBLIC __attribute__((visibility("default")))
-# define XBT_EXPORT_NO_IMPORT(type) __attribute__((visibility("default"))) type
-# define XBT_IMPORT_NO_EXPORT(type) __attribute__((visibility("default"))) type
-# define XBT_PUBLIC_DATA(type) extern __attribute__((visibility("default"))) type
-# define XBT_PUBLIC_CLASS class __attribute__((visibility("default")))
-# define XBT_PRIVATE __attribute__((visibility("hidden")))
+# define XBT_PUBLIC __attribute__((visibility("default")))
+# define XBT_EXPORT_NO_IMPORT __attribute__((visibility("default")))
+# define XBT_IMPORT_NO_EXPORT __attribute__((visibility("default")))
+# define XBT_PUBLIC_DATA extern __attribute__((visibility("default")))
+# define XBT_PRIVATE __attribute__((visibility("hidden")))
#else
-# define XBT_PUBLIC /* public */
-# define XBT_EXPORT_NO_IMPORT(type) type
-# define XBT_IMPORT_NO_EXPORT(type) type
-# define XBT_PUBLIC_DATA(type) extern type
-# define XBT_PUBLIC_CLASS class
-# define XBT_PRIVATE /** @private */
+# define XBT_PUBLIC /* public */
+# define XBT_EXPORT_NO_IMPORT
+# define XBT_IMPORT_NO_EXPORT
+# define XBT_PUBLIC_DATA extern
+# define XBT_PRIVATE /** @private */
#endif
-#define TRUE 1
-#define FALSE 0
-
/* C++ users need love */
#ifndef SG_BEGIN_DECL
# ifdef __cplusplus