/*  $OpenBSD: stdint.h,v 1.4 2006/12/10 22:17:55 deraadt Exp $  */

/*
 * Copyright (c) 1997, 2005 Todd C. Miller <Todd.Miller@courtesan.com>
 *
 * Permission to use, copy, modify, and distribute this software for any
 * purpose with or without fee is hereby granted, provided that the above
 * copyright notice and this permission notice appear in all copies.
 *
 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
 */

#ifndef _SYS_STDINT_H_
#define _SYS_STDINT_H_

#include <sys/cdefs.h>
#include <sys/_types.h>

/* 7.18.1.1 Exact-width integer types (also in sys/types.h) */
#ifndef _INT8_T_DEFINED_
#define _INT8_T_DEFINED_
typedef __int8_t        int8_t;
#endif

#ifndef _UINT8_T_DEFINED_
#define _UINT8_T_DEFINED_
typedef __uint8_t       uint8_t;
#endif

#ifndef _INT16_T_DEFINED_
#define _INT16_T_DEFINED_
typedef __int16_t       int16_t;
#endif

#ifndef _UINT16_T_DEFINED_
#define _UINT16_T_DEFINED_
typedef __uint16_t      uint16_t;
#endif

#ifndef _INT32_T_DEFINED_
#define _INT32_T_DEFINED_
typedef __int32_t       int32_t;
#endif

#ifndef _UINT32_T_DEFINED_
#define _UINT32_T_DEFINED_
typedef __uint32_t      uint32_t;
#endif

#ifndef _INT64_T_DEFINED_
#define _INT64_T_DEFINED_
typedef __int64_t       int64_t;
#endif

#ifndef _UINT64_T_DEFINED_
#define _UINT64_T_DEFINED_
typedef __uint64_t      uint64_t;
#endif

/* 7.18.1.2 Minimum-width integer types */
typedef __int_least8_t      int_least8_t;
typedef __uint_least8_t     uint_least8_t;
typedef __int_least16_t     int_least16_t;
typedef __uint_least16_t    uint_least16_t;
typedef __int_least32_t     int_least32_t;
typedef __uint_least32_t    uint_least32_t;
typedef __int_least64_t     int_least64_t;
typedef __uint_least64_t    uint_least64_t;

/* 7.18.1.3 Fastest minimum-width integer types */
typedef __int_fast8_t       int_fast8_t;
typedef __uint_fast8_t      uint_fast8_t;
typedef __int_fast16_t      int_fast16_t;
typedef __uint_fast16_t     uint_fast16_t;
typedef __int_fast32_t      int_fast32_t;
typedef __uint_fast32_t     uint_fast32_t;
typedef __int_fast64_t      int_fast64_t;
typedef __uint_fast64_t     uint_fast64_t;

/* 7.18.1.4 Integer types capable of holding object pointers */
#ifndef _INTPTR_T_DEFINED_
#define _INTPTR_T_DEFINED_
typedef __intptr_t      intptr_t;
#endif

#ifndef _UINTPTR_T_DEFINED_
#define _UINTPTR_T_DEFINED_
typedef __uintptr_t     uintptr_t;
#endif

/* 7.18.1.5 Greatest-width integer types */
typedef __intmax_t      intmax_t;
typedef __uintmax_t     uintmax_t;

//#if !defined(__cplusplus) || defined(__STDC_LIMIT_MACROS)
/*
 * 7.18.2 Limits of specified-width integer types.
 *
 * The following object-like macros specify the minimum and maximum limits
 * of integer types corresponding to the typedef names defined above.
 */

/* 7.18.2.1 Limits of exact-width integer types */
#define INT8_MIN        (-0x7f - 1)
#define INT16_MIN       (-0x7fff - 1)
#define INT32_MIN       (-0x7fffffff - 1)
#ifdef __x86_64__
#define INT64_MIN       (-0x7fffffffffffffffL - 1)
#else
#define INT64_MIN       (-0x7fffffffffffffffLL - 1)
#endif

#define INT8_MAX        0x7f
#define INT16_MAX       0x7fff
#define INT32_MAX       0x7fffffff
#ifdef __x86_64__
#define INT64_MAX       0x7fffffffffffffffL
#else
#define INT64_MAX       0x7fffffffffffffffLL
#endif

#define UINT8_MAX       0xff
#define UINT16_MAX      0xffff
#define UINT32_MAX      0xffffffffU
#ifdef __x86_64__
#define UINT64_MAX      0xffffffffffffffffUL
#else
#define UINT64_MAX      0xffffffffffffffffULL
#endif

/* 7.18.2.2 Limits of minimum-width integer types */
#define INT_LEAST8_MIN      INT8_MIN
#define INT_LEAST16_MIN     INT16_MIN
#define INT_LEAST32_MIN     INT32_MIN
#define INT_LEAST64_MIN     INT64_MIN

#define INT_LEAST8_MAX      INT8_MAX
#define INT_LEAST16_MAX     INT16_MAX
#define INT_LEAST32_MAX     INT32_MAX
#define INT_LEAST64_MAX     INT64_MAX

#define UINT_LEAST8_MAX     UINT8_MAX
#define UINT_LEAST16_MAX    UINT16_MAX
#define UINT_LEAST32_MAX    UINT32_MAX
#define UINT_LEAST64_MAX    UINT64_MAX

/* 7.18.2.3 Limits of fastest minimum-width integer types */
#define INT_FAST8_MIN       INT8_MIN
#define INT_FAST16_MIN      INT16_MIN
#define INT_FAST32_MIN      INT32_MIN
#define INT_FAST64_MIN      INT64_MIN

#define INT_FAST8_MAX       INT8_MAX
#ifdef __x86_64__
#define INT_FAST16_MAX      INT64_MAX
#define INT_FAST32_MAX      INT64_MAX
#else
#define INT_FAST16_MAX      INT32_MAX
#define INT_FAST32_MAX      INT32_MAX
#endif
#define INT_FAST64_MAX      INT64_MAX

#define UINT_FAST8_MAX      UINT8_MAX
#ifdef __x86_64__
#define UINT_FAST16_MAX     UINT64_MAX
#define UINT_FAST32_MAX     UINT64_MAX
#else
#define UINT_FAST16_MAX     UINT32_MAX
#define UINT_FAST32_MAX     UINT32_MAX
#endif
#define UINT_FAST64_MAX     UINT64_MAX

/* 7.18.2.4 Limits of integer types capable of holding object pointers */
#ifdef __x86_64__
#define INTPTR_MIN      INT64_MIN
#define INTPTR_MAX      INT64_MAX
#define UINTPTR_MAX     UINT64_MAX
#else
#define INTPTR_MIN      INT32_MIN
#define INTPTR_MAX      INT32_MAX
#define UINTPTR_MAX     UINT32_MAX
#endif

/* 7.18.2.5 Limits of greatest-width integer types */
#define INTMAX_MIN      INT64_MIN
#define INTMAX_MAX      INT64_MAX
#define UINTMAX_MAX     UINT64_MAX

/*
 * 7.18.3 Limits of other integer types.
 *
 * The following object-like macros specify the minimum and maximum limits
 * of integer types corresponding to types specified in other standard
 * header files.
 */

/* Limits of ptrdiff_t */
#define PTRDIFF_MIN     INTPTR_MIN
#define PTRDIFF_MAX     INTPTR_MAX

/* Limits of size_t (also in limits.h) */
#ifndef SIZE_MAX
#define SIZE_MAX        UINTPTR_MAX
#endif

/* Limits of wchar_t */
# ifdef __WCHAR_MAX__
#  define WCHAR_MAX __WCHAR_MAX__
# else
#  define WCHAR_MAX (2147483647)
# endif
# ifdef __WCHAR_MIN__
#  define WCHAR_MIN __WCHAR_MIN__
# elif L'\0' - 1 > 0
#  define WCHAR_MIN L'\0'
# else
#  define WCHAR_MIN (-WCHAR_MAX - 1)
# endif

/* Limits of wint_t */
# define WINT_MIN      (0u)
# define WINT_MAX      (4294967295u)

//#endif /* __cplusplus || __STDC_LIMIT_MACROS */

//#if !defined(__cplusplus) || defined(__STDC_CONSTANT_MACROS)
/*
 * 7.18.4 Macros for integer constants.
 *
 * The following function-like macros expand to integer constants
 * suitable for initializing objects that have integer types corresponding
 * to types defined in <stdint.h>.  The argument in any instance of
 * these macros shall be a decimal, octal, or hexadecimal constant with
 * a value that does not exceed the limits for the corresponding type.
 */

/* 7.18.4.1 Macros for minimum-width integer constants. */
#define INT8_C(_c)      (_c)
#define INT16_C(_c)     (_c)
#define INT32_C(_c)     (_c)
#define INT64_C(_c)     __CONCAT(_c, LL)

#define UINT8_C(_c)     (_c)
#define UINT16_C(_c)    (_c)
#define UINT32_C(_c)    __CONCAT(_c, U)
#define UINT64_C(_c)    __CONCAT(_c, ULL)

/* 7.18.4.2 Macros for greatest-width integer constants. */
#define INTMAX_C(_c)    __CONCAT(_c, LL)
#define UINTMAX_C(_c)   __CONCAT(_c, ULL)

//#endif /* __cplusplus || __STDC_CONSTANT_MACROS */

#endif /* _SYS_STDINT_H_ */
