llvm/libc/include/llvm-libc-macros/limits-macros.h

//===-- Definition of macros from limits.h --------------------------------===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
//
//===----------------------------------------------------------------------===//

#ifndef LLVM_LIBC_MACROS_LIMITS_MACROS_H
#define LLVM_LIBC_MACROS_LIMITS_MACROS_H

// Define all C23 macro constants of limits.h

#ifndef CHAR_BIT
#ifdef __CHAR_BIT__
#define CHAR_BIT
#else
#define CHAR_BIT
#endif // __CHAR_BIT__
#endif // CHAR_BIT

#ifndef MB_LEN_MAX
// Represents a single UTF-32 wide character in the default locale.
#define MB_LEN_MAX
#endif // MB_LEN_MAX

// *_WIDTH macros

#ifndef CHAR_WIDTH
#define CHAR_WIDTH
#endif // CHAR_WIDTH

#ifndef SCHAR_WIDTH
#define SCHAR_WIDTH
#endif // SCHAR_WIDTH

#ifndef UCHAR_WIDTH
#define UCHAR_WIDTH
#endif // UCHAR_WIDTH

#ifndef SHRT_WIDTH
#ifdef __SHRT_WIDTH__
#define SHRT_WIDTH
#else
#define SHRT_WIDTH
#endif // __SHRT_WIDTH__
#endif // SHRT_WIDTH

#ifndef USHRT_WIDTH
#define USHRT_WIDTH
#endif // USHRT_WIDTH

#ifndef INT_WIDTH
#ifdef __INT_WIDTH__
#define INT_WIDTH
#else
#define INT_WIDTH
#endif // __INT_WIDTH__
#endif // INT_WIDTH

#ifndef UINT_WIDTH
#define UINT_WIDTH
#endif // UINT_WIDTH

#ifndef LONG_WIDTH
#ifdef __LONG_WIDTH__
#define LONG_WIDTH
#elif defined(__WORDSIZE)
#define LONG_WIDTH
#else
// Use __SIZEOF_LONG__ * CHAR_BIT as backup.  This is needed for clang-13 or
// before.
#define LONG_WIDTH
#endif // __LONG_WIDTH__
#endif // LONG_WIDTH

#ifndef ULONG_WIDTH
#define ULONG_WIDTH
#endif // ULONG_WIDTH

#ifndef LLONG_WIDTH
#ifdef __LLONG_WIDTH__
#define LLONG_WIDTH
#else
#define LLONG_WIDTH
#endif // __LLONG_WIDTH__
#endif // LLONG_WIDTH

#ifndef ULLONG_WIDTH
#define ULLONG_WIDTH
#endif // ULLONG_WIDTH

#ifndef BOOL_WIDTH
#ifdef __BOOL_WIDTH__
#define BOOL_WIDTH
#else
#define BOOL_WIDTH
#endif // __BOOL_WIDTH__
#endif // BOOL_WIDTH

// *_MAX macros

#ifndef SCHAR_MAX
#ifdef __SCHAR_MAX__
#define SCHAR_MAX
#else
#define SCHAR_MAX
#endif // __SCHAR_MAX__
#endif // SCHAR_MAX

#ifndef UCHAR_MAX
#define UCHAR_MAX
#endif // UCHAR_MAX

// Check if char is unsigned.
#if !defined(__CHAR_UNSIGNED__) && ('\xff' > 0)
#define __CHAR_UNSIGNED__
#endif

#ifndef CHAR_MAX
#ifdef __CHAR_UNSIGNED__
#define CHAR_MAX
#else
#define CHAR_MAX
#endif // __CHAR_UNSIGNED__
#endif // CHAR_MAX

#ifndef SHRT_MAX
#ifdef __SHRT_MAX__
#define SHRT_MAX
#else
#define SHRT_MAX
#endif // __SHRT_MAX__
#endif // SHRT_MAX

#ifndef USHRT_MAX
#define USHRT_MAX
#endif // USHRT_MAX

#ifndef INT_MAX
#ifdef __INT_MAX__
#define INT_MAX
#else
#define INT_MAX
#endif // __INT_MAX__
#endif // INT_MAX

#ifndef UINT_MAX
#define UINT_MAX
#endif // UINT_MAX

#ifndef LONG_MAX
#ifdef __LONG_MAX__
#define LONG_MAX
#else
#define LONG_MAX
#endif // __LONG_MAX__
#endif // LONG_MAX

#ifndef ULONG_MAX
#define ULONG_MAX
#endif // ULONG_MAX

#ifndef LLONG_MAX
#ifdef __LONG_LONG_MAX__
#define LLONG_MAX
#else
#define LLONG_MAX
#endif // __LONG_LONG_MAX__
#endif // LLONG_MAX

#ifndef ULLONG_MAX
#define ULLONG_MAX
#endif // ULLONG_MAX

// *_MIN macros

#ifndef SCHAR_MIN
#define SCHAR_MIN
#endif // SCHAR_MIN

#ifndef UCHAR_MIN
#define UCHAR_MIN
#endif // UCHAR_MIN

#ifndef CHAR_MIN
#ifdef __CHAR_UNSIGNED__
#define CHAR_MIN
#else
#define CHAR_MIN
#endif // __CHAR_UNSIGNED__
#endif // CHAR_MIN

#ifndef SHRT_MIN
#define SHRT_MIN
#endif // SHRT_MIN

#ifndef USHRT_MIN
#define USHRT_MIN
#endif // USHRT_MIN

#ifndef INT_MIN
#define INT_MIN
#endif // INT_MIN

#ifndef UINT_MIN
#define UINT_MIN
#endif // UINT_MIN

#ifndef LONG_MIN
#define LONG_MIN
#endif // LONG_MIN

#ifndef ULONG_MIN
#define ULONG_MIN
#endif // ULONG_MIN

#ifndef LLONG_MIN
#define LLONG_MIN
#endif // LLONG_MIN

#ifndef ULLONG_MIN
#define ULLONG_MIN
#endif // ULLONG_MIN

#ifndef _POSIX_MAX_CANON
#define _POSIX_MAX_CANON
#endif

#ifndef _POSIX_MAX_INPUT
#define _POSIX_MAX_INPUT
#endif

#ifndef _POSIX_NAME_MAX
#define _POSIX_PATH_MAX
#endif

#endif // LLVM_LIBC_MACROS_LIMITS_MACROS_H