#include <sys/types.h>
-#if !defined(PLATFORM_WIN32)
+#if !defined(PLATFORM_WINDOWS)
typedef int boolean;
typedef unsigned char byte;
#endif
#undef FALSE
#endif
-#ifdef AUTO
-#undef AUTO
+#ifdef STATE_AUTO
+#undef STATE_AUTO
#endif
-#define TRUE 1
-#define FALSE 0
-#define AUTO -1
+#ifdef STATE_ASK
+#undef STATE_ASK
+#endif
+
+// values for boolean data type
+#define TRUE 1
+#define FALSE 0
+
+// values for 3-state data type (for "yes/no/auto" or "yes/no/ask")
+#define STATE_TRUE 1
+#define STATE_FALSE 0
+#define STATE_AUTO -1
+#define STATE_ASK -1
#ifndef MIN
-#define MIN(a,b) ((a) < (b) ? (a) : (b))
+#define MIN(a, b) ((a) < (b) ? (a) : (b))
#endif
#ifndef MAX
-#define MAX(a,b) ((a) > (b) ? (a) : (b))
+#define MAX(a, b) ((a) > (b) ? (a) : (b))
#endif
#ifndef ABS
-#define ABS(a) ((a) < 0 ? -(a) : (a))
+#define ABS(a) ((a) < 0 ? -(a) : (a))
#endif
#ifndef SIGN
-#define SIGN(a) ((a) < 0 ? -1 : ((a) > 0 ? 1 : 0))
+#define SIGN(a) ((a) < 0 ? -1 : ((a) > 0 ? 1 : 0))
#endif
#ifndef ODD
-#define ODD(a) (((a) & 1) == 1)
+#define ODD(a) (((a) & 1) == 1)
#endif
#ifndef EVEN
-#define EVEN(a) (((a) & 1) == 0)
+#define EVEN(a) (((a) & 1) == 0)
#endif
-#define ARRAY_SIZE(array) (sizeof(array) / sizeof(array[0]))
+#define ARRAY_SIZE(array) (sizeof(array) / sizeof(array[0]))
+
+#if defined(__x86_64__)
+
+#define PTR_TO_INT(p) ((int) (long long) (p))
+#define PTR_TO_UINT(p) ((unsigned int) (unsigned long long) (p))
+
+#define INT_TO_PTR(i) ((void *) (long long) (i))
+#define UINT_TO_PTR(u) ((void *) (unsigned long long) (u))
+
+#else
+
+#define PTR_TO_INT(p) ((int) (long) (p))
+#define PTR_TO_UINT(p) ((unsigned int) (unsigned long) (p))
+
+#define INT_TO_PTR(i) ((void *) (long) (i))
+#define UINT_TO_PTR(u) ((void *) (unsigned long) (u))
+
+#endif
+
+#define STRUCT_OFFSET(s, m) (offsetof(s, m))
struct ListNode
};
typedef struct ListNode ListNode;
+struct DelayCounter
+{
+ unsigned int value;
+ unsigned int count;
+};
+typedef struct DelayCounter DelayCounter;
+
#endif // TYPES_H