A Discrete-Event Network Simulator
Home
Tutorials ▼
English
Portuguese
Docs ▼
Wiki
Manual
Models
Develop ▼
API
Bugs
API
Main Page
Related Pages
Modules
Namespaces
Classes
Files
File List
File Members
All
Classes
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Properties
Friends
Macros
Groups
Pages
cairo-wideint-private.h
Go to the documentation of this file.
1
/* cairo - a vector graphics library with display and print output
2
*
3
* Copyright © 2004 Keith Packard
4
*
5
* This program is free software; you can redistribute it and/or modify
6
* it under the terms of the GNU General Public License version 2 as
7
* published by the Free Software Foundation;
8
*
9
* This program 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
12
* GNU General Public License for more details.
13
*
14
* You should have received a copy of the GNU General Public License
15
* along with this program; if not, write to the Free Software
16
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
17
*
18
* The original code as contributed to the cairo library under
19
* the dual license MPL+LGPL. We used the LGPL relicensing clause to
20
* get a GPL version of this code which now lives here. This header is
21
* unmodified other than the licensing clause.
22
*
23
* The Original Code is the cairo graphics library.
24
*
25
* The Initial Developer of the Original Code is Keith Packard
26
*
27
* Contributor(s):
28
* Keith R. Packard <keithp@keithp.com>
29
*
30
*/
31
32
#ifndef CAIRO_WIDEINT_H
33
#define CAIRO_WIDEINT_H
34
35
#include "ns3/core-config.h"
36
#define cairo_private
37
#define HAVE_UINT64_T 1
38
39
/*for compatibility with MacOS and Cygwin*/
40
#ifndef HAVE_STDINT_H
41
#ifdef __APPLE__
42
#define HAVE_STDINT_H 1
43
#elif defined(WIN32)
44
#define HAVE_STDINT_H 1
45
#endif
46
#endif
47
48
#if HAVE_STDINT_H
49
# include <stdint.h>
50
#elif HAVE_INTTYPES_H
51
# include <inttypes.h>
52
#elif HAVE_SYS_INT_TYPES_H
53
# include <sys/int_types.h>
54
#elif defined(_MSC_VER)
55
typedef
__int8 int8_t;
56
typedef
unsigned
__int8 uint8_t;
57
typedef
__int16 int16_t;
58
typedef
unsigned
__int16 uint16_t;
59
typedef
__int32 int32_t;
60
typedef
unsigned
__int32 uint32_t;
61
typedef
__int64 int64_t;
62
typedef
unsigned
__int64 uint64_t;
63
# ifndef HAVE_UINT64_T
64
# define HAVE_UINT64_T 1
65
# endif
66
# ifndef INT16_MIN
67
# define INT16_MIN (-32767-1)
68
# endif
69
# ifndef INT16_MAX
70
# define INT16_MAX (32767)
71
# endif
72
# ifndef UINT16_MAX
73
# define UINT16_MAX (65535)
74
# endif
75
#else
76
#error Cannot find definitions for fixed-width integral types (uint8_t, uint32_t, etc.)
77
#endif
78
79
#ifdef __cplusplus
80
extern
"C"
{
81
#endif
82
83
/*
84
* 64-bit datatypes. Two separate implementations, one using
85
* built-in 64-bit signed/unsigned types another implemented
86
* as a pair of 32-bit ints
87
*/
88
89
#define I cairo_private
90
91
#if !HAVE_UINT64_T
92
93
typedef
struct
_cairo_uint64 {
94
uint32_t lo, hi;
95
}
cairo_uint64_t
,
cairo_int64_t
;
96
97
cairo_uint64_t
I
_cairo_uint32_to_uint64
(uint32_t i);
98
#define _cairo_uint64_to_uint32(a) ((a).lo)
99
cairo_uint64_t
I
_cairo_uint64_add
(
cairo_uint64_t
a,
cairo_uint64_t
b);
100
cairo_uint64_t
I
_cairo_uint64_sub
(
cairo_uint64_t
a,
cairo_uint64_t
b);
101
cairo_uint64_t
I
_cairo_uint64_mul
(
cairo_uint64_t
a,
cairo_uint64_t
b);
102
cairo_uint64_t
I
_cairo_uint32x32_64_mul
(uint32_t a, uint32_t b);
103
cairo_uint64_t
I
_cairo_uint64_lsl
(
cairo_uint64_t
a,
int
shift);
104
cairo_uint64_t
I
_cairo_uint64_rsl
(
cairo_uint64_t
a,
int
shift);
105
cairo_uint64_t
I
_cairo_uint64_rsa
(
cairo_uint64_t
a,
int
shift);
106
int
I
_cairo_uint64_lt
(
cairo_uint64_t
a,
cairo_uint64_t
b);
107
int
I
_cairo_uint64_eq
(
cairo_uint64_t
a,
cairo_uint64_t
b);
108
cairo_uint64_t
I
_cairo_uint64_negate
(
cairo_uint64_t
a);
109
#define _cairo_uint64_negative(a) (((int32_t)((a).hi)) < 0)
110
cairo_uint64_t
I
_cairo_uint64_not
(
cairo_uint64_t
a);
111
112
#define _cairo_uint64_to_int64(i) (i)
113
#define _cairo_int64_to_uint64(i) (i)
114
115
cairo_int64_t
I
_cairo_int32_to_int64
(int32_t i);
116
#define _cairo_int64_to_int32(a) ((int32_t) _cairo_uint64_to_uint32 (a))
117
#define _cairo_int64_add(a,b) _cairo_uint64_add (a,b)
118
#define _cairo_int64_sub(a,b) _cairo_uint64_sub (a,b)
119
#define _cairo_int64_mul(a,b) _cairo_uint64_mul (a,b)
120
cairo_int64_t
I
_cairo_int32x32_64_mul
(int32_t a, int32_t b);
121
int
I
_cairo_int64_lt
(
cairo_uint64_t
a,
cairo_uint64_t
b);
122
#define _cairo_int64_eq(a,b) _cairo_uint64_eq (a,b)
123
#define _cairo_int64_lsl(a,b) _cairo_uint64_lsl (a,b)
124
#define _cairo_int64_rsl(a,b) _cairo_uint64_rsl (a,b)
125
#define _cairo_int64_rsa(a,b) _cairo_uint64_rsa (a,b)
126
#define _cairo_int64_negate(a) _cairo_uint64_negate (a)
127
#define _cairo_int64_negative(a) (((int32_t)((a).hi)) < 0)
128
#define _cairo_int64_not(a) _cairo_uint64_not (a)
129
130
#else
131
132
typedef
uint64_t
cairo_uint64_t
;
133
typedef
int64_t
cairo_int64_t
;
134
135
#define _cairo_uint32_to_uint64(i) ((uint64_t)(i))
136
#define _cairo_uint64_to_uint32(i) ((uint32_t)(i))
137
#define _cairo_uint64_add(a,b) ((a) + (b))
138
#define _cairo_uint64_sub(a,b) ((a) - (b))
139
#define _cairo_uint64_mul(a,b) ((a) * (b))
140
#define _cairo_uint32x32_64_mul(a,b) ((uint64_t)(a) * (b))
141
#define _cairo_uint64_lsl(a,b) ((a) << (b))
142
#define _cairo_uint64_rsl(a,b) ((uint64_t)(a) >> (b))
143
#define _cairo_uint64_rsa(a,b) ((uint64_t)((int64_t)(a) >> (b)))
144
#define _cairo_uint64_lt(a,b) ((a) < (b))
145
#define _cairo_uint64_eq(a,b) ((a) == (b))
146
#define _cairo_uint64_negate(a) ((uint64_t) -((int64_t)(a)))
147
#define _cairo_uint64_negative(a) ((int64_t)(a) < 0)
148
#define _cairo_uint64_not(a) (~(a))
149
150
#define _cairo_uint64_to_int64(i) ((int64_t)(i))
151
#define _cairo_int64_to_uint64(i) ((uint64_t)(i))
152
153
#define _cairo_int32_to_int64(i) ((int64_t)(i))
154
#define _cairo_int64_to_int32(i) ((int32_t)(i))
155
#define _cairo_int64_add(a,b) ((a) + (b))
156
#define _cairo_int64_sub(a,b) ((a) - (b))
157
#define _cairo_int64_mul(a,b) ((a) * (b))
158
#define _cairo_int32x32_64_mul(a,b) ((int64_t)(a) * (b))
159
#define _cairo_int64_lt(a,b) ((a) < (b))
160
#define _cairo_int64_eq(a,b) ((a) == (b))
161
#define _cairo_int64_lsl(a,b) ((a) << (b))
162
#define _cairo_int64_rsl(a,b) ((int64_t)((uint64_t)(a) >> (b)))
163
#define _cairo_int64_rsa(a,b) ((int64_t)(a) >> (b))
164
#define _cairo_int64_negate(a) (-(a))
165
#define _cairo_int64_negative(a) ((a) < 0)
166
#define _cairo_int64_not(a) (~(a))
167
168
#endif
169
170
/*
171
* 64-bit comparisions derived from lt or eq
172
*/
173
#define _cairo_uint64_le(a,b) (!_cairo_uint64_gt (a,b))
174
#define _cairo_uint64_ne(a,b) (!_cairo_uint64_eq (a,b))
175
#define _cairo_uint64_ge(a,b) (!_cairo_uint64_lt (a,b))
176
#define _cairo_uint64_gt(a,b) _cairo_uint64_lt (b,a)
177
178
#define _cairo_int64_le(a,b) (!_cairo_int64_gt (a,b))
179
#define _cairo_int64_ne(a,b) (!_cairo_int64_eq (a,b))
180
#define _cairo_int64_ge(a,b) (!_cairo_int64_lt (a,b))
181
#define _cairo_int64_gt(a,b) _cairo_int64_lt (b,a)
182
183
/*
184
* As the C implementation always computes both, create
185
* a function which returns both for the 'native' type as well
186
*/
187
188
typedef
struct
_cairo_uquorem64 {
189
cairo_uint64_t
quo
;
190
cairo_uint64_t
rem
;
191
}
cairo_uquorem64_t
;
192
193
typedef
struct
_cairo_quorem64 {
194
cairo_int64_t
quo
;
195
cairo_int64_t
rem
;
196
}
cairo_quorem64_t
;
197
198
cairo_uquorem64_t
I
199
_cairo_uint64_divrem
(cairo_uint64_t num, cairo_uint64_t den);
200
201
cairo_quorem64_t
I
202
_cairo_int64_divrem
(cairo_int64_t num, cairo_int64_t den);
203
204
/*
205
* 128-bit datatypes. Again, provide two implementations in
206
* case the machine has a native 128-bit datatype. GCC supports int128_t
207
* on ia64
208
*/
209
210
#if !HAVE_UINT128_T
211
212
typedef
struct
cairo_uint128 {
213
cairo_uint64_t
lo
, hi;
214
} cairo_uint128_t,
cairo_int128_t
;
215
216
cairo_uint128_t
I
_cairo_uint32_to_uint128
(uint32_t i);
217
cairo_uint128_t
I
_cairo_uint64_to_uint128
(cairo_uint64_t i);
218
#define _cairo_uint128_to_uint64(a) ((a).lo)
219
#define _cairo_uint128_to_uint32(a) _cairo_uint64_to_uint32 (_cairo_uint128_to_uint64 (a))
220
cairo_uint128_t
I
_cairo_uint128_add
(cairo_uint128_t a, cairo_uint128_t b);
221
cairo_uint128_t
I
_cairo_uint128_sub
(cairo_uint128_t a, cairo_uint128_t b);
222
cairo_uint128_t
I
_cairo_uint128_mul
(cairo_uint128_t a, cairo_uint128_t b);
223
cairo_uint128_t
I
_cairo_uint64x64_128_mul
(cairo_uint64_t a, cairo_uint64_t b);
224
cairo_uint128_t
I
_cairo_uint128_lsl
(cairo_uint128_t a,
int
shift);
225
cairo_uint128_t
I
_cairo_uint128_rsl
(cairo_uint128_t a,
int
shift);
226
cairo_uint128_t
I
_cairo_uint128_rsa
(cairo_uint128_t a,
int
shift);
227
int
I
_cairo_uint128_lt
(cairo_uint128_t a, cairo_uint128_t b);
228
int
I
_cairo_uint128_eq
(cairo_uint128_t a, cairo_uint128_t b);
229
cairo_uint128_t
I
_cairo_uint128_negate
(cairo_uint128_t a);
230
#define _cairo_uint128_negative(a) (_cairo_uint64_negative (a.hi))
231
cairo_uint128_t
I
_cairo_uint128_not
(cairo_uint128_t a);
232
233
#define _cairo_uint128_to_int128(i) (i)
234
#define _cairo_int128_to_uint128(i) (i)
235
236
cairo_int128_t
I
_cairo_int32_to_int128
(int32_t i);
237
cairo_int128_t
I
_cairo_int64_to_int128
(cairo_int64_t i);
238
#define _cairo_int128_to_int64(a) ((cairo_int64_t)(a).lo)
239
#define _cairo_int128_to_int32(a) _cairo_int64_to_int32 (_cairo_int128_to_int64 (a))
240
#define _cairo_int128_add(a,b) _cairo_uint128_add (a,b)
241
#define _cairo_int128_sub(a,b) _cairo_uint128_sub (a,b)
242
#define _cairo_int128_mul(a,b) _cairo_uint128_mul (a,b)
243
cairo_int128_t
I
_cairo_int64x64_128_mul
(cairo_int64_t a, cairo_int64_t b);
244
#define _cairo_int128_lsl(a,b) _cairo_uint128_lsl (a,b)
245
#define _cairo_int128_rsl(a,b) _cairo_uint128_rsl (a,b)
246
#define _cairo_int128_rsa(a,b) _cairo_uint128_rsa (a,b)
247
int
I
_cairo_int128_lt
(cairo_int128_t a, cairo_int128_t b);
248
#define _cairo_int128_eq(a,b) _cairo_uint128_eq (a,b)
249
#define _cairo_int128_negate(a) _cairo_uint128_negate (a)
250
#define _cairo_int128_negative(a) (_cairo_uint128_negative (a))
251
#define _cairo_int128_not(a) _cairo_uint128_not (a)
252
253
#else
/* !HAVE_UINT128_T */
254
255
typedef
uint128_t cairo_uint128_t;
256
typedef
int128_t cairo_int128_t;
257
258
#define _cairo_uint32_to_uint128(i) ((uint128_t)(i))
259
#define _cairo_uint64_to_uint128(i) ((uint128_t)(i))
260
#define _cairo_uint128_to_uint64(i) ((uint64_t)(i))
261
#define _cairo_uint128_to_uint32(i) ((uint32_t)(i))
262
#define _cairo_uint128_add(a,b) ((a) + (b))
263
#define _cairo_uint128_sub(a,b) ((a) - (b))
264
#define _cairo_uint128_mul(a,b) ((a) * (b))
265
#define _cairo_uint64x64_128_mul(a,b) ((uint128_t)(a) * (b))
266
#define _cairo_uint128_lsl(a,b) ((a) << (b))
267
#define _cairo_uint128_rsl(a,b) ((uint128_t)(a) >> (b))
268
#define _cairo_uint128_rsa(a,b) ((uint128_t)((int128_t)(a) >> (b)))
269
#define _cairo_uint128_lt(a,b) ((a) < (b))
270
#define _cairo_uint128_eq(a,b) ((a) == (b))
271
#define _cairo_uint128_negate(a) ((uint128_t) -((int128_t)(a)))
272
#define _cairo_uint128_negative(a) ((int128_t)(a) < 0)
273
#define _cairo_uint128_not(a) (~(a))
274
275
#define _cairo_uint128_to_int128(i) ((int128_t)(i))
276
#define _cairo_int128_to_uint128(i) ((uint128_t)(i))
277
278
#define _cairo_int32_to_int128(i) ((int128_t)(i))
279
#define _cairo_int64_to_int128(i) ((int128_t)(i))
280
#define _cairo_int128_to_int64(i) ((int64_t)(i))
281
#define _cairo_int128_to_int32(i) ((int32_t)(i))
282
#define _cairo_int128_add(a,b) ((a) + (b))
283
#define _cairo_int128_sub(a,b) ((a) - (b))
284
#define _cairo_int128_mul(a,b) ((a) * (b))
285
#define _cairo_int64x64_128_mul(a,b) ((int128_t)(a) * (b))
286
#define _cairo_int128_lt(a,b) ((a) < (b))
287
#define _cairo_int128_eq(a,b) ((a) == (b))
288
#define _cairo_int128_lsl(a,b) ((a) << (b))
289
#define _cairo_int128_rsl(a,b) ((int128_t)((uint128_t)(a) >> (b)))
290
#define _cairo_int128_rsa(a,b) ((int128_t)(a) >> (b))
291
#define _cairo_int128_negate(a) (-(a))
292
#define _cairo_int128_negative(a) ((a) < 0)
293
#define _cairo_int128_not(a) (~(a))
294
295
#endif
/* HAVE_UINT128_T */
296
297
typedef
struct
_cairo_uquorem128 {
298
cairo_uint128_t
quo
;
299
cairo_uint128_t
rem
;
300
}
cairo_uquorem128_t
;
301
302
typedef
struct
_cairo_quorem128 {
303
cairo_int128_t
quo
;
304
cairo_int128_t
rem
;
305
}
cairo_quorem128_t
;
306
307
cairo_uquorem128_t
I
308
_cairo_uint128_divrem
(cairo_uint128_t num, cairo_uint128_t den);
309
310
cairo_quorem128_t
I
311
_cairo_int128_divrem
(cairo_int128_t num, cairo_int128_t den);
312
313
cairo_uquorem64_t
I
314
_cairo_uint_96by64_32x64_divrem
(cairo_uint128_t num,
315
cairo_uint64_t den);
316
317
cairo_quorem64_t
I
318
_cairo_int_96by64_32x64_divrem
(cairo_int128_t num,
319
cairo_int64_t den);
320
321
#define _cairo_uint128_le(a,b) (!_cairo_uint128_gt (a,b))
322
#define _cairo_uint128_ne(a,b) (!_cairo_uint128_eq (a,b))
323
#define _cairo_uint128_ge(a,b) (!_cairo_uint128_lt (a,b))
324
#define _cairo_uint128_gt(a,b) _cairo_uint128_lt (b,a)
325
326
#define _cairo_int128_le(a,b) (!_cairo_int128_gt (a,b))
327
#define _cairo_int128_ne(a,b) (!_cairo_int128_eq (a,b))
328
#define _cairo_int128_ge(a,b) (!_cairo_int128_lt (a,b))
329
#define _cairo_int128_gt(a,b) _cairo_int128_lt (b,a)
330
331
#undef I
332
333
#ifdef __cplusplus
334
};
335
#endif
336
337
338
#endif
/* CAIRO_WIDEINT_H */
src
core
model
cairo-wideint-private.h
Generated on Tue Oct 9 2012 16:45:34 for ns-3 by
1.8.1.2