/**
 * D header file for C99.
 *
 * $(C_HEADER_DESCRIPTION pubs.opengroup.org/onlinepubs/009695399/basedefs/_stdint.h.html, _stdint.h)
 *
 * Copyright: Copyright Sean Kelly 2005 - 2018
 * License: Distributed under the
 *      $(LINK2 http://www.boost.org/LICENSE_1_0.txt, Boost Software License 1.0).
 *    (See accompanying file LICENSE)
 * Authors:   Sean Kelly
 * Source:    $(DRUNTIMESRC core/stdc/_stdint.d)
 * Standards: ISO/IEC 9899:1999 (E)
 */

module core.stdc.stdint;

import core.stdc.config;
import core.stdc.stddef; // for wchar_t
import core.stdc.signal; // for sig_atomic_t
import core.stdc.wchar_; // for wint_t

version (OSX)
    version = Darwin;
else version (iOS)
    version = Darwin;
else version (TVOS)
    version = Darwin;
else version (WatchOS)
    version = Darwin;

// Can't be `private` because of @@@BUG11173@@@.
T _typify(T)(T val) @safe pure nothrow { return val; }

extern (C):
@trusted: // Types and constants only.
nothrow:
@nogc:


static if (is(ucent))
{
    alias int128_t = cent;   ///
    alias uint128_t = ucent; ///
}

version (Windows)
{
    alias int8_t   = byte;   ///
    alias int16_t  = short;  ///
    alias uint8_t  = ubyte;  ///
    alias uint16_t = ushort; ///
    alias int32_t  = int;    ///
    alias uint32_t = uint;   ///
    alias int64_t  = long;   ///
    alias uint64_t = ulong;  ///

    alias int_least8_t   = byte;     ///
    alias uint_least8_t  = ubyte;    ///
    alias int_least16_t  = short;    ///
    alias uint_least16_t = ushort;   ///
    alias int_least32_t  = int32_t;  ///
    alias uint_least32_t = uint32_t; ///
    alias int_least64_t  = long;     ///
    alias uint_least64_t = ulong;    ///

    alias int_fast8_t   = byte;     ///
    alias uint_fast8_t  = ubyte;    ///
    version (MinGW)
    {
        alias int_fast16_t  = short;  ///
        alias uint_fast16_t = ushort; ///
    }
    else
    {
        alias int_fast16_t  = int;  ///
        alias uint_fast16_t = uint; ///
    }
    alias int_fast32_t  = int32_t;  ///
    alias uint_fast32_t = uint32_t; ///
    alias int_fast64_t  = long;     ///
    alias uint_fast64_t = ulong;    ///

    alias intptr_t  = ptrdiff_t; ///
    alias uintptr_t = size_t;    ///
    alias intmax_t  = long;      ///
    alias uintmax_t = ulong;     ///
}
else version (Darwin)
{
    alias int8_t   = byte;          ///
    alias int16_t  = short;         ///
    alias uint8_t  = ubyte;         ///
    alias uint16_t = ushort;        ///
    alias int32_t  = int;           ///
    alias uint32_t = uint;          ///
    alias int64_t  = cpp_longlong;  ///
    alias uint64_t = cpp_ulonglong; ///

    alias int_least8_t   = byte;     ///
    alias uint_least8_t  = ubyte;    ///
    alias int_least16_t  = short;    ///
    alias uint_least16_t = ushort;   ///
    alias int_least32_t  = int;      ///
    alias uint_least32_t = uint;     ///
    alias int_least64_t  = int64_t;  ///
    alias uint_least64_t = uint64_t; ///

    alias int_fast8_t   = byte;     ///
    alias uint_fast8_t  = ubyte;    ///
    alias int_fast16_t  = short;    ///
    alias uint_fast16_t = ushort;   ///
    alias int_fast32_t  = int;      ///
    alias uint_fast32_t = uint;     ///
    alias int_fast64_t  = int64_t;  ///
    alias uint_fast64_t = uint64_t; ///

    alias intptr_t  = cpp_long;  ///
    alias uintptr_t = cpp_ulong; ///
    alias intmax_t  = long;      ///
    alias uintmax_t = ulong;     ///
}
else version (linux)
{
    alias int8_t   = byte;   ///
    alias int16_t  = short;  ///
    alias uint8_t  = ubyte;  ///
    alias uint16_t = ushort; ///
    alias int32_t  = int;    ///
    alias uint32_t = uint;   ///
    alias int64_t  = long;   ///
    alias uint64_t = ulong;  ///

    alias int_least8_t   = byte;   ///
    alias uint_least8_t  = ubyte;  ///
    alias int_least16_t  = short;  ///
    alias uint_least16_t = ushort; ///
    alias int_least32_t  = int;    ///
    alias uint_least32_t = uint;   ///
    alias int_least64_t  = long;   ///
    alias uint_least64_t = ulong;  ///

    version (CRuntime_Musl)
    {
        alias int_fast8_t   = byte;  ///
        alias uint_fast8_t  = ubyte; ///
        alias int_fast16_t  = int;   ///
        alias uint_fast16_t = uint;  ///
        alias int_fast32_t  = int;   ///
        alias uint_fast32_t = uint;  ///
    }
    else
    {
        alias int_fast8_t   = byte;      ///
        alias uint_fast8_t  = ubyte;     ///
        alias int_fast16_t  = ptrdiff_t; ///
        alias uint_fast16_t = size_t;    ///
        alias int_fast32_t  = ptrdiff_t; ///
        alias uint_fast32_t = size_t;    ///
    }
    alias int_fast64_t  = long;      ///
    alias uint_fast64_t = ulong;     ///

    alias intptr_t  = ptrdiff_t; ///
    alias uintptr_t = size_t;    ///
    alias intmax_t  = long;      ///
    alias uintmax_t = ulong;     ///
}
else version (CRuntime_Glibc)
{
    alias int8_t   = byte;   ///
    alias int16_t  = short;  ///
    alias uint8_t  = ubyte;  ///
    alias uint16_t = ushort; ///
    alias int32_t  = int;    ///
    alias uint32_t = uint;   ///
    alias int64_t  = long;   ///
    alias uint64_t = ulong;  ///

    alias int_least8_t   = byte;   ///
    alias uint_least8_t  = ubyte;  ///
    alias int_least16_t  = short;  ///
    alias uint_least16_t = ushort; ///
    alias int_least32_t  = int;    ///
    alias uint_least32_t = uint;   ///
    alias int_least64_t  = long;   ///
    alias uint_least64_t = ulong;  ///

    alias int_fast8_t   = byte;      ///
    alias uint_fast8_t  = ubyte;     ///
    alias int_fast16_t  = ptrdiff_t; ///
    alias uint_fast16_t = size_t;    ///
    alias int_fast32_t  = ptrdiff_t; ///
    alias uint_fast32_t = size_t;    ///
    alias int_fast64_t  = long;      ///
    alias uint_fast64_t = ulong;     ///

    alias intptr_t  = ptrdiff_t; ///
    alias uintptr_t = size_t;    ///
    alias intmax_t  = long;      ///
    alias uintmax_t = ulong;     ///
}
else version (DragonFlyBSD)
{
    alias int8_t   = byte;   ///
    alias int16_t  = short;  ///
    alias uint8_t  = ubyte;  ///
    alias uint16_t = ushort; ///
    alias int32_t  = int;    ///
    alias uint32_t = uint;   ///
    alias int64_t  = long;   ///
    alias uint64_t = ulong;  ///

    alias int_least8_t   = int8_t;   ///
    alias uint_least8_t  = uint8_t;  ///
    alias int_least16_t  = int16_t;  ///
    alias uint_least16_t = uint16_t; ///
    alias int_least32_t  = int32_t;  ///
    alias uint_least32_t = uint32_t; ///
    alias int_least64_t  = int64_t;  ///
    alias uint_least64_t = uint64_t; ///

    alias int_fast8_t   = int32_t;   ///
    alias uint_fast8_t  = uint32_t;  ///
    alias int_fast16_t  = int32_t;   ///
    alias uint_fast16_t = uint32_t;  ///
    alias int_fast32_t  = int32_t;   ///
    alias uint_fast32_t = uint32_t;  ///
    alias int_fast64_t  = int64_t;   ///
    alias uint_fast64_t = uint64_t;  ///

    alias intptr_t  = ptrdiff_t; ///
    alias uintptr_t = size_t;    ///
    alias intmax_t  = long;      ///
    alias uintmax_t = ulong;     ///
}
else version (FreeBSD)
{
    alias int8_t   = byte;   ///
    alias int16_t  = short;  ///
    alias uint8_t  = ubyte;  ///
    alias uint16_t = ushort; ///
    alias int32_t  = int;    ///
    alias uint32_t = uint;   ///
    alias int64_t  = long;   ///
    alias uint64_t = ulong;  ///

    alias int_least8_t   = byte;   ///
    alias uint_least8_t  = ubyte;  ///
    alias int_least16_t  = short;  ///
    alias uint_least16_t = ushort; ///
    alias int_least32_t  = int;    ///
    alias uint_least32_t = uint;   ///
    alias int_least64_t  = long;   ///
    alias uint_least64_t = ulong;  ///

    alias int_fast8_t   = int;   ///
    alias uint_fast8_t  = uint;  ///
    alias int_fast16_t  = int;   ///
    alias uint_fast16_t = uint;  ///
    alias int_fast32_t  = int;   ///
    alias uint_fast32_t = uint;  ///
    alias int_fast64_t  = long;  ///
    alias uint_fast64_t = ulong; ///

    alias intptr_t  = ptrdiff_t; ///
    alias uintptr_t = size_t;    ///
    alias intmax_t  = long;      ///
    alias uintmax_t = ulong;     ///
}
else version (NetBSD)
{
    alias int8_t   = byte;   ///
    alias int16_t  = short;  ///
    alias uint8_t  = ubyte;  ///
    alias uint16_t = ushort; ///
    alias int32_t  = int;    ///
    alias uint32_t = uint;   ///
    alias int64_t  = long;   ///
    alias uint64_t = ulong;  ///

    alias int_least8_t   = int8_t;   ///
    alias uint_least8_t  = uint8_t;  ///
    alias int_least16_t  = int16_t;  ///
    alias uint_least16_t = uint16_t; ///
    alias int_least32_t  = int32_t;  ///
    alias uint_least32_t = uint32_t; ///
    alias int_least64_t  = int64_t;  ///
    alias uint_least64_t = uint64_t; ///

    alias int_fast8_t   = int32_t;   ///
    alias uint_fast8_t  = uint32_t;  ///
    alias int_fast16_t  = int32_t;   ///
    alias uint_fast16_t = uint32_t;  ///
    alias int_fast32_t  = int32_t;   ///
    alias uint_fast32_t = uint32_t;  ///
    alias int_fast64_t  = int64_t;   ///
    alias uint_fast64_t = uint64_t;  ///

    alias intptr_t  = ptrdiff_t; ///
    alias uintptr_t = size_t;    ///
    alias intmax_t  = long;      ///
    alias uintmax_t = ulong;     ///
}
else version (OpenBSD)
{
    alias int8_t   = byte;          ///
    alias int16_t  = short;         ///
    alias uint8_t  = ubyte;         ///
    alias uint16_t = ushort;        ///
    alias int32_t  = int;           ///
    alias uint32_t = uint;          ///
    alias int64_t  = cpp_longlong;  ///
    alias uint64_t = cpp_ulonglong; ///

    alias int_least8_t   = byte;          ///
    alias uint_least8_t  = ubyte;         ///
    alias int_least16_t  = short;         ///
    alias uint_least16_t = ushort;        ///
    alias int_least32_t  = int;           ///
    alias uint_least32_t = uint;          ///
    alias int_least64_t  = cpp_longlong;  ///
    alias uint_least64_t = cpp_ulonglong; ///

    alias int_fast8_t   = int;           ///
    alias uint_fast8_t  = uint;          ///
    alias int_fast16_t  = int;           ///
    alias uint_fast16_t = uint;          ///
    alias int_fast32_t  = int;           ///
    alias uint_fast32_t = uint;          ///
    alias int_fast64_t  = cpp_longlong;  ///
    alias uint_fast64_t = cpp_ulonglong; ///

    alias intptr_t  = cpp_long;      ///
    alias uintptr_t = cpp_ulong;     ///
    alias intmax_t  = cpp_longlong;  ///
    alias uintmax_t = cpp_ulonglong; ///
}
else version (Solaris)
{
    alias int8_t   = char;   ///
    alias int16_t  = short;  ///
    alias uint8_t  = ubyte;  ///
    alias uint16_t = ushort; ///
    alias int32_t  = int;    ///
    alias uint32_t = uint;   ///
    alias int64_t  = long;   ///
    alias uint64_t = ulong;  ///

    alias int_least8_t   = char;   ///
    alias uint_least8_t  = ubyte;  ///
    alias int_least16_t  = short;  ///
    alias uint_least16_t = ushort; ///
    alias int_least32_t  = int;    ///
    alias uint_least32_t = uint;   ///
    alias int_least64_t  = long;   ///
    alias uint_least64_t = ulong;  ///

    alias int_fast8_t   = char;  ///
    alias uint_fast8_t  = ubyte; ///
    alias int_fast16_t  = int;   ///
    alias uint_fast16_t = uint;  ///
    alias int_fast32_t  = int;   ///
    alias uint_fast32_t = uint;  ///
    alias int_fast64_t  = long;  ///
    alias uint_fast64_t = ulong; ///

    alias intptr_t  = ptrdiff_t; ///
    alias uintptr_t = size_t;    ///
    alias intmax_t  = long;      ///
    alias uintmax_t = ulong;     ///
}
else version (WASI)
{
    alias int8_t   = byte;   ///
    alias int16_t  = short;  ///
    alias uint8_t  = ubyte;  ///
    alias uint16_t = ushort; ///
    alias int32_t  = int;    ///
    alias uint32_t = uint;   ///
    alias int64_t  = long;   ///
    alias uint64_t = ulong;  ///

    alias int_least8_t   = byte;   ///
    alias uint_least8_t  = ubyte;  ///
    alias int_least16_t  = short;  ///
    alias uint_least16_t = ushort; ///
    alias int_least32_t  = int;    ///
    alias uint_least32_t = uint;   ///
    alias int_least64_t  = long;   ///
    alias uint_least64_t = ulong;  ///

    alias int_fast8_t   = byte;      ///
    alias uint_fast8_t  = ubyte;     ///
    alias int_fast16_t  = ptrdiff_t; ///
    alias uint_fast16_t = size_t;    ///
    alias int_fast32_t  = ptrdiff_t; ///
    alias uint_fast32_t = size_t;    ///

    alias int_fast64_t  = long;      ///
    alias uint_fast64_t = ulong;     ///

    alias intptr_t  = ptrdiff_t; ///
    alias uintptr_t = size_t;    ///
    alias intmax_t  = long;      ///
    alias uintmax_t = ulong;     ///
}
else
{
    static assert(false, "Unsupported architecture.");
}



///
enum int8_t   INT8_MIN  = int8_t.min;
///
enum int8_t   INT8_MAX  = int8_t.max;
///
enum int16_t  INT16_MIN = int16_t.min;
///
enum int16_t  INT16_MAX = int16_t.max;
///
enum int32_t  INT32_MIN = int32_t.min;
///
enum int32_t  INT32_MAX = int32_t.max;
///
enum int64_t  INT64_MIN = int64_t.min;
///
enum int64_t  INT64_MAX = int64_t.max;

///
enum uint8_t  UINT8_MAX  = uint8_t.max;
///
enum uint16_t UINT16_MAX = uint16_t.max;
///
enum uint32_t UINT32_MAX = uint32_t.max;
///
enum uint64_t UINT64_MAX = uint64_t.max;

///
enum int_least8_t    INT_LEAST8_MIN   = int_least8_t.min;
///
enum int_least8_t    INT_LEAST8_MAX   = int_least8_t.max;
///
enum int_least16_t   INT_LEAST16_MIN  = int_least16_t.min;
///
enum int_least16_t   INT_LEAST16_MAX  = int_least16_t.max;
///
enum int_least32_t   INT_LEAST32_MIN  = int_least32_t.min;
///
enum int_least32_t   INT_LEAST32_MAX  = int_least32_t.max;
///
enum int_least64_t   INT_LEAST64_MIN  = int_least64_t.min;
///
enum int_least64_t   INT_LEAST64_MAX  = int_least64_t.max;

///
enum uint_least8_t   UINT_LEAST8_MAX  = uint_least8_t.max;
///
enum uint_least16_t  UINT_LEAST16_MAX = uint_least16_t.max;
///
enum uint_least32_t  UINT_LEAST32_MAX = uint_least32_t.max;
///
enum uint_least64_t  UINT_LEAST64_MAX = uint_least64_t.max;

///
enum int_fast8_t   INT_FAST8_MIN   = int_fast8_t.min;
///
enum int_fast8_t   INT_FAST8_MAX   = int_fast8_t.max;
///
enum int_fast16_t  INT_FAST16_MIN  = int_fast16_t.min;
///
enum int_fast16_t  INT_FAST16_MAX  = int_fast16_t.max;
///
enum int_fast32_t  INT_FAST32_MIN  = int_fast32_t.min;
///
enum int_fast32_t  INT_FAST32_MAX  = int_fast32_t.max;
///
enum int_fast64_t  INT_FAST64_MIN  = int_fast64_t.min;
///
enum int_fast64_t  INT_FAST64_MAX  = int_fast64_t.max;

///
enum uint_fast8_t  UINT_FAST8_MIN  = uint_fast8_t.min;
///
enum uint_fast8_t  UINT_FAST8_MAX  = uint_fast8_t.max;
///
enum uint_fast16_t UINT_FAST16_MIN = uint_fast16_t.min;
///
enum uint_fast16_t UINT_FAST16_MAX = uint_fast16_t.max;
///
enum uint_fast32_t UINT_FAST32_MIN = uint_fast32_t.min;
///
enum uint_fast32_t UINT_FAST32_MAX = uint_fast32_t.max;
///
enum uint_fast64_t UINT_FAST64_MIN = uint_fast64_t.min;
///
enum uint_fast64_t UINT_FAST64_MAX = uint_fast64_t.max;

///
enum intptr_t  INTPTR_MIN  = intptr_t.min;
///
enum intptr_t  INTPTR_MAX  = intptr_t.max;

///
enum uintptr_t UINTPTR_MIN = uintptr_t.min;
///
enum uintptr_t UINTPTR_MAX = uintptr_t.max;

///
enum intmax_t  INTMAX_MIN  = intmax_t.min;
///
enum intmax_t  INTMAX_MAX  = intmax_t.max;

///
enum uintmax_t UINTMAX_MAX = uintmax_t.max;

///
enum ptrdiff_t PTRDIFF_MIN = ptrdiff_t.min;
///
enum ptrdiff_t PTRDIFF_MAX = ptrdiff_t.max;

///
enum sig_atomic_t SIG_ATOMIC_MIN = sig_atomic_t.min;
///
enum sig_atomic_t SIG_ATOMIC_MAX = sig_atomic_t.max;

///
enum size_t  SIZE_MAX  = size_t.max;

///
enum wchar_t WCHAR_MIN = wchar_t.min;
///
enum wchar_t WCHAR_MAX = wchar_t.max;

///
enum wint_t  WINT_MIN  = wint_t.min;
///
enum wint_t  WINT_MAX  = wint_t.max;

///
alias INT8_C  = _typify!int8_t ;
///
alias INT16_C = _typify!int16_t;
///
alias INT32_C = _typify!int32_t;
///
alias INT64_C = _typify!int64_t;

///
alias UINT8_C  = _typify!uint8_t ;
///
alias UINT16_C = _typify!uint16_t;
///
alias UINT32_C = _typify!uint32_t;
///
alias UINT64_C = _typify!uint64_t;

///
alias INTMAX_C  = _typify!intmax_t ;
///
alias UINTMAX_C = _typify!uintmax_t;
