-/* xbt.h - Public interface to the xbt (gras's toolbox) */
+/* xbt.h - Public interface to the xbt (simgrid's toolbox) */
-/* Copyright (c) 2004, 2005, 2006, 2007, 2008, 2009, 2010. The SimGrid Team.
+/* Copyright (c) 2004-2014. The SimGrid Team.
* All rights reserved. */
/* This program is free software; you can redistribute it and/or modify it
#ifndef XBT_MISC_H
#define XBT_MISC_H
+/* Define _GNU_SOURCE for getline, isfinite, etc. */
+#ifndef _GNU_SOURCE
+ #define _GNU_SOURCE
+#endif
+
/* Attributes are only in recent versions of GCC */
#if defined(__GNUC__) && (__GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ > 4))
# define _XBT_GNUC_PRINTF( format_idx, arg_idx ) \
* DLL space.
*/
-
/* Build the DLL */
#if defined(DLL_EXPORT)
-# define XBT_PUBLIC(type) __declspec(dllexport) type
+# define XBT_PUBLIC(type) extern __declspec(dllexport) type
# define XBT_EXPORT_NO_IMPORT(type) __declspec(dllexport) type
# define XBT_IMPORT_NO_EXPORT(type) type
-# define XBT_PUBLIC_DATA(type) __declspec(dllexport) type
+# define XBT_PUBLIC_DATA(type) extern __declspec(dllexport) type
+# define XBT_PUBLIC_CLASS class __declspec(dllexport)
+
/* Pack everything up statically */
#elif defined(DLL_STATIC)
-# define XBT_PUBLIC(type) extern type
+# define XBT_PUBLIC(type) extern type
# 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
+
/* Link against the DLL */
#elif (defined(_XBT_WIN32) && !defined(DLL_EXPORT) && !defined(DLL_STATIC))
-# 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(type) __declspec(dllimport) type
+# define XBT_PUBLIC(type) extern __declspec(dllimport) type
+# 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)
+
/* UNIX build */
#else
# 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
+
#endif
#if !defined (max) && !defined(__cplusplus)
SG_BEGIN_DECL()
+/** Cache the size of a memory page for the current system. */
+XBT_PUBLIC_DATA(int) xbt_pagesize;
+
+/** Cache the number of bits of addresses inside a given page, log2(xbt_pagesize). */
+ XBT_PUBLIC_DATA(int) xbt_pagebits;
+
XBT_PUBLIC(const char *) xbt_procname(void);
#define XBT_BACKTRACE_SIZE 10 /* FIXME: better place? Do document */