#ifndef _MSL_CINTTYPES
#define _MSL_CINTTYPES

#include <ansi_params.h>

#if _MSL_C99

#if !_MSL_USING_MW_C_HEADERS
    #include <inttypes.h>

    #if _MSL_PUT_THIRD_PARTY_C_IN_STD
        #include <msl_cpp_std_inttypes.h>
    #endif
#else

#include <cstdint>
#include <cstdlib>
#if _MSL_WIDE_CHAR
    #include <wcstoul.h>
#endif

#include <div_t.h>

#ifndef RC_INVOKED

_MSL_BEGIN_NAMESPACE_STD
    _MSL_BEGIN_EXTERN_C

#if _MSL_LONGLONG
typedef lldiv_t imaxdiv_t;
#else
typedef ldiv_t imaxdiv_t;
#endif

#if (!defined(__cplusplus)) || defined(__STDC_FORMAT_MACROS)
    #define PRId8 "d"
    #define PRId16 "hd"
    #define PRId32 "ld"
    #define PRId64 "lld"
    #define PRIdLEAST8 "d"
    #define PRIdLEAST16 "hd"
    #define PRIdLEAST32 "ld"
    #define PRIdLEAST64 "lld"
    #define PRIdFAST8 "d"
    #define PRIdFAST16 "hd"
    #define PRIdFAST32 "ld"
    #define PRIdFAST64 "lld"
    #define PRIdMAX "lld"
    #define PRIdPTR "ld"
    #define PRIi8 "i"
    #define PRIi16 "hi"
    #define PRIi32 "li"
    #define PRIi64 "lli"
    #define PRIiLEAST8 "i"
    #define PRIiLEAST16 "hi"
    #define PRIiLEAST32 "li"
    #define PRIiLEAST64 "lli"
    #define PRIiFAST8 "i"
    #define PRIiFAST16 "hi"
    #define PRIiFAST32 "li"
    #define PRIiFAST64 "lli"
    #define PRIiMAX "lli"
    #define PRIiPTR "li"
#endif

#if (!defined(__cplusplus)) || defined(__STDC_FORMAT_MACROS)
    #define PRIo8 "o"
    #define PRIo16 "ho"
    #define PRIo32 "lo"
    #define PRIo64 "llo"
    #define PRIoLEAST8 "o"
    #define PRIoLEAST16 "ho"
    #define PRIoLEAST32 "lo"
    #define PRIoLEAST64 "llo"
    #define PRIoFAST8 "o"
    #define PRIoFAST16 "ho"
    #define PRIoFAST32 "lo"
    #define PRIoFAST64 "llo"
    #define PRIoMAX "llo"
    #define PRIoPTR "lo"
    #define PRIu8 "u"
    #define PRIu16 "hu"
    #define PRIu32 "lu"
    #define PRIu64 "llu"
    #define PRIuLEAST8 "u"
    #define PRIuLEAST16 "hu"
    #define PRIuLEAST32 "lu"
    #define PRIuLEAST64 "llu"
    #define PRIuFAST8 "u"
    #define PRIuFAST16 "hu"
    #define PRIuFAST32 "lu"
    #define PRIuFAST64 "llu"
    #define PRIuMAX "llu"
    #define PRIuPTR "lu"
    #define PRIx8 "x"
    #define PRIx16 "hx"
    #define PRIx32 "lx"
    #define PRIx64 "llx"
    #define PRIxLEAST8 "x"
    #define PRIxLEAST16 "hx"
    #define PRIxLEAST32 "lx"
    #define PRIxLEAST64 "llx"
    #define PRIxFAST8 "x"
    #define PRIxFAST16 "hx"
    #define PRIxFAST32 "lx"
    #define PRIxFAST64 "llx"
    #define PRIxMAX "llx"
    #define PRIxPTR "lx"
    #define PRIX8 "X"
    #define PRIX16 "hX"
    #define PRIX32 "lX"
    #define PRIX64 "llX"
    #define PRIXLEAST8 "X"
    #define PRIXLEAST16 "hX"
    #define PRIXLEAST32 "lX"
    #define PRIXLEAST64 "llX"
    #define PRIXFAST8 "X"
    #define PRIXFAST16 "hX"
    #define PRIXFAST32 "lX"
    #define PRIXFAST64 "llX"
    #define PRIXMAX "llX"
    #define PRIXPTR "lX"
#endif

#if (!defined(__cplusplus)) || defined(__STDC_FORMAT_MACROS)
    #define SCNd8 "hhd"
    #define SCNd16 "hd"
    #define SCNd32 "ld"
    #define SCNd64 "lld"
    #define SCNdLEAST8 "hhd"
    #define SCNdLEAST16 "hd"
    #define SCNdLEAST32 "ld"
    #define SCNdLEAST64 "lld"
    #define SCNdFAST8 "hhd"
    #define SCNdFAST16 "hd"
    #define SCNdFAST32 "ld"
    #define SCNdFAST64 "lld"
    #define SCNdMAX "lld"
    #define SCNdPTR "ld"
    #define SCNi8 "hhi"
    #define SCNi16 "hi"
    #define SCNi32 "li"
    #define SCNi64 "lli"
    #define SCNiLEAST8 "hhi"
    #define SCNiLEAST16 "hi"
    #define SCNiLEAST32 "li"
    #define SCNiLEAST64 "lli"
    #define SCNiFAST8 "hhi"
    #define SCNiFAST16 "hi"
    #define SCNiFAST32 "li"
    #define SCNiFAST64 "lli"
    #define SCNiMAX "lli"
    #define SCNiPTR "li"
#endif

#if (!defined(__cplusplus)) || defined(__STDC_FORMAT_MACROS)
    #define SCNo8 "hho"
    #define SCNo16 "ho"
    #define SCNo32 "lo"
    #define SCNo64 "llo"
    #define SCNoLEAST8 "hho"
    #define SCNoLEAST16 "ho"
    #define SCNoLEAST32 "lo"
    #define SCNoLEAST64 "llo"
    #define SCNoFAST8 "hho"
    #define SCNoFAST16 "ho"
    #define SCNoFAST32 "lo"
    #define SCNoFAST64 "llo"
    #define SCNoMAX "llo"
    #define SCNoPTR "lo"
    #define SCNu8 "hhu"
    #define SCNu16 "hu"
    #define SCNu32 "lu"
    #define SCNu64 "llu"
    #define SCNuLEAST8 "hhu"
    #define SCNuLEAST16 "hu"
    #define SCNuLEAST32 "lu"
    #define SCNuLEAST64 "llu"
    #define SCNuFAST8 "hhu"
    #define SCNuFAST16 "hu"
    #define SCNuFAST32 "lu"
    #define SCNuFAST64 "llu"
    #define SCNuMAX "llu"
    #define SCNuPTR "lu"
    #define SCNx8 "hhx"
    #define SCNx16 "hx"
    #define SCNx32 "lx"
    #define SCNx64 "llx"
    #define SCNxLEAST8 "hhx"
    #define SCNxLEAST16 "hx"
    #define SCNxLEAST32 "lx"
    #define SCNxLEAST64 "llx"
    #define SCNxFAST8 "hhx"
    #define SCNxFAST16 "hx"
    #define SCNxFAST32 "lx"
    #define SCNxFAST64 "llx"
    #define SCNxMAX "llx"
    #define SCNxPTR "lx"
#endif

#if _MSL_LONGLONG
intmax_t _MSL_CDECL imaxabs(intmax_t j) _MSL_CANT_THROW;
_MSL_INLINE intmax_t _MSL_CDECL imaxabs (intmax_t j) _MSL_CANT_THROW {
    return (llabs(j));
}
#else
intmax_t _MSL_CDECL imaxabs(intmax_t j) _MSL_CANT_THROW;
_MSL_INLINE intmax_t _MSL_CDECL imaxabs (intmax_t j) _MSL_CANT_THROW {
    return (labs(j));
}
#endif

#if _MSL_LONGLONG
imaxdiv_t _MSL_CDECL imaxdiv(intmax_t numer, intmax_t denom) _MSL_CANT_THROW;
_MSL_INLINE imaxdiv_t _MSL_CDECL imaxdiv (intmax_t numer, intmax_t denom) _MSL_CANT_THROW {
    return (lldiv(numer, denom));
}
#else
imaxdiv_t _MSL_CDECL imaxdiv(intmax_t numer, intmax_t denom) _MSL_CANT_THROW;
_MSL_INLINE imaxdiv_t _MSL_CDECL imaxdiv (intmax_t numer, intmax_t denom) _MSL_CANT_THROW {
    return (ldiv(numer, denom));
}
#endif

#if _MSL_LONGLONG
intmax_t _MSL_CDECL strtoimax(const char * _MSL_RESTRICT nptr, char * * _MSL_RESTRICT endptr, int base) _MSL_CANT_THROW;
_MSL_INLINE intmax_t _MSL_CDECL strtoimax (const char * _MSL_RESTRICT nptr, char * * _MSL_RESTRICT endptr, int base) _MSL_CANT_THROW {
    return (strtoll(nptr, endptr, base));
}
uintmax_t _MSL_CDECL strtoumax(const char * _MSL_RESTRICT nptr, char * * _MSL_RESTRICT endptr, int base) _MSL_CANT_THROW;
_MSL_INLINE uintmax_t _MSL_CDECL strtoumax (const char * _MSL_RESTRICT nptr, char * * _MSL_RESTRICT endptr, int base) _MSL_CANT_THROW {
    return (strtoull(nptr, endptr, base));
}
#else
intmax_t _MSL_CDECL strtoimax(const char * _MSL_RESTRICT nptr, char * * _MSL_RESTRICT endptr, int base) _MSL_CANT_THROW;
_MSL_INLINE intmax_t _MSL_CDECL strtoimax (const char * _MSL_RESTRICT nptr, char * * _MSL_RESTRICT endptr, int base) _MSL_CANT_THROW {
    return (strtol(nptr, endptr, base));
}
uintmax_t _MSL_CDECL strtoumax(const char * _MSL_RESTRICT nptr, char * * _MSL_RESTRICT endptr, int base) _MSL_CANT_THROW;
_MSL_INLINE uintmax_t _MSL_CDECL strtoumax (const char * _MSL_RESTRICT nptr, char * * _MSL_RESTRICT endptr, int base) _MSL_CANT_THROW {
    return (strtoul(nptr, endptr, base));
}
#endif

#if _MSL_WIDE_CHAR
    #if _MSL_LONGLONG
intmax_t _MSL_CDECL wcstoimax(const wchar_t * _MSL_RESTRICT nptr, wchar_t * * _MSL_RESTRICT endptr, int base) _MSL_CANT_THROW;
_MSL_INLINE intmax_t _MSL_CDECL wcstoimax (const wchar_t * _MSL_RESTRICT nptr, wchar_t * * _MSL_RESTRICT endptr, int base) _MSL_CANT_THROW {
    return (wcstoll(nptr, endptr, base));
}
uintmax_t _MSL_CDECL wcstoumax(const wchar_t * _MSL_RESTRICT nptr, wchar_t * * _MSL_RESTRICT endptr, int base) _MSL_CANT_THROW;
_MSL_INLINE uintmax_t _MSL_CDECL wcstoumax (const wchar_t * _MSL_RESTRICT nptr, wchar_t * * _MSL_RESTRICT endptr, int base) _MSL_CANT_THROW {
    return (wcstoull(nptr, endptr, base));
}
    #else
intmax_t _MSL_CDECL wcstoimax(const wchar_t * _MSL_RESTRICT nptr, wchar_t * * _MSL_RESTRICT endptr, int base) _MSL_CANT_THROW;
_MSL_INLINE intmax_t _MSL_CDECL wcstoimax (const wchar_t * _MSL_RESTRICT nptr, wchar_t * * _MSL_RESTRICT endptr, int base) _MSL_CANT_THROW {
    return (wcstol(nptr, endptr, base));
}
uintmax_t _MSL_CDECL wcstoumax(const wchar_t * _MSL_RESTRICT nptr, wchar_t * * _MSL_RESTRICT endptr, int base) _MSL_CANT_THROW;
_MSL_INLINE uintmax_t _MSL_CDECL wcstoumax (const wchar_t * _MSL_RESTRICT nptr, wchar_t * * _MSL_RESTRICT endptr, int base) _MSL_CANT_THROW {
    return (wcstoul(nptr, endptr, base));
}
    #endif
#endif

_MSL_END_EXTERN_C
    _MSL_END_NAMESPACE_STD

#endif

#endif
#endif
#endif