| [0b990d] | 1 | // This provides C99-like standard integer types.  It is based on boost.org
 | 
|---|
 | 2 | // code which has been modified for inclusion in the SC Toolkit.
 | 
|---|
 | 3 | 
 | 
|---|
 | 4 | //  (C) Copyright boost.org 1999. Permission to copy, use, modify, sell
 | 
|---|
 | 5 | //  and distribute this software is granted provided this copyright
 | 
|---|
 | 6 | //  notice appears in all copies. This software is provided "as is" without
 | 
|---|
 | 7 | //  express or implied warranty, and with no claim as to its suitability for
 | 
|---|
 | 8 | //  any purpose.
 | 
|---|
 | 9 | 
 | 
|---|
 | 10 | #ifndef util_misc_scint_h
 | 
|---|
 | 11 | #define util_misc_scint_h
 | 
|---|
 | 12 | 
 | 
|---|
 | 13 | #include <scconfig.h>
 | 
|---|
 | 14 | 
 | 
|---|
 | 15 | #ifdef HAVE_STDINT_H
 | 
|---|
 | 16 | 
 | 
|---|
 | 17 | #include <stdint.h>
 | 
|---|
 | 18 | 
 | 
|---|
 | 19 | namespace sc {
 | 
|---|
 | 20 | 
 | 
|---|
 | 21 | typedef int8_t         sc_int8_t;
 | 
|---|
 | 22 | typedef int_least8_t   sc_int_least8_t;
 | 
|---|
 | 23 | typedef int_fast8_t    sc_int_fast8_t;
 | 
|---|
 | 24 | typedef uint8_t        sc_uint8_t;
 | 
|---|
 | 25 | typedef uint_least8_t  sc_uint_least8_t;
 | 
|---|
 | 26 | typedef uint_fast8_t   sc_uint_fast8_t;
 | 
|---|
 | 27 |                        
 | 
|---|
 | 28 | typedef int16_t        sc_int16_t;
 | 
|---|
 | 29 | typedef int_least16_t  sc_int_least16_t;
 | 
|---|
 | 30 | typedef int_fast16_t   sc_int_fast16_t;
 | 
|---|
 | 31 | typedef uint16_t       sc_uint16_t;
 | 
|---|
 | 32 | typedef uint_least16_t sc_uint_least16_t;
 | 
|---|
 | 33 | typedef uint_fast16_t  sc_uint_fast16_t;
 | 
|---|
 | 34 |                        
 | 
|---|
 | 35 | typedef int32_t        sc_int32_t;
 | 
|---|
 | 36 | typedef int_least32_t  sc_int_least32_t;
 | 
|---|
 | 37 | typedef int_fast32_t   sc_int_fast32_t;
 | 
|---|
 | 38 | typedef uint32_t       sc_uint32_t;
 | 
|---|
 | 39 | typedef uint_least32_t sc_uint_least32_t;
 | 
|---|
 | 40 | typedef uint_fast32_t  sc_uint_fast32_t;
 | 
|---|
 | 41 |                        
 | 
|---|
 | 42 | typedef intmax_t       sc_intmax_t;
 | 
|---|
 | 43 | typedef uintmax_t      sc_uintmax_t;
 | 
|---|
 | 44 | typedef int64_t        sc_int64_t;
 | 
|---|
 | 45 | typedef int_least64_t  sc_int_least64_t;
 | 
|---|
 | 46 | typedef int_fast64_t   sc_int_fast64_t;
 | 
|---|
 | 47 | typedef uint64_t       sc_uint64_t;
 | 
|---|
 | 48 | typedef uint_least64_t sc_uint_least64_t;
 | 
|---|
 | 49 | typedef uint_fast64_t  sc_uint_fast64_t;
 | 
|---|
 | 50 | 
 | 
|---|
 | 51 | }
 | 
|---|
 | 52 | 
 | 
|---|
 | 53 | #else
 | 
|---|
 | 54 | 
 | 
|---|
 | 55 | //  This is not a complete implementation of the 1999 C Standard stdint.h
 | 
|---|
 | 56 | //  header; it doesn't supply various macros which are not advisable for use in
 | 
|---|
 | 57 | //  C++ programs.
 | 
|---|
 | 58 | 
 | 
|---|
 | 59 | #include <limits.h> // implementation artifact; not part of interface
 | 
|---|
 | 60 | 
 | 
|---|
 | 61 | namespace sc {
 | 
|---|
 | 62 | 
 | 
|---|
 | 63 | //  These are fairly safe guesses for some 16-bit, and most 32-bit and 64-bit
 | 
|---|
 | 64 | //  platforms.  For other systems, they will have to be hand tailored.
 | 
|---|
 | 65 | //  Because the fast types are assumed to be the same as the undecorated types,
 | 
|---|
 | 66 | //  it may be possible to hand tailor a more efficient implementation.
 | 
|---|
 | 67 | 
 | 
|---|
 | 68 | //  8-bit types  -------------------------------------------------------------//
 | 
|---|
 | 69 | 
 | 
|---|
 | 70 | # if UCHAR_MAX == 0xff
 | 
|---|
 | 71 |      typedef signed char     sc_int8_t;
 | 
|---|
 | 72 |      typedef signed char     sc_int_least8_t;
 | 
|---|
 | 73 |      typedef signed char     sc_int_fast8_t;
 | 
|---|
 | 74 |      typedef unsigned char   sc_uint8_t;
 | 
|---|
 | 75 |      typedef unsigned char   sc_uint_least8_t;
 | 
|---|
 | 76 |      typedef unsigned char   sc_uint_fast8_t;
 | 
|---|
 | 77 | # else
 | 
|---|
 | 78 | #    error defaults not correct; you must hand modify scint.h
 | 
|---|
 | 79 | # endif
 | 
|---|
 | 80 | 
 | 
|---|
 | 81 | //  16-bit types  ------------------------------------------------------------//
 | 
|---|
 | 82 | 
 | 
|---|
 | 83 | # if USHRT_MAX == 0xffff
 | 
|---|
 | 84 |      typedef short           sc_int16_t;
 | 
|---|
 | 85 |      typedef short           sc_int_least16_t;
 | 
|---|
 | 86 |      typedef short           sc_int_fast16_t;
 | 
|---|
 | 87 |      typedef unsigned short  sc_uint16_t;
 | 
|---|
 | 88 |      typedef unsigned short  sc_uint_least16_t;
 | 
|---|
 | 89 |      typedef unsigned short  sc_uint_fast16_t;
 | 
|---|
 | 90 | # else
 | 
|---|
 | 91 | #    error defaults not correct; you must hand modify scint.h
 | 
|---|
 | 92 | # endif
 | 
|---|
 | 93 | 
 | 
|---|
 | 94 | //  32-bit types  ------------------------------------------------------------//
 | 
|---|
 | 95 | 
 | 
|---|
 | 96 | # if UINT_MAX == 0xffffffff
 | 
|---|
 | 97 |      typedef int             sc_int32_t;
 | 
|---|
 | 98 |      typedef int             sc_int_least32_t;
 | 
|---|
 | 99 |      typedef int             sc_int_fast32_t;
 | 
|---|
 | 100 |      typedef unsigned int    sc_uint32_t;
 | 
|---|
 | 101 |      typedef unsigned int    sc_uint_least32_t;
 | 
|---|
 | 102 |      typedef unsigned int    sc_uint_fast32_t;
 | 
|---|
 | 103 | # elif ULONG_MAX == 0xffffffff
 | 
|---|
 | 104 |      typedef long            sc_int32_t;
 | 
|---|
 | 105 |      typedef long            sc_int_least32_t;
 | 
|---|
 | 106 |      typedef long            sc_int_fast32_t;
 | 
|---|
 | 107 |      typedef unsigned long   sc_uint32_t;
 | 
|---|
 | 108 |      typedef unsigned long   sc_uint_least32_t;
 | 
|---|
 | 109 |      typedef unsigned long   sc_uint_fast32_t;
 | 
|---|
 | 110 | # else
 | 
|---|
 | 111 | #    error defaults not correct; you must hand modify scint.h
 | 
|---|
 | 112 | # endif
 | 
|---|
 | 113 | 
 | 
|---|
 | 114 | //  64-bit types + intmax_t and uintmax_t  -----------------------------------//
 | 
|---|
 | 115 | 
 | 
|---|
 | 116 | #if defined(ULONGLONG_MAX) && !defined(ULLONG_MAX)
 | 
|---|
 | 117 | #    define ULLONG_MAX ULONGLONG_MAX
 | 
|---|
 | 118 | #endif
 | 
|---|
 | 119 | 
 | 
|---|
 | 120 | # ifdef ULLONG_MAX
 | 
|---|
 | 121 | //#    if ULLONG_MAX == 18446744073709551615 // 2**64 - 1
 | 
|---|
 | 122 | #    if ULONGLONG_MAX == (0xffffffffffffffffuLL) // uLL reqd for xlC
 | 
|---|
 | 123 |      typedef long long            sc_intmax_t;
 | 
|---|
 | 124 |      typedef unsigned long long   sc_uintmax_t;
 | 
|---|
 | 125 |      typedef long long            sc_int64_t;
 | 
|---|
 | 126 |      typedef long long            sc_int_least64_t;
 | 
|---|
 | 127 |      typedef long long            sc_int_fast64_t;
 | 
|---|
 | 128 |      typedef unsigned long long   sc_uint64_t;
 | 
|---|
 | 129 |      typedef unsigned long long   sc_uint_least64_t;
 | 
|---|
 | 130 |      typedef unsigned long long   sc_uint_fast64_t;
 | 
|---|
 | 131 | #    else
 | 
|---|
 | 132 | #       error defaults not correct; you must hand modify scint.h
 | 
|---|
 | 133 | #    endif
 | 
|---|
 | 134 | # elif ULONG_MAX != 0xffffffff
 | 
|---|
 | 135 | 
 | 
|---|
 | 136 | #    if ULONG_MAX == 18446744073709551615 // 2**64 - 1
 | 
|---|
 | 137 |      typedef long                 sc_intmax_t;
 | 
|---|
 | 138 |      typedef unsigned long        sc_uintmax_t;
 | 
|---|
 | 139 |      typedef long                 sc_int64_t;
 | 
|---|
 | 140 |      typedef long                 sc_int_least64_t;
 | 
|---|
 | 141 |      typedef long                 sc_int_fast64_t;
 | 
|---|
 | 142 |      typedef unsigned long        sc_uint64_t;
 | 
|---|
 | 143 |      typedef unsigned long        sc_uint_least64_t;
 | 
|---|
 | 144 |      typedef unsigned long        sc_uint_fast64_t;
 | 
|---|
 | 145 | #    else
 | 
|---|
 | 146 | #       error defaults not correct; you must hand modify scint.h
 | 
|---|
 | 147 | #    endif
 | 
|---|
 | 148 | # else // assume no 64-bit integers
 | 
|---|
 | 149 | #    error 64 bit integer types are required
 | 
|---|
 | 150 |      typedef sc_int32_t              sc_intmax_t;
 | 
|---|
 | 151 |      typedef sc_uint32_t             sc_uintmax_t;
 | 
|---|
 | 152 | # endif
 | 
|---|
 | 153 | 
 | 
|---|
 | 154 | }
 | 
|---|
 | 155 | 
 | 
|---|
 | 156 | #endif
 | 
|---|
 | 157 | 
 | 
|---|
 | 158 | #endif
 | 
|---|