1    	/* Copyright (C) 1997,1998,1999,2000,2001,2006 Free Software Foundation, Inc.
2    	   This file is part of the GNU C Library.
3    	
4    	   The GNU C Library is free software; you can redistribute it and/or
5    	   modify it under the terms of the GNU Lesser General Public
6    	   License as published by the Free Software Foundation; either
7    	   version 2.1 of the License, or (at your option) any later version.
8    	
9    	   The GNU C Library is distributed in the hope that it will be useful,
10   	   but WITHOUT ANY WARRANTY; without even the implied warranty of
11   	   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
12   	   Lesser General Public License for more details.
13   	
14   	   You should have received a copy of the GNU Lesser General Public
15   	   License along with the GNU C Library; if not, write to the Free
16   	   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
17   	   02111-1307 USA.  */
18   	
19   	/*
20   	 *	ISO C99: 7.18 Integer types <stdint.h>
21   	 */
22   	
23   	#ifndef _STDINT_H
24   	#define _STDINT_H	1
25   	
26   	#include <features.h>
27   	#include <bits/wchar.h>
28   	#include <bits/wordsize.h>
29   	
30   	/* Exact integral types.  */
31   	
32   	/* Signed.  */
33   	
34   	/* There is some amount of overlap with <sys/types.h> as known by inet code */
35   	#ifndef __int8_t_defined
36   	# define __int8_t_defined
37   	typedef signed char		int8_t;
38   	typedef short int		int16_t;
39   	typedef int			int32_t;
40   	# if __WORDSIZE == 64
41   	typedef long int		int64_t;
42   	# else
43   	__extension__
44   	typedef long long int		int64_t;
45   	# endif
46   	#endif
47   	
48   	/* Unsigned.  */
49   	typedef unsigned char		uint8_t;
50   	typedef unsigned short int	uint16_t;
51   	#ifndef __uint32_t_defined
52   	typedef unsigned int		uint32_t;
53   	# define __uint32_t_defined
54   	#endif
55   	#if __WORDSIZE == 64
56   	typedef unsigned long int	uint64_t;
57   	#else
58   	__extension__
59   	typedef unsigned long long int	uint64_t;
60   	#endif
61   	
62   	
63   	/* Small types.  */
64   	
65   	/* Signed.  */
66   	typedef signed char		int_least8_t;
67   	typedef short int		int_least16_t;
68   	typedef int			int_least32_t;
69   	#if __WORDSIZE == 64
70   	typedef long int		int_least64_t;
71   	#else
72   	__extension__
73   	typedef long long int		int_least64_t;
74   	#endif
75   	
76   	/* Unsigned.  */
77   	typedef unsigned char		uint_least8_t;
78   	typedef unsigned short int	uint_least16_t;
79   	typedef unsigned int		uint_least32_t;
80   	#if __WORDSIZE == 64
81   	typedef unsigned long int	uint_least64_t;
82   	#else
83   	__extension__
84   	typedef unsigned long long int	uint_least64_t;
85   	#endif
86   	
87   	
88   	/* Fast types.  */
89   	
90   	/* Signed.  */
91   	typedef signed char		int_fast8_t;
92   	#if __WORDSIZE == 64
93   	typedef long int		int_fast16_t;
94   	typedef long int		int_fast32_t;
95   	typedef long int		int_fast64_t;
96   	#else
97   	typedef int			int_fast16_t;
98   	typedef int			int_fast32_t;
99   	__extension__
100  	typedef long long int		int_fast64_t;
101  	#endif
102  	
103  	/* Unsigned.  */
104  	typedef unsigned char		uint_fast8_t;
105  	#if __WORDSIZE == 64
106  	typedef unsigned long int	uint_fast16_t;
107  	typedef unsigned long int	uint_fast32_t;
108  	typedef unsigned long int	uint_fast64_t;
109  	#else
110  	typedef unsigned int		uint_fast16_t;
111  	typedef unsigned int		uint_fast32_t;
112  	__extension__
113  	typedef unsigned long long int	uint_fast64_t;
114  	#endif
115  	
116  	
117  	/* Types for `void *' pointers.  */
118  	#if __WORDSIZE == 64
119  	# ifndef __intptr_t_defined
120  	typedef long int		intptr_t;
121  	#  define __intptr_t_defined
122  	# endif
123  	typedef unsigned long int	uintptr_t;
124  	#else
125  	# ifndef __intptr_t_defined
126  	typedef int			intptr_t;
127  	#  define __intptr_t_defined
128  	# endif
129  	typedef unsigned int		uintptr_t;
130  	#endif
131  	
132  	
133  	/* Largest integral types.  */
134  	#if __WORDSIZE == 64
135  	typedef long int		intmax_t;
136  	typedef unsigned long int	uintmax_t;
137  	#else
138  	__extension__
139  	typedef long long int		intmax_t;
140  	__extension__
141  	typedef unsigned long long int	uintmax_t;
142  	#endif
143  	
144  	
145  	/* The ISO C99 standard specifies that in C++ implementations these
146  	   macros should only be defined if explicitly requested.  */
147  	#if !defined __cplusplus || defined __STDC_LIMIT_MACROS
148  	
149  	# if __WORDSIZE == 64
150  	#  define __INT64_C(c)	c ## L
151  	#  define __UINT64_C(c)	c ## UL
152  	# else
153  	#  define __INT64_C(c)	c ## LL
154  	#  define __UINT64_C(c)	c ## ULL
155  	# endif
156  	
157  	/* Limits of integral types.  */
158  	
159  	/* Minimum of signed integral types.  */
160  	# define INT8_MIN		(-128)
161  	# define INT16_MIN		(-32767-1)
162  	# define INT32_MIN		(-2147483647-1)
163  	# define INT64_MIN		(-__INT64_C(9223372036854775807)-1)
164  	/* Maximum of signed integral types.  */
165  	# define INT8_MAX		(127)
166  	# define INT16_MAX		(32767)
167  	# define INT32_MAX		(2147483647)
168  	# define INT64_MAX		(__INT64_C(9223372036854775807))
169  	
170  	/* Maximum of unsigned integral types.  */
171  	# define UINT8_MAX		(255)
172  	# define UINT16_MAX		(65535)
173  	# define UINT32_MAX		(4294967295U)
174  	# define UINT64_MAX		(__UINT64_C(18446744073709551615))
175  	
176  	
177  	/* Minimum of signed integral types having a minimum size.  */
178  	# define INT_LEAST8_MIN		(-128)
179  	# define INT_LEAST16_MIN	(-32767-1)
180  	# define INT_LEAST32_MIN	(-2147483647-1)
181  	# define INT_LEAST64_MIN	(-__INT64_C(9223372036854775807)-1)
182  	/* Maximum of signed integral types having a minimum size.  */
183  	# define INT_LEAST8_MAX		(127)
184  	# define INT_LEAST16_MAX	(32767)
185  	# define INT_LEAST32_MAX	(2147483647)
186  	# define INT_LEAST64_MAX	(__INT64_C(9223372036854775807))
187  	
188  	/* Maximum of unsigned integral types having a minimum size.  */
189  	# define UINT_LEAST8_MAX	(255)
190  	# define UINT_LEAST16_MAX	(65535)
191  	# define UINT_LEAST32_MAX	(4294967295U)
192  	# define UINT_LEAST64_MAX	(__UINT64_C(18446744073709551615))
193  	
194  	
195  	/* Minimum of fast signed integral types having a minimum size.  */
196  	# define INT_FAST8_MIN		(-128)
197  	# if __WORDSIZE == 64
198  	#  define INT_FAST16_MIN	(-9223372036854775807L-1)
199  	#  define INT_FAST32_MIN	(-9223372036854775807L-1)
200  	# else
201  	#  define INT_FAST16_MIN	(-2147483647-1)
202  	#  define INT_FAST32_MIN	(-2147483647-1)
203  	# endif
204  	# define INT_FAST64_MIN		(-__INT64_C(9223372036854775807)-1)
205  	/* Maximum of fast signed integral types having a minimum size.  */
206  	# define INT_FAST8_MAX		(127)
207  	# if __WORDSIZE == 64
208  	#  define INT_FAST16_MAX	(9223372036854775807L)
209  	#  define INT_FAST32_MAX	(9223372036854775807L)
210  	# else
211  	#  define INT_FAST16_MAX	(2147483647)
212  	#  define INT_FAST32_MAX	(2147483647)
213  	# endif
214  	# define INT_FAST64_MAX		(__INT64_C(9223372036854775807))
215  	
216  	/* Maximum of fast unsigned integral types having a minimum size.  */
217  	# define UINT_FAST8_MAX		(255)
218  	# if __WORDSIZE == 64
219  	#  define UINT_FAST16_MAX	(18446744073709551615UL)
220  	#  define UINT_FAST32_MAX	(18446744073709551615UL)
221  	# else
222  	#  define UINT_FAST16_MAX	(4294967295U)
223  	#  define UINT_FAST32_MAX	(4294967295U)
224  	# endif
225  	# define UINT_FAST64_MAX	(__UINT64_C(18446744073709551615))
226  	
227  	
228  	/* Values to test for integral types holding `void *' pointer.  */
229  	# if __WORDSIZE == 64
230  	#  define INTPTR_MIN		(-9223372036854775807L-1)
231  	#  define INTPTR_MAX		(9223372036854775807L)
232  	#  define UINTPTR_MAX		(18446744073709551615UL)
233  	# else
234  	#  define INTPTR_MIN		(-2147483647-1)
235  	#  define INTPTR_MAX		(2147483647)
236  	#  define UINTPTR_MAX		(4294967295U)
237  	# endif
238  	
239  	
240  	/* Minimum for largest signed integral type.  */
241  	# define INTMAX_MIN		(-__INT64_C(9223372036854775807)-1)
242  	/* Maximum for largest signed integral type.  */
243  	# define INTMAX_MAX		(__INT64_C(9223372036854775807))
244  	
245  	/* Maximum for largest unsigned integral type.  */
246  	# define UINTMAX_MAX		(__UINT64_C(18446744073709551615))
247  	
248  	
249  	/* Limits of other integer types.  */
250  	
251  	/* Limits of `ptrdiff_t' type.  */
252  	# if __WORDSIZE == 64
253  	#  define PTRDIFF_MIN		(-9223372036854775807L-1)
254  	#  define PTRDIFF_MAX		(9223372036854775807L)
255  	# else
256  	#  define PTRDIFF_MIN		(-2147483647-1)
257  	#  define PTRDIFF_MAX		(2147483647)
258  	# endif
259  	
260  	/* Limits of `sig_atomic_t'.  */
261  	# define SIG_ATOMIC_MIN		(-2147483647-1)
262  	# define SIG_ATOMIC_MAX		(2147483647)
263  	
264  	/* Limit of `size_t' type.  */
265  	# if __WORDSIZE == 64
266  	#  define SIZE_MAX		(18446744073709551615UL)
267  	# else
268  	#  define SIZE_MAX		(4294967295U)
269  	# endif
270  	
271  	/* Limits of `wchar_t'.  */
272  	# ifndef WCHAR_MIN
273  	/* These constants might also be defined in <wchar.h>.  */
274  	#  define WCHAR_MIN		__WCHAR_MIN
275  	#  define WCHAR_MAX		__WCHAR_MAX
276  	# endif
277  	
278  	/* Limits of `wint_t'.  */
279  	# define WINT_MIN		(0u)
280  	# define WINT_MAX		(4294967295u)
281  	
282  	#endif	/* C++ && limit macros */
283  	
284  	
285  	/* The ISO C99 standard specifies that in C++ implementations these
286  	   should only be defined if explicitly requested.  */
287  	#if !defined __cplusplus || defined __STDC_CONSTANT_MACROS
288  	
289  	/* Signed.  */
290  	# define INT8_C(c)	c
291  	# define INT16_C(c)	c
292  	# define INT32_C(c)	c
293  	# if __WORDSIZE == 64
294  	#  define INT64_C(c)	c ## L
295  	# else
296  	#  define INT64_C(c)	c ## LL
297  	# endif
298  	
299  	/* Unsigned.  */
300  	# define UINT8_C(c)	c
301  	# define UINT16_C(c)	c
302  	# define UINT32_C(c)	c ## U
303  	# if __WORDSIZE == 64
304  	#  define UINT64_C(c)	c ## UL
305  	# else
306  	#  define UINT64_C(c)	c ## ULL
307  	# endif
308  	
309  	/* Maximal type.  */
310  	# if __WORDSIZE == 64
311  	#  define INTMAX_C(c)	c ## L
312  	#  define UINTMAX_C(c)	c ## UL
313  	# else
314  	#  define INTMAX_C(c)	c ## LL
315  	#  define UINTMAX_C(c)	c ## ULL
316  	# endif
317  	
318  	#endif	/* C++ && constant macros */
319  	
320  	#endif /* stdint.h */
321