150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho/*
250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho******************************************************************************
350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho*
454dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius*   Copyright (C) 1997-2012, International Business Machines
550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho*   Corporation and others.  All Rights Reserved.
650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho*
750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho******************************************************************************
850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho*
950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho*  FILE NAME : ptypes.h
1050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho*
1150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho*   Date        Name        Description
1250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho*   05/13/98    nos         Creation (content moved here from ptypes.h).
1350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho*   03/02/99    stephen     Added AS400 support.
1450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho*   03/30/99    stephen     Added Linux support.
1550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho*   04/13/99    stephen     Reworked for autoconf.
1650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho*   09/18/08    srl         Moved basic types back to ptypes.h from platform.h
1750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho******************************************************************************
1850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho*/
1950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
2054dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius/**
2154dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius * \file
2254dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius * \brief C API: Definitions of integer types of various widths
2354dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius */
2454dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius
2550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho#ifndef _PTYPES_H
2650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho#define _PTYPES_H
2750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
28103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius/**
29103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius * \def __STDC_LIMIT_MACROS
30103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius * According to the Linux stdint.h, the ISO C99 standard specifies that in C++ implementations
31103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius * macros like INT32_MIN and UINTPTR_MAX should only be defined if explicitly requested.
32103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius * We need to define __STDC_LIMIT_MACROS before including stdint.h in C++ code
33103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius * that uses such limit macros.
34103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius * @internal
35103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius */
36103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius#ifndef __STDC_LIMIT_MACROS
37103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius#define __STDC_LIMIT_MACROS
38103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius#endif
39103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius
40103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius/* NULL, size_t, wchar_t */
41103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius#include <stddef.h>
42103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius
43103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius/*
44103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius * If all compilers provided all of the C99 headers and types,
45103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius * we would just unconditionally #include <stdint.h> here
46103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius * and not need any of the stuff after including platform.h.
47103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius */
4850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
49103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius/* Find out if we have stdint.h etc. */
5050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho#include "unicode/platform.h"
5150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
5250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho/*===========================================================================*/
5350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho/* Generic data types                                                        */
5450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho/*===========================================================================*/
5550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
56103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius/* If your platform does not have the <stdint.h> header, you may
57103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius   need to edit the typedefs in the #else section below.
58103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius   Use #if...#else...#endif with predefined compiler macros if possible. */
59103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius#if U_HAVE_STDINT_H
6050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
61103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius/*
62103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius * We mostly need <stdint.h> (which defines the standard integer types) but not <inttypes.h>.
63103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius * <inttypes.h> includes <stdint.h> and adds the printf/scanf helpers PRId32, SCNx16 etc.
64103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius * which we almost never use, plus stuff like imaxabs() which we never use.
65103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius */
66103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius#include <stdint.h>
67103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius
68103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius#if U_PLATFORM == U_PF_OS390
6950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho/* The features header is needed to get (u)int64_t sometimes. */
7050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho#include <features.h>
71103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius/* z/OS has <stdint.h>, but some versions are missing uint8_t (APAR PK62248). */
7250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho#if !defined(__uint8_t)
7350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho#define __uint8_t 1
7450294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehotypedef unsigned char uint8_t;
7550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho#endif
76103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius#endif /* U_PLATFORM == U_PF_OS390 */
77103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius
78103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius#elif U_HAVE_INTTYPES_H
7950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
80103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius#   include <inttypes.h>
8150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
82103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius#else /* neither U_HAVE_STDINT_H nor U_HAVE_INTTYPES_H */
8350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
8450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho#if ! U_HAVE_INT8_T
8550294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehotypedef signed char int8_t;
8650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho#endif
8750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
8850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho#if ! U_HAVE_UINT8_T
8950294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehotypedef unsigned char uint8_t;
9050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho#endif
9150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
9250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho#if ! U_HAVE_INT16_T
9350294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehotypedef signed short int16_t;
9450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho#endif
9550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
9650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho#if ! U_HAVE_UINT16_T
9750294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehotypedef unsigned short uint16_t;
9850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho#endif
9950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
10050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho#if ! U_HAVE_INT32_T
10150294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehotypedef signed int int32_t;
10250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho#endif
10350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
10450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho#if ! U_HAVE_UINT32_T
10550294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehotypedef unsigned int uint32_t;
10650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho#endif
10750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
10850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho#if ! U_HAVE_INT64_T
109103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius#ifdef _MSC_VER
110103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    typedef signed __int64 int64_t;
111103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius#else
11250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    typedef signed long long int64_t;
113103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius#endif
11450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho#endif
11550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
11650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho#if ! U_HAVE_UINT64_T
117103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius#ifdef _MSC_VER
118103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    typedef unsigned __int64 uint64_t;
119103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius#else
12050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    typedef unsigned long long uint64_t;
121103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius#endif
12250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho#endif
12350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
124103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius#endif /* U_HAVE_STDINT_H / U_HAVE_INTTYPES_H */
12550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
12650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho#endif /* _PTYPES_H */
127