rcx

library of miscellaneous bits of C code
git clone git://git.rr3.xyz/rcx
Log | Files | Refs | README | LICENSE

commit 4fbb7f100122a0b189d4218bde0e0d0a9cf4945e
parent f27fc6a13a8a7ed2270de6509f021f9e96db599f
Author: Robert Russell <robertrussell.72001@gmail.com>
Date:   Mon, 22 May 2023 20:33:22 -0700

Add XXX_BITS macros for the width of each integer typedef

Diffstat:
Minc/def.h | 65+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++------
1 file changed, 59 insertions(+), 6 deletions(-)

diff --git a/inc/def.h b/inc/def.h @@ -59,89 +59,142 @@ #define SHORT_MAX SHRT_MAX #define USHORT_MAX USHRT_MAX -typedef signed char schar; -typedef unsigned char uchar; -typedef unsigned short ushort; -typedef unsigned int uint; -typedef unsigned long ulong; -typedef long long llong; +#define CHAR_BITS 8 + +#define SCHAR_BITS 8 +typedef signed char schar; + +#define UCHAR_BITS 8 +typedef unsigned char uchar; + +#define SHORT_BITS (8 * sizeof(short)) + +#define USHORT_BITS (8 * sizeof(ushort)) +typedef unsigned short ushort; + +#define INT_BITS (8 * sizeof(int)) + +#define UINT_BITS (8 * sizeof(uint)) +typedef unsigned int uint; + +#define LONG_BITS (8 * sizeof(long)) + +#define ULONG_BITS (8 * sizeof(ulong)) +typedef unsigned long ulong; + +#define LLONG_BITS (8 * sizeof(llong)) +typedef long long llong; + +#define ULLONG_BITS (8 * sizeof(ullong)) typedef unsigned long long ullong; +#define I8_BITS 8 #define I8_MIN INT8_MIN #define I8_MAX INT8_MAX #define I8_C INT8_C typedef int8_t i8; +#define I16_BITS 16 #define I16_MIN INT16_MIN #define I16_MAX INT16_MAX #define I16_C INT16_C typedef int16_t i16; +#define I32_BITS 32 #define I32_MIN INT32_MIN #define I32_MAX INT32_MAX #define I32_C INT32_C typedef int32_t i32; +#define I64_BITS 64 #define I64_MIN INT64_MIN #define I64_MAX INT64_MAX #define I64_C INT64_C typedef int64_t i64; #ifdef R_HAVE_128 +#define I128_BITS 128 #define I128_MIN ((i128)-1 - I128_MAX) #define I128_MAX ((i128)(U128_MAX >> 1)) typedef __int128 i128; #endif +#define IMAX_BITS (8 * sizeof(imax)) #define IMAX_MIN INTMAX_MIN #define IMAX_MAX INTMAX_MAX #define IMAX_C INTMAX_C typedef intmax_t imax; +#define IPTR_BITS (8 * sizeof(iptr)) #define IPTR_MIN INTPTR_MIN #define IPTR_MAX INTPTR_MAX typedef intptr_t iptr; /* Avoid dependence on POSIX sys/types.h for ssize_t */ #if SIZE_MAX == UINT32_MAX +#define ISIZE_BITS 32 +#define ISIZE_MIN INT32_MIN +#define ISIZE_MAX INT32_MAX +#define ISIZE_C INT32_C typedef int32_t isize; #elif SIZE_MAX == UINT64_MAX +#define ISIZE_BITS 64 +#define ISIZE_MIN INT64_MIN +#define ISIZE_MAX INT64_MAX +#define ISIZE_C INT64_C typedef int64_t isize; #else /* This won't happen except on weird archs */ #error "Could not find suitable type for isize" #endif +#define U8_BITS 8 #define U8_MAX UINT8_MAX #define U8_C UINT8_C typedef uint8_t u8; +#define U16_BITS 16 #define U16_MAX UINT16_MAX #define U16_C UINT16_C typedef uint16_t u16; +#define U32_BITS 32 #define U32_MAX UINT32_MAX #define U32_C UINT32_C typedef uint32_t u32; +#define U64_BITS 64 #define U64_MAX UINT64_MAX #define U64_C UINT64_C typedef uint64_t u64; #ifdef R_HAVE_128 +#define U128_BITS 128 #define U128_MAX (((u128)U64_MAX << 64) | U64_MAX) typedef unsigned __int128 u128; #endif +#define UMAX_BITS (8 * sizeof(umax)) #define UMAX_MAX UINTMAX_MAX #define UMAX_C UINTMAX_C typedef uintmax_t umax; +#define UPTR_BITS (8 * sizeof(uptr)) #define UPTR_MAX UINTPTR_MAX typedef uintptr_t uptr; +#if SIZE_MAX == UINT32_MAX +#define USIZE_BITS 32 +#define USIZE_C UINT32_C +#elif SIZE_MAX == UINT64_MAX +#define USIZE_BITS 64 +#define USIZE_C UINT64_C +#else /* This won't happen except on weird archs */ +#error "Could not determine width of usize" +#endif #define USIZE_MAX SIZE_MAX typedef size_t usize; +#define RUNE_BITS 32 #define RUNE_BAD RUNE_C(0xFFFD) #define RUNE_MAX RUNE_C(0x10FFFF) #define RUNE_C UINT32_C