# define XBT_INLINE inline
#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))
+
+#ifdef MAX
+# undef MAX
+#endif
+#define MAX(a,b) ((a)>(b)?(a):(b))
+
+
/*
* Function calling convention (not used for now)
*/
# define XBT_PUBLIC(type) __declspec(dllexport) type
# define XBT_EXPORT_NO_IMPORT(type) __declspec(dllexport) type
# define XBT_IMPORT_NO_EXPORT(type) type
-# define XBT_PUBLIC_DATA __declspec(dllexport)
+# define XBT_PUBLIC_DATA(type) __declspec(dllexport) type
/* Pack everything up statically */
#elif defined(DLL_STATIC)
# define XBT_PUBLIC(type) type
# define XBT_EXPORT_NO_IMPORT(type) type
# define XBT_IMPORT_NO_EXPORT(type) type
-# define XBT_PUBLIC_DATA
+# define XBT_PUBLIC_DATA(type) type
/* Link against the DLL */
# define XBT_PUBLIC(type) __declspec(dllimport) type
# define XBT_EXPORT_NO_IMPORT(type) type
# define XBT_IMPORT_NO_EXPORT(type) __declspec(dllimport) type
-# define XBT_PUBLIC_DATA __declspec(dllimport)
+# define XBT_PUBLIC_DATA(type) __declspec(dllimport) type
-/* Non-UNIX build. Let's keep sain here ;) */
+/* UNIX build. Let's keep sain here ;) */
#else
# define XBT_PUBLIC(type) extern type
# define XBT_EXPORT_NO_IMPORT(type) type
# define XBT_IMPORT_NO_EXPORT(type) type
-# define XBT_PUBLIC_DATA
+# define XBT_PUBLIC_DATA(type) extern type
#endif
-
-
-
-#ifndef max
+#if !defined (max) && !defined(__cplusplus)
# define max(a,b) (((a) > (b)) ? (a) : (b))
#endif
-#ifndef min
+#if !defined (min) && !defined(__cplusplus)
# define min(a,b) (((a) < (b)) ? (a) : (b))
#endif
# endif
#endif
-/*! C++ users need love */
#ifndef SG_END_DECL
# ifdef __cplusplus
# define SG_END_DECL() }