utils.h: use <stdint.h> (if available) instead of reinventing it.
authorAlexei Sheplyakov <varg@theor.jinr.ru>
Sun, 7 Sep 2008 18:17:55 +0000 (22:17 +0400)
committerAlexei Sheplyakov <varg@theor.jinr.ru>
Tue, 9 Sep 2008 10:17:08 +0000 (14:17 +0400)
The argument of golden_ratio_hash() is as an integer of the same size as
a void* pointer. Unfortunately ISO C++ 98 does not provide suitable typedef.
Hence

* use <stdint.h> if available and define p_int to uintptr_t. Note: AC_PROG_CC
  already checks for this header, so no extra checks are necessary.
* as a fallback define p_int to be unsigned long, this works on most systems
  I know of (the only exception is woe64).

While at it, stop including "config.h" unconditionally.

ginac/utils.h

index a4af3300e38d8c9d45370a30d908513a6759c6f2..eaa9a723ac0a6d5db1533954976f5958a19bbabc 100644 (file)
 #ifndef __GINAC_UTILS_H__
 #define __GINAC_UTILS_H__
 
+#ifdef HAVE_CONFIG_H
 #include "config.h"
+#endif
 
 #include <string>
 #include <functional>
+#ifdef HAVE_STDINT_H
+#include <stdint.h> // for uintptr_t
+#endif
 
 #include "assertion.h"
 
@@ -65,12 +70,8 @@ inline int compare_pointers(const T * a, const T * b)
        return 0;
 }
 
-#if SIZEOF_VOID_P == SIZEOF_INT
-typedef unsigned int p_int;
-#elif SIZEOF_VOID_P == SIZEOF_LONG
-typedef unsigned long p_int;
-#elif SIZEOF_VOID_P == SIZEOF_LONG_LONG
-typedef unsigned long long p_int;
+#ifdef HAVE_STDINT_H
+typedef uintptr_t p_int;
 #else
 typedef unsigned long p_int;
 #endif