15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/* 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)****************************************************************************** 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)* 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)* Copyright (C) 1997-2012, International Business Machines 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)* Corporation and others. All Rights Reserved. 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)* 7868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)****************************************************************************** 8eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch* 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)* FILE NAME : ptypes.h 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)* 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)* Date Name Description 12868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)* 05/13/98 nos Creation (content moved here from ptypes.h). 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)* 03/02/99 stephen Added AS400 support. 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)* 03/30/99 stephen Added Linux support. 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)* 04/13/99 stephen Reworked for autoconf. 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)* 09/18/08 srl Moved basic types back to ptypes.h from platform.h 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)****************************************************************************** 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)*/ 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/** 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * \file 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * \brief C API: Definitions of integer types of various widths 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef _PTYPES_H 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define _PTYPES_H 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/** 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * \def __STDC_LIMIT_MACROS 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * According to the Linux stdint.h, the ISO C99 standard specifies that in C++ implementations 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * macros like INT32_MIN and UINTPTR_MAX should only be defined if explicitly requested. 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * We need to define __STDC_LIMIT_MACROS before including stdint.h in C++ code 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * that uses such limit macros. 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @internal 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef __STDC_LIMIT_MACROS 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define __STDC_LIMIT_MACROS 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/* NULL, size_t, wchar_t */ 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <stddef.h> 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/* 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * If all compilers provided all of the C99 headers and types, 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * we would just unconditionally #include <stdint.h> here 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * and not need any of the stuff after including platform.h. 47f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) */ 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/* Find out if we have stdint.h etc. */ 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "unicode/platform.h" 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/*===========================================================================*/ 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/* Generic data types */ 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/*===========================================================================*/ 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 56f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)/* If your platform does not have the <stdint.h> header, you may 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) need to edit the typedefs in the #else section below. 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Use #if...#else...#endif with predefined compiler macros if possible. */ 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if U_HAVE_STDINT_H 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/* 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * We mostly need <stdint.h> (which defines the standard integer types) but not <inttypes.h>. 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * <inttypes.h> includes <stdint.h> and adds the printf/scanf helpers PRId32, SCNx16 etc. 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * which we almost never use, plus stuff like imaxabs() which we never use. 65f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) */ 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <stdint.h> 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if U_PLATFORM == U_PF_OS390 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/* The features header is needed to get (u)int64_t sometimes. */ 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <features.h> 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/* z/OS has <stdint.h>, but some versions are missing uint8_t (APAR PK62248). */ 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if !defined(__uint8_t) 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define __uint8_t 1 74f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)typedef unsigned char uint8_t; 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif /* U_PLATFORM == U_PF_OS390 */ 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#elif U_HAVE_INTTYPES_H 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# include <inttypes.h> 81424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 82424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)#else /* neither U_HAVE_STDINT_H nor U_HAVE_INTTYPES_H */ 83f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 84424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)#if ! U_HAVE_INT8_T 85424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)typedef signed char int8_t; 86424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)#endif 87424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 88424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)#if ! U_HAVE_UINT8_T 89424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)typedef unsigned char uint8_t; 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if ! U_HAVE_INT16_T 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef signed short int16_t; 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if ! U_HAVE_UINT16_T 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef unsigned short uint16_t; 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if ! U_HAVE_INT32_T 1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef signed int int32_t; 1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 103 104#if ! U_HAVE_UINT32_T 105typedef 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