summaryrefslogtreecommitdiff
path: root/utils/rbutilqt/msvc/inttypes.h
diff options
context:
space:
mode:
Diffstat (limited to 'utils/rbutilqt/msvc/inttypes.h')
-rw-r--r--utils/rbutilqt/msvc/inttypes.h305
1 files changed, 305 insertions, 0 deletions
diff --git a/utils/rbutilqt/msvc/inttypes.h b/utils/rbutilqt/msvc/inttypes.h
new file mode 100644
index 0000000000..4b3828a216
--- /dev/null
+++ b/utils/rbutilqt/msvc/inttypes.h
@@ -0,0 +1,305 @@
1// ISO C9x compliant inttypes.h for Microsoft Visual Studio
2// Based on ISO/IEC 9899:TC2 Committee draft (May 6, 2005) WG14/N1124
3//
4// Copyright (c) 2006 Alexander Chemeris
5//
6// Redistribution and use in source and binary forms, with or without
7// modification, are permitted provided that the following conditions are met:
8//
9// 1. Redistributions of source code must retain the above copyright notice,
10// this list of conditions and the following disclaimer.
11//
12// 2. Redistributions in binary form must reproduce the above copyright
13// notice, this list of conditions and the following disclaimer in the
14// documentation and/or other materials provided with the distribution.
15//
16// 3. The name of the author may be used to endorse or promote products
17// derived from this software without specific prior written permission.
18//
19// THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
20// WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
21// MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
22// EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
23// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
24// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
25// OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
26// WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
27// OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
28// ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29//
30///////////////////////////////////////////////////////////////////////////////
31
32#ifndef _MSC_VER // [
33#error "Use this header only with Microsoft Visual C++ compilers!"
34#endif // _MSC_VER ]
35
36#ifndef _MSC_INTTYPES_H_ // [
37#define _MSC_INTTYPES_H_
38
39#if _MSC_VER > 1000
40#pragma once
41#endif
42
43#include "stdint.h"
44
45// 7.8 Format conversion of integer types
46
47typedef struct {
48 intmax_t quot;
49 intmax_t rem;
50} imaxdiv_t;
51
52// 7.8.1 Macros for format specifiers
53
54#if !defined(__cplusplus) || defined(__STDC_FORMAT_MACROS) // [ See footnote 185 at page 198
55
56// The fprintf macros for signed integers are:
57#define PRId8 "d"
58#define PRIi8 "i"
59#define PRIdLEAST8 "d"
60#define PRIiLEAST8 "i"
61#define PRIdFAST8 "d"
62#define PRIiFAST8 "i"
63
64#define PRId16 "hd"
65#define PRIi16 "hi"
66#define PRIdLEAST16 "hd"
67#define PRIiLEAST16 "hi"
68#define PRIdFAST16 "hd"
69#define PRIiFAST16 "hi"
70
71#define PRId32 "I32d"
72#define PRIi32 "I32i"
73#define PRIdLEAST32 "I32d"
74#define PRIiLEAST32 "I32i"
75#define PRIdFAST32 "I32d"
76#define PRIiFAST32 "I32i"
77
78#define PRId64 "I64d"
79#define PRIi64 "I64i"
80#define PRIdLEAST64 "I64d"
81#define PRIiLEAST64 "I64i"
82#define PRIdFAST64 "I64d"
83#define PRIiFAST64 "I64i"
84
85#define PRIdMAX "I64d"
86#define PRIiMAX "I64i"
87
88#define PRIdPTR "Id"
89#define PRIiPTR "Ii"
90
91// The fprintf macros for unsigned integers are:
92#define PRIo8 "o"
93#define PRIu8 "u"
94#define PRIx8 "x"
95#define PRIX8 "X"
96#define PRIoLEAST8 "o"
97#define PRIuLEAST8 "u"
98#define PRIxLEAST8 "x"
99#define PRIXLEAST8 "X"
100#define PRIoFAST8 "o"
101#define PRIuFAST8 "u"
102#define PRIxFAST8 "x"
103#define PRIXFAST8 "X"
104
105#define PRIo16 "ho"
106#define PRIu16 "hu"
107#define PRIx16 "hx"
108#define PRIX16 "hX"
109#define PRIoLEAST16 "ho"
110#define PRIuLEAST16 "hu"
111#define PRIxLEAST16 "hx"
112#define PRIXLEAST16 "hX"
113#define PRIoFAST16 "ho"
114#define PRIuFAST16 "hu"
115#define PRIxFAST16 "hx"
116#define PRIXFAST16 "hX"
117
118#define PRIo32 "I32o"
119#define PRIu32 "I32u"
120#define PRIx32 "I32x"
121#define PRIX32 "I32X"
122#define PRIoLEAST32 "I32o"
123#define PRIuLEAST32 "I32u"
124#define PRIxLEAST32 "I32x"
125#define PRIXLEAST32 "I32X"
126#define PRIoFAST32 "I32o"
127#define PRIuFAST32 "I32u"
128#define PRIxFAST32 "I32x"
129#define PRIXFAST32 "I32X"
130
131#define PRIo64 "I64o"
132#define PRIu64 "I64u"
133#define PRIx64 "I64x"
134#define PRIX64 "I64X"
135#define PRIoLEAST64 "I64o"
136#define PRIuLEAST64 "I64u"
137#define PRIxLEAST64 "I64x"
138#define PRIXLEAST64 "I64X"
139#define PRIoFAST64 "I64o"
140#define PRIuFAST64 "I64u"
141#define PRIxFAST64 "I64x"
142#define PRIXFAST64 "I64X"
143
144#define PRIoMAX "I64o"
145#define PRIuMAX "I64u"
146#define PRIxMAX "I64x"
147#define PRIXMAX "I64X"
148
149#define PRIoPTR "Io"
150#define PRIuPTR "Iu"
151#define PRIxPTR "Ix"
152#define PRIXPTR "IX"
153
154// The fscanf macros for signed integers are:
155#define SCNd8 "d"
156#define SCNi8 "i"
157#define SCNdLEAST8 "d"
158#define SCNiLEAST8 "i"
159#define SCNdFAST8 "d"
160#define SCNiFAST8 "i"
161
162#define SCNd16 "hd"
163#define SCNi16 "hi"
164#define SCNdLEAST16 "hd"
165#define SCNiLEAST16 "hi"
166#define SCNdFAST16 "hd"
167#define SCNiFAST16 "hi"
168
169#define SCNd32 "ld"
170#define SCNi32 "li"
171#define SCNdLEAST32 "ld"
172#define SCNiLEAST32 "li"
173#define SCNdFAST32 "ld"
174#define SCNiFAST32 "li"
175
176#define SCNd64 "I64d"
177#define SCNi64 "I64i"
178#define SCNdLEAST64 "I64d"
179#define SCNiLEAST64 "I64i"
180#define SCNdFAST64 "I64d"
181#define SCNiFAST64 "I64i"
182
183#define SCNdMAX "I64d"
184#define SCNiMAX "I64i"
185
186#ifdef _WIN64 // [
187# define SCNdPTR "I64d"
188# define SCNiPTR "I64i"
189#else // _WIN64 ][
190# define SCNdPTR "ld"
191# define SCNiPTR "li"
192#endif // _WIN64 ]
193
194// The fscanf macros for unsigned integers are:
195#define SCNo8 "o"
196#define SCNu8 "u"
197#define SCNx8 "x"
198#define SCNX8 "X"
199#define SCNoLEAST8 "o"
200#define SCNuLEAST8 "u"
201#define SCNxLEAST8 "x"
202#define SCNXLEAST8 "X"
203#define SCNoFAST8 "o"
204#define SCNuFAST8 "u"
205#define SCNxFAST8 "x"
206#define SCNXFAST8 "X"
207
208#define SCNo16 "ho"
209#define SCNu16 "hu"
210#define SCNx16 "hx"
211#define SCNX16 "hX"
212#define SCNoLEAST16 "ho"
213#define SCNuLEAST16 "hu"
214#define SCNxLEAST16 "hx"
215#define SCNXLEAST16 "hX"
216#define SCNoFAST16 "ho"
217#define SCNuFAST16 "hu"
218#define SCNxFAST16 "hx"
219#define SCNXFAST16 "hX"
220
221#define SCNo32 "lo"
222#define SCNu32 "lu"
223#define SCNx32 "lx"
224#define SCNX32 "lX"
225#define SCNoLEAST32 "lo"
226#define SCNuLEAST32 "lu"
227#define SCNxLEAST32 "lx"
228#define SCNXLEAST32 "lX"
229#define SCNoFAST32 "lo"
230#define SCNuFAST32 "lu"
231#define SCNxFAST32 "lx"
232#define SCNXFAST32 "lX"
233
234#define SCNo64 "I64o"
235#define SCNu64 "I64u"
236#define SCNx64 "I64x"
237#define SCNX64 "I64X"
238#define SCNoLEAST64 "I64o"
239#define SCNuLEAST64 "I64u"
240#define SCNxLEAST64 "I64x"
241#define SCNXLEAST64 "I64X"
242#define SCNoFAST64 "I64o"
243#define SCNuFAST64 "I64u"
244#define SCNxFAST64 "I64x"
245#define SCNXFAST64 "I64X"
246
247#define SCNoMAX "I64o"
248#define SCNuMAX "I64u"
249#define SCNxMAX "I64x"
250#define SCNXMAX "I64X"
251
252#ifdef _WIN64 // [
253# define SCNoPTR "I64o"
254# define SCNuPTR "I64u"
255# define SCNxPTR "I64x"
256# define SCNXPTR "I64X"
257#else // _WIN64 ][
258# define SCNoPTR "lo"
259# define SCNuPTR "lu"
260# define SCNxPTR "lx"
261# define SCNXPTR "lX"
262#endif // _WIN64 ]
263
264#endif // __STDC_FORMAT_MACROS ]
265
266// 7.8.2 Functions for greatest-width integer types
267
268// 7.8.2.1 The imaxabs function
269#define imaxabs _abs64
270
271// 7.8.2.2 The imaxdiv function
272
273// This is modified version of div() function from Microsoft's div.c found
274// in %MSVC.NET%\crt\src\div.c
275#ifdef STATIC_IMAXDIV // [
276static
277#else // STATIC_IMAXDIV ][
278_inline
279#endif // STATIC_IMAXDIV ]
280imaxdiv_t __cdecl imaxdiv(intmax_t numer, intmax_t denom)
281{
282 imaxdiv_t result;
283
284 result.quot = numer / denom;
285 result.rem = numer % denom;
286
287 if (numer < 0 && result.rem > 0) {
288 // did division wrong; must fix up
289 ++result.quot;
290 result.rem -= denom;
291 }
292
293 return result;
294}
295
296// 7.8.2.3 The strtoimax and strtoumax functions
297#define strtoimax _strtoi64
298#define strtoumax _strtoui64
299
300// 7.8.2.4 The wcstoimax and wcstoumax functions
301#define wcstoimax _wcstoi64
302#define wcstoumax _wcstoui64
303
304
305#endif // _MSC_INTTYPES_H_ ]