1 /* 2 ****************************************************************************** 3 * 4 * Copyright (C) 1997-2012, International Business Machines 5 * Corporation and others. All Rights Reserved. 6 * 7 ****************************************************************************** 8 * 9 * FILE NAME : ptypes.h 10 * 11 * Date Name Description 12 * 05/13/98 nos Creation (content moved here from ptypes.h). 13 * 03/02/99 stephen Added AS400 support. 14 * 03/30/99 stephen Added Linux support. 15 * 04/13/99 stephen Reworked for autoconf. 16 * 09/18/08 srl Moved basic types back to ptypes.h from platform.h 17 ****************************************************************************** 18 */ 19 20 /** 21 * \file 22 * \brief C API: Definitions of integer types of various widths 23 */ 24 25 #ifndef _PTYPES_H 26 #define _PTYPES_H 27 28 /** 29 * \def __STDC_LIMIT_MACROS 30 * According to the Linux stdint.h, the ISO C99 standard specifies that in C++ implementations 31 * macros like INT32_MIN and UINTPTR_MAX should only be defined if explicitly requested. 32 * We need to define __STDC_LIMIT_MACROS before including stdint.h in C++ code 33 * that uses such limit macros. 34 * @internal 35 */ 36 #ifndef __STDC_LIMIT_MACROS 37 #define __STDC_LIMIT_MACROS 38 #endif 39 40 /* NULL, size_t, wchar_t */ 41 #include <stddef.h> 42 43 /* 44 * If all compilers provided all of the C99 headers and types, 45 * we would just unconditionally #include <stdint.h> here 46 * and not need any of the stuff after including platform.h. 47 */ 48 49 /* Find out if we have stdint.h etc. */ 50 #include "unicode/platform.h" 51 52 /*===========================================================================*/ 53 /* Generic data types */ 54 /*===========================================================================*/ 55 56 /* If your platform does not have the <stdint.h> header, you may 57 need to edit the typedefs in the #else section below. 58 Use #if...#else...#endif with predefined compiler macros if possible. */ 59 #if U_HAVE_STDINT_H 60 61 /* 62 * We mostly need <stdint.h> (which defines the standard integer types) but not <inttypes.h>. 63 * <inttypes.h> includes <stdint.h> and adds the printf/scanf helpers PRId32, SCNx16 etc. 64 * which we almost never use, plus stuff like imaxabs() which we never use. 65 */ 66 #include <stdint.h> 67 68 #if U_PLATFORM == U_PF_OS390 69 /* The features header is needed to get (u)int64_t sometimes. */ 70 #include <features.h> 71 /* z/OS has <stdint.h>, but some versions are missing uint8_t (APAR PK62248). */ 72 #if !defined(__uint8_t) 73 #define __uint8_t 1 74 typedef unsigned char uint8_t; 75 #endif 76 #endif /* U_PLATFORM == U_PF_OS390 */ 77 78 #elif U_HAVE_INTTYPES_H 79 80 # include <inttypes.h> 81 82 #else /* neither U_HAVE_STDINT_H nor U_HAVE_INTTYPES_H */ 83 84 #if ! U_HAVE_INT8_T 85 typedef signed char int8_t; 86 #endif 87 88 #if ! U_HAVE_UINT8_T 89 typedef unsigned char uint8_t; 90 #endif 91 92 #if ! U_HAVE_INT16_T 93 typedef signed short int16_t; 94 #endif 95 96 #if ! U_HAVE_UINT16_T 97 typedef unsigned short uint16_t; 98 #endif 99 100 #if ! U_HAVE_INT32_T 101 typedef signed int int32_t; 102 #endif 103 104 #if ! U_HAVE_UINT32_T 105 typedef unsigned int uint32_t; 106 #endif 107 108 #if ! U_HAVE_INT64_T 109 #ifdef _MSC_VER 110 typedef signed __int64 int64_t; 111 #else 112 typedef signed long long int64_t; 113 #endif 114 #endif 115 116 #if ! U_HAVE_UINT64_T 117 #ifdef _MSC_VER 118 typedef unsigned __int64 uint64_t; 119 #else 120 typedef unsigned long long uint64_t; 121 #endif 122 #endif 123 124 #endif /* U_HAVE_STDINT_H / U_HAVE_INTTYPES_H */ 125 126 #endif /* _PTYPES_H */ 127