Fossil SCM
| 6ea30fb… | florian | 1 | /* ints.h -- create integer types for 8, 16, 32, and 64 bits |
| 6ea30fb… | florian | 2 | * Copyright (C) 2024 Mark Adler |
| 6ea30fb… | florian | 3 | * For conditions of distribution and use, see the copyright notice in zlib.h |
| 6ea30fb… | florian | 4 | * |
| 6ea30fb… | florian | 5 | * There exist compilers with limits.h, but not stdint.h or inttypes.h. |
| 6ea30fb… | florian | 6 | */ |
| 6ea30fb… | florian | 7 | |
| 6ea30fb… | florian | 8 | #ifndef INTS_H |
| 6ea30fb… | florian | 9 | #define INTS_H |
| 6ea30fb… | florian | 10 | #include <limits.h> |
| 6ea30fb… | florian | 11 | #if defined(UCHAR_MAX) && UCHAR_MAX == 0xff |
| 6ea30fb… | florian | 12 | typedef signed char i8_t; |
| 6ea30fb… | florian | 13 | typedef unsigned char ui8_t; |
| 6ea30fb… | florian | 14 | #else |
| 6ea30fb… | florian | 15 | # error "no 8-bit integer" |
| 6ea30fb… | florian | 16 | #endif |
| 6ea30fb… | florian | 17 | #if defined(USHRT_MAX) && USHRT_MAX == 0xffff |
| 6ea30fb… | florian | 18 | typedef short i16_t; |
| 6ea30fb… | florian | 19 | typedef unsigned short ui16_t; |
| 6ea30fb… | florian | 20 | #elif defined(UINT_MAX) && UINT_MAX == 0xffff |
| 6ea30fb… | florian | 21 | typedef int i16_t; |
| 6ea30fb… | florian | 22 | typedef unsigned ui16_t; |
| 6ea30fb… | florian | 23 | #else |
| 6ea30fb… | florian | 24 | # error "no 16-bit integer" |
| 6ea30fb… | florian | 25 | #endif |
| 6ea30fb… | florian | 26 | #if defined(UINT_MAX) && UINT_MAX == 0xffffffff |
| 6ea30fb… | florian | 27 | typedef int i32_t; |
| 6ea30fb… | florian | 28 | typedef unsigned ui32_t; |
| 6ea30fb… | florian | 29 | # define PI32 "d" |
| 6ea30fb… | florian | 30 | # define PUI32 "u" |
| 6ea30fb… | florian | 31 | #elif defined(ULONG_MAX) && ULONG_MAX == 0xffffffff |
| 6ea30fb… | florian | 32 | typedef long i32_t; |
| 6ea30fb… | florian | 33 | typedef unsigned long ui32_t; |
| 6ea30fb… | florian | 34 | # define PI32 "ld" |
| 6ea30fb… | florian | 35 | # define PUI32 "lu" |
| 6ea30fb… | florian | 36 | #else |
| 6ea30fb… | florian | 37 | # error "no 32-bit integer" |
| 6ea30fb… | florian | 38 | #endif |
| 6ea30fb… | florian | 39 | #if defined(ULONG_MAX) && ULONG_MAX == 0xffffffffffffffff |
| 6ea30fb… | florian | 40 | typedef long i64_t; |
| 6ea30fb… | florian | 41 | typedef unsigned long ui64_t; |
| 6ea30fb… | florian | 42 | # define PI64 "ld" |
| 6ea30fb… | florian | 43 | # define PUI64 "lu" |
| 6ea30fb… | florian | 44 | #elif defined(ULLONG_MAX) && ULLONG_MAX == 0xffffffffffffffff |
| 6ea30fb… | florian | 45 | typedef long long i64_t; |
| 6ea30fb… | florian | 46 | typedef unsigned long long ui64_t; |
| 6ea30fb… | florian | 47 | # define PI64 "lld" |
| 6ea30fb… | florian | 48 | # define PUI64 "llu" |
| 6ea30fb… | florian | 49 | #elif defined(ULONG_LONG_MAX) && ULONG_LONG_MAX == 0xffffffffffffffff |
| 6ea30fb… | florian | 50 | typedef long long i64_t; |
| 6ea30fb… | florian | 51 | typedef unsigned long long ui64_t; |
| 6ea30fb… | florian | 52 | # define PI64 "lld" |
| 6ea30fb… | florian | 53 | # define PUI64 "llu" |
| 6ea30fb… | florian | 54 | #else |
| 6ea30fb… | florian | 55 | # error "no 64-bit integer" |
| 6ea30fb… | florian | 56 | #endif |
| 6ea30fb… | florian | 57 | #endif |