source: trunk/Utilities/FFmpeg/FFmpegApp/inttypes.h @ 937

Last change on this file since 937 was 113, checked in by roman, 12 years ago
  • Property svn:keywords set to Id
File size: 8.1 KB
RevLine 
[113]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_ ]
Note: See TracBrowser for help on using the repository browser.