Blame gnulib/lib/limits.in.h

Packit 06dd63
/* A GNU-like <limits.h>.
Packit 06dd63
Packit 06dd63
   Copyright 2016-2019 Free Software Foundation, Inc.
Packit 06dd63
Packit 06dd63
   This program is free software; you can redistribute it and/or
Packit 06dd63
   modify it under the terms of the GNU Lesser General Public License
Packit 06dd63
   as published by the Free Software Foundation; either version 2.1, or
Packit 06dd63
   (at your option) any later version.
Packit 06dd63
Packit 06dd63
   This program is distributed in the hope that it will be useful,
Packit 06dd63
   but WITHOUT ANY WARRANTY; without even the implied warranty of
Packit 06dd63
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
Packit 06dd63
   GNU Lesser General Public License for more details.
Packit 06dd63
Packit 06dd63
   You should have received a copy of the GNU Lesser General Public License
Packit 06dd63
   along with this program; if not, see <https://www.gnu.org/licenses/>.  */
Packit 06dd63
Packit 06dd63
#ifndef _@GUARD_PREFIX@_LIMITS_H
Packit 06dd63
Packit 06dd63
#if __GNUC__ >= 3
Packit 06dd63
@PRAGMA_SYSTEM_HEADER@
Packit 06dd63
#endif
Packit 06dd63
@PRAGMA_COLUMNS@
Packit 06dd63
Packit 06dd63
/* The include_next requires a split double-inclusion guard.  */
Packit 06dd63
#@INCLUDE_NEXT@ @NEXT_LIMITS_H@
Packit 06dd63
Packit 06dd63
#ifndef _@GUARD_PREFIX@_LIMITS_H
Packit 06dd63
#define _@GUARD_PREFIX@_LIMITS_H
Packit 06dd63
Packit 06dd63
#ifndef LLONG_MIN
Packit 06dd63
# if defined LONG_LONG_MIN /* HP-UX 11.31 */
Packit 06dd63
#  define LLONG_MIN LONG_LONG_MIN
Packit 06dd63
# elif defined LONGLONG_MIN /* IRIX 6.5 */
Packit 06dd63
#  define LLONG_MIN LONGLONG_MIN
Packit 06dd63
# elif defined __GNUC__
Packit 06dd63
#  define LLONG_MIN (- __LONG_LONG_MAX__ - 1LL)
Packit 06dd63
# endif
Packit 06dd63
#endif
Packit 06dd63
#ifndef LLONG_MAX
Packit 06dd63
# if defined LONG_LONG_MAX /* HP-UX 11.31 */
Packit 06dd63
#  define LLONG_MAX LONG_LONG_MAX
Packit 06dd63
# elif defined LONGLONG_MAX /* IRIX 6.5 */
Packit 06dd63
#  define LLONG_MAX LONGLONG_MAX
Packit 06dd63
# elif defined __GNUC__
Packit 06dd63
#  define LLONG_MAX __LONG_LONG_MAX__
Packit 06dd63
# endif
Packit 06dd63
#endif
Packit 06dd63
#ifndef ULLONG_MAX
Packit 06dd63
# if defined ULONG_LONG_MAX /* HP-UX 11.31 */
Packit 06dd63
#  define ULLONG_MAX ULONG_LONG_MAX
Packit 06dd63
# elif defined ULONGLONG_MAX /* IRIX 6.5 */
Packit 06dd63
#  define ULLONG_MAX ULONGLONG_MAX
Packit 06dd63
# elif defined __GNUC__
Packit 06dd63
#  define ULLONG_MAX (__LONG_LONG_MAX__ * 2ULL + 1ULL)
Packit 06dd63
# endif
Packit 06dd63
#endif
Packit 06dd63
Packit 06dd63
/* The number of usable bits in an unsigned or signed integer type
Packit 06dd63
   with minimum value MIN and maximum value MAX, as an int expression
Packit 06dd63
   suitable in #if.  Cover all known practical hosts.  This
Packit 06dd63
   implementation exploits the fact that MAX is 1 less than a power of
Packit 06dd63
   2, and merely counts the number of 1 bits in MAX; "COBn" means
Packit 06dd63
   "count the number of 1 bits in the low-order n bits").  */
Packit 06dd63
#define _GL_INTEGER_WIDTH(min, max) (((min) < 0) + _GL_COB128 (max))
Packit 06dd63
#define _GL_COB128(n) (_GL_COB64 ((n) >> 31 >> 31 >> 2) + _GL_COB64 (n))
Packit 06dd63
#define _GL_COB64(n) (_GL_COB32 ((n) >> 31 >> 1) + _GL_COB32 (n))
Packit 06dd63
#define _GL_COB32(n) (_GL_COB16 ((n) >> 16) + _GL_COB16 (n))
Packit 06dd63
#define _GL_COB16(n) (_GL_COB8 ((n) >> 8) + _GL_COB8 (n))
Packit 06dd63
#define _GL_COB8(n) (_GL_COB4 ((n) >> 4) + _GL_COB4 (n))
Packit 06dd63
#define _GL_COB4(n) (!!((n) & 8) + !!((n) & 4) + !!((n) & 2) + !!((n) & 1))
Packit 06dd63
Packit 06dd63
#ifndef WORD_BIT
Packit 06dd63
/* Assume 'int' is 32 bits wide.  */
Packit 06dd63
# define WORD_BIT 32
Packit 06dd63
#endif
Packit 06dd63
#ifndef LONG_BIT
Packit 06dd63
/* Assume 'long' is 32 or 64 bits wide.  */
Packit 06dd63
# if LONG_MAX == INT_MAX
Packit 06dd63
#  define LONG_BIT 32
Packit 06dd63
# else
Packit 06dd63
#  define LONG_BIT 64
Packit 06dd63
# endif
Packit 06dd63
#endif
Packit 06dd63
Packit 06dd63
/* Macros specified by ISO/IEC TS 18661-1:2014.  */
Packit 06dd63
Packit 06dd63
#if (! defined ULLONG_WIDTH                                             \
Packit 06dd63
     && (defined _GNU_SOURCE || defined __STDC_WANT_IEC_60559_BFP_EXT__))
Packit 06dd63
# define CHAR_WIDTH _GL_INTEGER_WIDTH (CHAR_MIN, CHAR_MAX)
Packit 06dd63
# define SCHAR_WIDTH _GL_INTEGER_WIDTH (SCHAR_MIN, SCHAR_MAX)
Packit 06dd63
# define UCHAR_WIDTH _GL_INTEGER_WIDTH (0, UCHAR_MAX)
Packit 06dd63
# define SHRT_WIDTH _GL_INTEGER_WIDTH (SHRT_MIN, SHRT_MAX)
Packit 06dd63
# define USHRT_WIDTH _GL_INTEGER_WIDTH (0, USHRT_MAX)
Packit 06dd63
# define INT_WIDTH _GL_INTEGER_WIDTH (INT_MIN, INT_MAX)
Packit 06dd63
# define UINT_WIDTH _GL_INTEGER_WIDTH (0, UINT_MAX)
Packit 06dd63
# define LONG_WIDTH _GL_INTEGER_WIDTH (LONG_MIN, LONG_MAX)
Packit 06dd63
# define ULONG_WIDTH _GL_INTEGER_WIDTH (0, ULONG_MAX)
Packit 06dd63
# define LLONG_WIDTH _GL_INTEGER_WIDTH (LLONG_MIN, LLONG_MAX)
Packit 06dd63
# define ULLONG_WIDTH _GL_INTEGER_WIDTH (0, ULLONG_MAX)
Packit 06dd63
#endif /* !ULLONG_WIDTH && (_GNU_SOURCE || __STDC_WANT_IEC_60559_BFP_EXT__) */
Packit 06dd63
Packit 06dd63
#endif /* _@GUARD_PREFIX@_LIMITS_H */
Packit 06dd63
#endif /* _@GUARD_PREFIX@_LIMITS_H */