Go to the documentation of this file.
33 #define csnip_limit_Int(x) \
35 csnip__tmm(signed char, SCHAR_MIN, SCHAR_MAX), \
36 csnip__tmm(unsigned char, 0, UCHAR_MAX), \
37 csnip__tmm(char, CHAR_MIN, CHAR_MAX), \
38 csnip__tmm(short int, SHRT_MIN, SHRT_MAX), \
39 csnip__tmm(unsigned short int, 0, USHRT_MAX), \
40 csnip__tmm(int, INT_MIN, INT_MAX), \
41 csnip__tmm(unsigned int, 0, UINT_MAX), \
42 csnip__tmm(long, LONG_MIN, LONG_MAX), \
43 csnip__tmm(unsigned long, 0, ULONG_MAX), \
44 csnip__tmm(long long int, LLONG_MIN, LLONG_MAX), \
45 csnip__tmm(unsigned long long int, 0, ULLONG_MAX), \
46 default: csnip_limit_Int__1(x))
61 #define csnip_limit_Mini(x) (csnip_limit_Int(x)[0])
68 #define csnip_limit_Maxi(x) (csnip_limit_Int(x)[1])
71 #define csnip__tmm(type, minv, maxv) type: (const type[]){ minv, maxv }
74 #define csnip_limit_Int__1(x) \
75 _Generic((x), csnip__tmm(intptr_t, INTPTR_MIN, INTPTR_MAX), default: \
76 _Generic((x), csnip__tmm(uintptr_t, 0, UINTPTR_MAX), default: \
77 _Generic((x), csnip__tmm(intmax_t, INTMAX_MIN, INTMAX_MAX), default: \
78 _Generic((x), csnip__tmm(uintmax_t, 0, UINTMAX_MAX), default: \
79 _Generic((x), csnip__tmm(ptrdiff_t, PTRDIFF_MIN, PTRDIFF_MAX), default:\
80 _Generic((x), csnip__tmm(size_t, 0, SIZE_MAX), default: \
81 csnip_limit_Int__2(x) \
85 # define csnip_limit_Int__2(x) \
87 csnip__tmm(int8_t, INT8_MIN, INT8_MAX), \
88 csnip__tmm(uint8_t, 0, UINT8_MAX), \
89 default: csnip_limit_Int__3(x))
91 # define csnip_limit_Int__2(x) csnip_limit_Int__3(x)
95 # define csnip_limit_Int__3(x) \
97 csnip__tmm(int16_t, INT16_MIN, INT16_MAX), \
98 csnip__tmm(uint16_t, 0, UINT16_MAX), \
99 default: csnip_limit_Int__4(x))
101 # define csnip_limit_Int__3(x) csnip_limit_Int__4(x)
105 # define csnip_limit_Int__4(x) \
107 csnip__tmm(int32_t, INT32_MIN, INT32_MAX), \
108 csnip__tmm(uint32_t, 0, UINT32_MAX), \
109 default: csnip_limit_Int__5(x))
111 # define csnip_limit_Int__4(x) csnip_limit_Int__5(x)
115 # define csnip_limit_Int__5(x) \
117 csnip__tmm(int64_t, INT64_MIN, INT64_MAX), \
118 csnip__tmm(uint64_t, 0, UINT64_MAX), \
119 default: csnip_limit_Int__6(x))
121 # define csnip_limit_Int__5(x) csnip_limit_Int__6(x)
124 #ifdef INT_LEAST8_MAX
125 # define csnip_limit_Int__6(x) \
127 csnip__tmm(int_least8_t, INT_LEAST8_MIN, INT_LEAST8_MAX), \
128 csnip__tmm(uint_least8_t, 0, UINT_LEAST8_MAX), \
129 default: csnip_limit_Int__7(x))
131 # define csnip_limit_Int__6(x) csnip_limit_Int__7(x)
134 #ifdef INT_LEAST16_MAX
135 # define csnip_limit_Int__7(x) \
137 csnip__tmm(int_least16_t, INT_LEAST16_MIN, INT_LEAST16_MAX), \
138 csnip__tmm(uint_least16_t, 0, UINT_LEAST16_MAX), \
139 default: csnip_limit_Int__8(x))
141 # define csnip_limit_Int__7(x) csnip_limit_Int__8(x)
144 #ifdef INT_LEAST32_MAX
145 # define csnip_limit_Int__8(x) \
147 csnip__tmm(int_least32_t, INT_LEAST32_MIN, INT_LEAST32_MAX), \
148 csnip__tmm(uint_least32_t, 0, UINT_LEAST32_MAX), \
149 default: csnip_limit_Int__9(x))
151 # define csnip_limit_Int__8(x) csnip_limit_Int__9(x)
154 #ifdef INT_LEAST64_MAX
155 # define csnip_limit_Int__9(x) \
157 csnip__tmm(int_least64_t, INT_LEAST64_MIN, INT_LEAST64_MAX), \
158 csnip__tmm(uint_least64_t, 0, UINT_LEAST64_MAX), \
159 default: csnip_limit_Int__10(x))
161 # define csnip_limit_Int__9(x) csnip_limit_Int__10(x)
165 # define csnip_limit_Int__10(x) \
167 csnip__tmm(int_fast8_t, INT_FAST8_MIN, INT_FAST8_MAX), \
168 csnip__tmm(uint_fast8_t, 0, UINT_FAST8_MAX), \
169 default: csnip_limit_Int__11(x))
171 # define csnip_limit_Int__10(x) csnip_limit_Int__11(x)
174 #ifdef INT_FAST16_MAX
175 # define csnip_limit_Int__11(x) \
177 csnip__tmm(int_fast16_t, INT_FAST16_MIN, INT_FAST16_MAX), \
178 csnip__tmm(uint_fast16_t, 0, UINT_FAST16_MAX), \
179 default: csnip_limit_Int__12(x))
181 # define csnip_limit_Int__11(x) csnip_limit_Int__12(x)
184 #ifdef INT_FAST32_MAX
185 # define csnip_limit_Int__12(x) \
187 csnip__tmm(int_fast32_t, INT_FAST32_MIN, INT_FAST32_MAX), \
188 csnip__tmm(uint_fast32_t, 0, UINT_FAST32_MAX), \
189 default: csnip_limit_Int__13(x))
191 # define csnip_limit_Int__12(x) csnip_limit_Int__13(x)
194 #ifdef INT_FAST64_MAX
195 # define csnip_limit_Int__13(x) \
197 csnip__tmm(int_fast64_t, INT_FAST64_MIN, INT_FAST64_MAX), \
198 csnip__tmm(uint_fast64_t, 0, UINT_FAST64_MAX), \
199 default: csnip_limit_Int__14(x))
201 # define csnip_limit_Int__13(x) csnip_limit_Int__14(x)
205 # define csnip_limit_Int__14(x) \
206 _Generic((x), csnip__tmm(wchar_t, WCHAR_MIN, WCHAR_MAX), \
207 default: csnip_limit_Int__15(x))
209 # define csnip_limit_Int__14(x) csnip_limit_Int__15(x)
213 #define csnip_limit_Int__15(x) \
214 _Generic((x), csnip__tmm(wint_t, WINT_MIN, WINT_MAX), \
215 default: csnip_limit_Int__16(x))
217 # define csnip_limit_Int__15(x) csnip_limit_Int__16(x)
221 # define csnip_limit_Int__16(x) \
222 _Generic((x), csnip__tmm(sig_atomic_t, SIG_ATOMIC_MIN, SIG_ATOMIC_MAX),\
225 # define csnip_limit_Int__16(x) 0
233 #if defined(CSNIP_SHORT_NAMES) && !defined(CSNIP_LIMITS_HAVE_SHORT_NAMES)
234 #define limit_Int csnip_limit_Int
235 #define limit_Mini csnip_limit_Mini
236 #define limit_Maxi csnip_limit_Maxi
237 #define CSNIP_LIMITS_HAVE_SHORT_NAMES