tetl 0.1.0
Embedded Template Library
Loading...
Searching...
No Matches
defines.hpp
Go to the documentation of this file.
1// SPDX-License-Identifier: BSL-1.0
2
3#ifndef TETL_CLIMITS_DEFINES_HPP
4#define TETL_CLIMITS_DEFINES_HPP
5
6#if __has_include(<limits.h>)
7 #include <limits.h>
8#else
9
10 #ifndef MB_LEN_MAX
11 #define MB_LEN_MAX 1
12 #endif
13
14 #define CHAR_BIT __CHAR_BIT__
15
16 #ifdef __CHAR_UNSIGNED__
17 #define CHAR_MIN 0
18 #define CHAR_MAX UCHAR_MAX
19 #else
20 #define CHAR_MIN SCHAR_MIN
21 #define CHAR_MAX __SCHAR_MAX__
22 #endif
23
24 #define SCHAR_MAX __SCHAR_MAX__
25 #define SHRT_MAX __SHRT_MAX__
26 #define INT_MAX __INT_MAX__
27 #define LONG_MAX __LONG_MAX__
28
29 #define SCHAR_MIN (-__SCHAR_MAX__ - 1)
30 #define SHRT_MIN (-__SHRT_MAX__ - 1)
31 #define INT_MIN (-__INT_MAX__ - 1)
32 #define LONG_MIN (-__LONG_MAX__ - 1L)
33
34 #define UCHAR_MAX (static_cast<unsigned char>(__SCHAR_MAX__) * 2 + 1)
35 #define USHRT_MAX (static_cast<unsigned short>(__SHRT_MAX__) * 2 + 1)
36 #define UINT_MAX (__INT_MAX__ * 2U + 1U)
37 #define ULONG_MAX (__LONG_MAX__ * 2UL + 1UL)
38
39 #if __STDC_VERSION__ >= 199901L || __cplusplus >= 201103L
40 #undef LLONG_MIN
41 #undef LLONG_MAX
42 #undef ULLONG_MAX
43 #define LLONG_MAX __LONG_LONG_MAX__
44 #define LLONG_MIN (-__LONG_LONG_MAX__ - 1LL)
45 #define ULLONG_MAX (__LONG_LONG_MAX__ * 2ULL + 1ULL)
46 #endif
47
48#endif // has_include <limits.h>
49
50#endif // TETL_CLIMITS_DEFINES_HPP