74 lines
2.1 KiB
C
74 lines
2.1 KiB
C
#ifndef JSON_GNU_C_HEADER
|
|
#define JSON_GUN_C_HEADER
|
|
|
|
#ifdef __GNUC__
|
|
|
|
#if defined(JSON_INT_TYPE)
|
|
#if (JSON_INT_TYPE == long long) && defined(JSON_ISO_STRICT)
|
|
#error, JSON_INT_TYPE cant be a long long unless JSON_ISO_STRICT is off
|
|
#endif
|
|
#endif
|
|
|
|
#define json_deprecated(method, warning) method __attribute__((deprecated))
|
|
|
|
#if (__GNUC__ >= 3)
|
|
#define JSON_GCC_VERSION (__GNUC__ * 10000 + __GNUC_MINOR__ * 100 + __GNUC_PATCHLEVEL__)
|
|
#else
|
|
#define JSON_GCC_VERSION (__GNUC__ * 10000 + __GNUC_MINOR__ * 100)
|
|
#endif
|
|
|
|
#if (JSON_GCC_VERSION >= 40300)
|
|
#define json_hot __attribute__ ((hot))
|
|
#define json_cold __attribute__ ((cold))
|
|
#define json_pure json_nothrow __attribute__ ((pure, hot))
|
|
#define json_malloc_attr json_nothrow __attribute__ ((malloc, hot))
|
|
|
|
/* Can do priorities */
|
|
#if (JSON_WRITE_PRIORITY == HIGH)
|
|
#define json_write_priority __attribute__ ((hot))
|
|
#elif (JSON_WRITE_PRIORITY == LOW)
|
|
#define json_write_priority __attribute__ ((cold))
|
|
#else
|
|
#define json_write_priority
|
|
#endif
|
|
|
|
#if (JSON_READ_PRIORITY == HIGH)
|
|
#define json_read_priority __attribute__ ((hot))
|
|
#elif (JSON_READ_PRIORITY == LOW)
|
|
#define json_read_priority __attribute__ ((cold))
|
|
#else
|
|
#define json_read_priority
|
|
#endif
|
|
|
|
#define json_likely(x) __builtin_expect((long)((bool)(x)),1)
|
|
#define json_unlikely(x) __builtin_expect((long)((bool)(x)),0)
|
|
#else
|
|
#if (JSON_GCC_VERSION >= 29600)
|
|
#define json_pure json_nothrow __attribute__ ((pure))
|
|
#define json_likely(x) __builtin_expect((long)((bool)(x)),1)
|
|
#define json_unlikely(x) __builtin_expect((long)((bool)(x)),0)
|
|
#else
|
|
#define json_pure json_nothrow
|
|
#define json_likely(x) x
|
|
#define json_unlikely(x) x
|
|
#endif
|
|
|
|
#define json_malloc_attr json_nothrow __attribute__ ((malloc))
|
|
#define json_write_priority
|
|
#define json_read_priority
|
|
#define json_hot
|
|
#define json_cold
|
|
#endif
|
|
|
|
#define json_nothrow throw()
|
|
#define json_throws(x) throw(x)
|
|
|
|
#ifdef JSON_LESS_MEMORY
|
|
#define PACKED(x) :x __attribute__ ((packed))
|
|
#define BITS(x) :x
|
|
#endif
|
|
|
|
#endif
|
|
|
|
#endif
|