From c1b954eb9dcd07e76159446fe1fe5c3cf1ff07de Mon Sep 17 00:00:00 2001 From: mvandervoord Date: Sun, 27 May 2012 20:29:33 +0000 Subject: [PATCH] - added size auto-detection support from limits.h - fixed error in _INT macro size guessing git-svn-id: http://unity.svn.sourceforge.net/svnroot/unity/trunk@138 e7d17a6e-8845-0410-bbbc-c8efb4fdad7e --- src/unity_internals.h | 71 ++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 66 insertions(+), 5 deletions(-) diff --git a/src/unity_internals.h b/src/unity_internals.h index 787b999..2c7180b 100644 --- a/src/unity_internals.h +++ b/src/unity_internals.h @@ -10,16 +10,58 @@ #include #include +//Limits.h is often automatically included. +//Unity uses it to guess at the sizes of integer types, etc. +#ifdef UNITY_USE_LIMITS_H +#include +#endif + //------------------------------------------------------- // Int Support //------------------------------------------------------- +// If the INT Width hasn't been specified, +// We first try to guess based on UINT_MAX (if it exists) +// Otherwise we fall back on assuming 32-bit #ifndef UNITY_INT_WIDTH -#define UNITY_INT_WIDTH (32) + #ifdef UINT_MAX + #if (UINT_MAX == 0xFFFF) + #define UNITY_INT_WIDTH (16) + #elif (UINT_MAX == 0xFFFFFFFF) + #define UNITY_INT_WIDTH (32) + #elif (UINT_MAX == 0xFFFFFFFFFFFFFFFF) + #define UNITY_INT_WIDTH (64) + #ifndef UNITY_SUPPORT_64 + #define UNITY_SUPPORT_64 + #endif + #else + #define UNITY_INT_WIDTH (32) + #endif + #else + #define UNITY_INT_WIDTH (32) + #endif #endif +// If the Long Width hasn't been specified, +// We first try to guess based on ULONG_MAX (if it exists) +// Otherwise we fall back on assuming 32-bit #ifndef UNITY_LONG_WIDTH -#define UNITY_LONG_WIDTH (32) + #ifdef ULONG_MAX + #if (ULONG_MAX == 0xFFFF) + #define UNITY_LONG_WIDTH (16) + #elif (ULONG_MAX == 0xFFFFFFFF) + #define UNITY_LONG_WIDTH (32) + #elif (ULONG_MAX == 0xFFFFFFFFFFFFFFFF) + #define UNITY_LONG_WIDTH (64) + #else + #define UNITY_LONG_WIDTH (32) + #ifndef UNITY_SUPPORT_64 + #define UNITY_SUPPORT_64 + #endif + #endif + #else + #define UNITY_LONG_WIDTH (32) + #endif #endif #if (UNITY_INT_WIDTH == 32) @@ -71,8 +113,23 @@ typedef _US64 _U_SINT; // Pointer Support //------------------------------------------------------- +// If the Pointer Width hasn't been specified, +// We first try to guess based on INTPTR_MAX (if it exists) +// Otherwise we fall back on assuming 32-bit #ifndef UNITY_POINTER_WIDTH -#define UNITY_POINTER_WIDTH (32) + #ifdef INTPTR_MAX + #if (INTPTR_MAX == 0xFFFF) + #define UNITY_POINTER_WIDTH (16) + #elif (INTPTR_MAX == 0xFFFFFFFF) + #define UNITY_POINTER_WIDTH (32) + #elif (INTPTR_MAX == 0xFFFFFFFFFFFFFFFF) + #define UNITY_POINTER_WIDTH (64) + #else + #define UNITY_POINTER_WIDTH (32) + #endif + #else + #define UNITY_POINTER_WIDTH (32) + #endif #endif #if (UNITY_POINTER_WIDTH == 32) @@ -187,6 +244,8 @@ typedef enum UNITY_DISPLAY_STYLE_INT = 2 + UNITY_DISPLAY_RANGE_INT + UNITY_DISPLAY_RANGE_AUTO, #elif (UNITY_INT_WIDTH == 32) UNITY_DISPLAY_STYLE_INT = 4 + UNITY_DISPLAY_RANGE_INT + UNITY_DISPLAY_RANGE_AUTO, +#elif (UNITY_INT_WIDTH == 64) + UNITY_DISPLAY_STYLE_INT = 8 + UNITY_DISPLAY_RANGE_INT + UNITY_DISPLAY_RANGE_AUTO, #endif UNITY_DISPLAY_STYLE_INT8 = 1 + UNITY_DISPLAY_RANGE_INT, UNITY_DISPLAY_STYLE_INT16 = 2 + UNITY_DISPLAY_RANGE_INT, @@ -196,9 +255,11 @@ typedef enum #endif #if (UNITY_INT_WIDTH == 16) - UNITY_DISPLAY_STYLE_UINT = 4 + UNITY_DISPLAY_RANGE_UINT + UNITY_DISPLAY_RANGE_AUTO, -#elif (UNITY_INT_WIDTH == 32) UNITY_DISPLAY_STYLE_UINT = 2 + UNITY_DISPLAY_RANGE_UINT + UNITY_DISPLAY_RANGE_AUTO, +#elif (UNITY_INT_WIDTH == 32) + UNITY_DISPLAY_STYLE_UINT = 4 + UNITY_DISPLAY_RANGE_UINT + UNITY_DISPLAY_RANGE_AUTO, +#elif (UNITY_INT_WIDTH == 64) + UNITY_DISPLAY_STYLE_UINT = 8 + UNITY_DISPLAY_RANGE_UINT + UNITY_DISPLAY_RANGE_AUTO, #endif UNITY_DISPLAY_STYLE_UINT8 = 1 + UNITY_DISPLAY_RANGE_UINT, UNITY_DISPLAY_STYLE_UINT16 = 2 + UNITY_DISPLAY_RANGE_UINT,