msvcp90: Added complex trigonometric functions implementation.
[wine] / dlls / msvcp90 / math.c
1 /*
2  * Copyright 2011 Alexandre Julliard
3  *
4  * This 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  * This 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 this library; if not, write to the Free Software
16  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
17  */
18
19 #include "config.h"
20
21 #include <stdarg.h>
22 #include <limits.h>
23 #include <float.h>
24 #include <math.h>
25
26 #include "msvcp90.h"
27 #include "windef.h"
28 #include "winbase.h"
29
30 typedef double LDOUBLE;  /* long double is just a double */
31
32 typedef struct { } std_Num_base;
33 typedef struct { } std_Ctraits;
34
35 enum std_float_denorm_style
36 {
37     denorm_indeterminate = -1,
38     denorm_absent = 0,
39     denorm_present = 1
40 };
41
42 enum std_float_round_style
43 {
44     round_indeterminate = -1,
45     round_toward_zero = 0,
46     round_to_nearest = 1,
47     round_toward_infinity = 2,
48     round_toward_neg_infinity = 3
49 };
50
51 /* these are defined as integers but the bit patterns are then interpreted as floats/doubles */
52 const DWORD     _FDenorm = 1;
53 const ULONGLONG _Denorm  = 1;
54 const ULONGLONG _LDenorm = 1;
55 const DWORD     _FInf    = 0x7f800000;
56 const ULONGLONG _Inf     = (ULONGLONG)0x7ff00000 << 32;
57 const ULONGLONG _LInf    = (ULONGLONG)0x7ff00000 << 32;
58 const DWORD     _FNan    = 0x7fc00000;
59 const ULONGLONG _Nan     = (ULONGLONG)0x7ff80000 << 32;
60 const ULONGLONG _LNan    = (ULONGLONG)0x7ff80000 << 32;
61 const DWORD     _FSnan   = 0x7f800001;
62 const ULONGLONG _Snan    = ((ULONGLONG)0x7ff00000 << 32) + 1;
63 const ULONGLONG _LSnan   = ((ULONGLONG)0x7ff00000 << 32) + 1;
64 const ULONGLONG _LZero   = 0;
65 const ULONGLONG _Hugeval = (ULONGLONG)0x7ff00000 << 32;
66
67 const float   _FEps = FLT_EPSILON;
68 const double  _Eps  = DBL_EPSILON;
69 const LDOUBLE _LEps = LDBL_EPSILON;
70
71 /* ?digits10@?$numeric_limits@C@std@@2HB -> public: static int const std::numeric_limits<signed char>::digits10 */
72 const int std_numeric_limits_signed_char_digits10 = 2;
73
74 /* ?digits10@?$numeric_limits@D@std@@2HB -> public: static int const std::numeric_limits<char>::digits10 */
75 const int std_numeric_limits_char_digits10 = 2;
76
77 /* ?digits10@?$numeric_limits@E@std@@2HB -> public: static int const std::numeric_limits<unsigned char>::digits10 */
78 const int std_numeric_limits_unsigned_char_digits10 = 2;
79
80 /* ?digits10@?$numeric_limits@F@std@@2HB -> public: static int const std::numeric_limits<short>::digits10 */
81 const int std_numeric_limits_short_digits10 = 4;
82
83 /* ?digits10@?$numeric_limits@G@std@@2HB -> public: static int const std::numeric_limits<unsigned short>::digits10 */
84 const int std_numeric_limits_unsigned_short_digits10 = 4;
85
86 /* ?digits10@?$numeric_limits@H@std@@2HB -> public: static int const std::numeric_limits<int>::digits10 */
87 const int std_numeric_limits_int_digits10 = 9;
88
89 /* ?digits10@?$numeric_limits@I@std@@2HB -> public: static int const std::numeric_limits<unsigned int>::digits10 */
90 const int std_numeric_limits_unsigned_int_digits10 = 9;
91
92 /* ?digits10@?$numeric_limits@J@std@@2HB -> public: static int const std::numeric_limits<long>::digits10 */
93 const int std_numeric_limits_long_digits10 = 9;
94
95 /* ?digits10@?$numeric_limits@K@std@@2HB -> public: static int const std::numeric_limits<unsigned long>::digits10 */
96 const int std_numeric_limits_unsigned_long_digits10 = 9;
97
98 /* ?digits10@?$numeric_limits@M@std@@2HB -> public: static int const std::numeric_limits<float>::digits10 */
99 const int std_numeric_limits_float_digits10 = FLT_DIG;
100
101 /* ?digits10@?$numeric_limits@N@std@@2HB -> public: static int const std::numeric_limits<double>::digits10 */
102 const int std_numeric_limits_double_digits10 = DBL_DIG;
103
104 /* ?digits10@?$numeric_limits@O@std@@2HB -> public: static int const std::numeric_limits<long double>::digits10 */
105 const int std_numeric_limits_long_double_digits10 = LDBL_DIG;
106
107 /* ?digits10@?$numeric_limits@_J@std@@2HB -> public: static int const std::numeric_limits<__int64>::digits10 */
108 const int std_numeric_limits_int64_digits10 = 18;
109
110 /* ?digits10@?$numeric_limits@_K@std@@2HB -> public: static int const std::numeric_limits<unsigned __int64>::digits10 */
111 const int std_numeric_limits_unsigned_int64_digits10 = 18;
112
113 /* ?digits10@?$numeric_limits@_N@std@@2HB -> public: static int const std::numeric_limits<bool>::digits10 */
114 const int std_numeric_limits_bool_digits10 = 0;
115
116 /* ?digits10@?$numeric_limits@_W@std@@2HB -> public: static int const std::numeric_limits<wchar_t>::digits10 */
117 const int std_numeric_limits_wchar_t_digits10 = 4;
118
119 /* ?digits10@_Num_base@std@@2HB -> public: static int const std::_Num_base::digits10 */
120 const int std_Num_base_digits10 = 0;
121
122 /* ?digits@?$numeric_limits@C@std@@2HB -> public: static int const std::numeric_limits<signed char>::digits */
123 const int std_numeric_limits_signed_char_digits = 7;
124
125 /* ?digits@?$numeric_limits@D@std@@2HB -> public: static int const std::numeric_limits<char>::digits */
126 const int std_numeric_limits_char_digits = (CHAR_MIN < 0) ? 7 : 8;
127
128 /* ?digits@?$numeric_limits@E@std@@2HB -> public: static int const std::numeric_limits<unsigned char>::digits */
129 const int std_numeric_limits_unsigned_char_digits = 8;
130
131 /* ?digits@?$numeric_limits@F@std@@2HB -> public: static int const std::numeric_limits<short>::digits */
132 const int std_numeric_limits_short_digits = 15;
133
134 /* ?digits@?$numeric_limits@G@std@@2HB -> public: static int const std::numeric_limits<unsigned short>::digits */
135 const int std_numeric_limits_unsigned_short_digits = 16;
136
137 /* ?digits@?$numeric_limits@H@std@@2HB -> public: static int const std::numeric_limits<int>::digits */
138 const int std_numeric_limits_int_digits = 31;
139
140 /* ?digits@?$numeric_limits@I@std@@2HB -> public: static int const std::numeric_limits<unsigned int>::digits */
141 const int std_numeric_limits_unsigned_int_digits = 32;
142
143 /* ?digits@?$numeric_limits@J@std@@2HB -> public: static int const std::numeric_limits<long>::digits */
144 const int std_numeric_limits_long_digits = 31;
145
146 /* ?digits@?$numeric_limits@K@std@@2HB -> public: static int const std::numeric_limits<unsigned long>::digits */
147 const int std_numeric_limits_unsigned_long_digits = 32;
148
149 /* ?digits@?$numeric_limits@M@std@@2HB -> public: static int const std::numeric_limits<float>::digits */
150 const int std_numeric_limits_float_digits = FLT_MANT_DIG;
151
152 /* ?digits@?$numeric_limits@N@std@@2HB -> public: static int const std::numeric_limits<double>::digits */
153 const int std_numeric_limits_double_digits = DBL_MANT_DIG;
154
155 /* ?digits@?$numeric_limits@O@std@@2HB -> public: static int const std::numeric_limits<long double>::digits */
156 const int std_numeric_limits_long_double_digits = LDBL_MANT_DIG;
157
158 /* ?digits@?$numeric_limits@_J@std@@2HB -> public: static int const std::numeric_limits<__int64>::digits */
159 const int std_numeric_limits_int64_digits = 63;
160
161 /* ?digits@?$numeric_limits@_K@std@@2HB -> public: static int const std::numeric_limits<unsigned __int64>::digits */
162 const int std_numeric_limits_unsigned_int64_digits = 64;
163
164 /* ?digits@?$numeric_limits@_N@std@@2HB -> public: static int const std::numeric_limits<bool>::digits */
165 const int std_numeric_limits_bool_digits = 1;
166
167 /* ?digits@?$numeric_limits@_W@std@@2HB -> public: static int const std::numeric_limits<wchar_t>::digits */
168 const int std_numeric_limits_wchar_t_digits = 16;
169
170 /* ?digits@_Num_base@std@@2HB -> public: static int const std::_Num_base::digits */
171 const int std_Num_base_digits = 0;
172
173 /* ?has_denorm@_Num_base@std@@2W4float_denorm_style@2@B -> public: static enum std::float_denorm_style const std::_Num_base::has_denorm */
174 const enum std_float_denorm_style std_Num_base_has_denorm = denorm_absent;
175
176 /* ?has_denorm@_Num_float_base@std@@2W4float_denorm_style@2@B -> public: static enum std::float_denorm_style const std::_Num_float_base::has_denorm */
177 const enum std_float_denorm_style std_Num_float_base_has_denorm = denorm_present;
178
179 /* ?has_denorm_loss@_Num_base@std@@2_NB -> public: static bool const std::_Num_base::has_denorm_loss */
180 const BOOLEAN std_Num_base_has_denorm_loss = FALSE;
181
182 /* ?has_denorm_loss@_Num_float_base@std@@2_NB -> public: static bool const std::_Num_float_base::has_denorm_loss */
183 const BOOLEAN std_Num_float_base_has_denorm_loss = TRUE;
184
185 /* ?has_infinity@_Num_base@std@@2_NB -> public: static bool const std::_Num_base::has_infinity */
186 const BOOLEAN std_Num_base_has_infinity = FALSE;
187
188 /* ?has_infinity@_Num_float_base@std@@2_NB -> public: static bool const std::_Num_float_base::has_infinity */
189 const BOOLEAN std_Num_float_base_has_infinity = TRUE;
190
191 /* ?has_quiet_NaN@_Num_base@std@@2_NB -> public: static bool const std::_Num_base::has_quiet_NaN */
192 const BOOLEAN std_Num_base_has_quiet_NaN = FALSE;
193
194 /* ?has_quiet_NaN@_Num_float_base@std@@2_NB -> public: static bool const std::_Num_float_base::has_quiet_NaN */
195 const BOOLEAN std_Num_float_base_has_quiet_NaN = TRUE;
196
197 /* ?has_signaling_NaN@_Num_base@std@@2_NB -> public: static bool const std::_Num_base::has_signaling_NaN */
198 const BOOLEAN std_Num_base_has_signaling_NaN = FALSE;
199
200 /* ?has_signaling_NaN@_Num_float_base@std@@2_NB -> public: static bool const std::_Num_float_base::has_signaling_NaN */
201 const BOOLEAN std_Num_float_base_has_signaling_NaN = TRUE;
202
203 /* ?is_bounded@_Num_base@std@@2_NB -> public: static bool const std::_Num_base::is_bounded */
204 const BOOLEAN std_Num_base_is_bounded = FALSE;
205
206 /* ?is_bounded@_Num_float_base@std@@2_NB -> public: static bool const std::_Num_float_base::is_bounded */
207 const BOOLEAN std_Num_float_base_is_bounded = TRUE;
208
209 /* ?is_bounded@_Num_int_base@std@@2_NB -> public: static bool const std::_Num_int_base::is_bounded */
210 const BOOLEAN std_Num_int_base_is_bounded = TRUE;
211
212 /* ?is_exact@_Num_base@std@@2_NB -> public: static bool const std::_Num_base::is_exact */
213 const BOOLEAN std_Num_base_is_exact = FALSE;
214
215 /* ?is_exact@_Num_float_base@std@@2_NB -> public: static bool const std::_Num_float_base::is_exact */
216 const BOOLEAN std_Num_float_base_is_exact = FALSE;
217
218 /* ?is_exact@_Num_int_base@std@@2_NB -> public: static bool const std::_Num_int_base::is_exact */
219 const BOOLEAN std_Num_int_base_is_exact = TRUE;
220
221 /* ?is_iec559@_Num_base@std@@2_NB -> public: static bool const std::_Num_base::is_iec559 */
222 const BOOLEAN std_Num_base_is_iec559 = FALSE;
223
224 /* ?is_iec559@_Num_float_base@std@@2_NB -> public: static bool const std::_Num_float_base::is_iec559 */
225 const BOOLEAN std_Num_float_base_is_iec559 = TRUE;
226
227 /* ?is_integer@_Num_base@std@@2_NB -> public: static bool const std::_Num_base::is_integer */
228 const BOOLEAN std_Num_base_is_integer = FALSE;
229
230 /* ?is_integer@_Num_float_base@std@@2_NB -> public: static bool const std::_Num_float_base::is_integer */
231 const BOOLEAN std_Num_float_base_is_integer = FALSE;
232
233 /* ?is_integer@_Num_int_base@std@@2_NB -> public: static bool const std::_Num_int_base::is_integer */
234 const BOOLEAN std_Num_int_base_is_integer = TRUE;
235
236 /* ?is_modulo@?$numeric_limits@_N@std@@2_NB -> public: static bool const std::numeric_limits<bool>::is_modulo */
237 const BOOLEAN std_numeric_limits_bool_is_modulo = FALSE;
238
239 /* ?is_modulo@_Num_base@std@@2_NB -> public: static bool const std::_Num_base::is_modulo */
240 const BOOLEAN std_Num_base_is_modulo = FALSE;
241
242 /* ?is_modulo@_Num_float_base@std@@2_NB -> public: static bool const std::_Num_float_base::is_modulo */
243 const BOOLEAN std_Num_float_base_is_modulo = FALSE;
244
245 /* ?is_modulo@_Num_int_base@std@@2_NB -> public: static bool const std::_Num_int_base::is_modulo */
246 const BOOLEAN std_Num_int_base_is_modulo = TRUE;
247
248 /* ?is_signed@?$numeric_limits@C@std@@2_NB -> public: static bool const std::numeric_limits<signed char>::is_signed */
249 const BOOLEAN std_numeric_limits_signed_char_is_signed = TRUE;
250
251 /* ?is_signed@?$numeric_limits@D@std@@2_NB -> public: static bool const std::numeric_limits<char>::is_signed */
252 const BOOLEAN std_numeric_limits_char_is_signed = (CHAR_MIN < 0);
253
254 /* ?is_signed@?$numeric_limits@E@std@@2_NB -> public: static bool const std::numeric_limits<unsigned char>::is_signed */
255 const BOOLEAN std_numeric_limits_unsigned_char_is_signed = FALSE;
256
257 /* ?is_signed@?$numeric_limits@F@std@@2_NB -> public: static bool const std::numeric_limits<short>::is_signed */
258 const BOOLEAN std_numeric_limits_short_is_signed = TRUE;
259
260 /* ?is_signed@?$numeric_limits@G@std@@2_NB -> public: static bool const std::numeric_limits<unsigned short>::is_signed */
261 const BOOLEAN std_numeric_limits_unsigned_short_is_signed = FALSE;
262
263 /* ?is_signed@?$numeric_limits@H@std@@2_NB -> public: static bool const std::numeric_limits<int>::is_signed */
264 const BOOLEAN std_numeric_limits_int_is_signed = TRUE;
265
266 /* ?is_signed@?$numeric_limits@I@std@@2_NB -> public: static bool const std::numeric_limits<unsigned int>::is_signed */
267 const BOOLEAN std_numeric_limits_unsigned_int_is_signed = FALSE;
268
269 /* ?is_signed@?$numeric_limits@J@std@@2_NB -> public: static bool const std::numeric_limits<long>::is_signed */
270 const BOOLEAN std_numeric_limits_long_is_signed = TRUE;
271
272 /* ?is_signed@?$numeric_limits@K@std@@2_NB -> public: static bool const std::numeric_limits<unsigned long>::is_signed */
273 const BOOLEAN std_numeric_limits_unsigned_long_is_signed = FALSE;
274
275 /* ?is_signed@?$numeric_limits@_J@std@@2_NB -> public: static bool const std::numeric_limits<__int64>::is_signed */
276 const BOOLEAN std_numeric_limits_int64_is_signed = TRUE;
277
278 /* ?is_signed@?$numeric_limits@_K@std@@2_NB -> public: static bool const std::numeric_limits<unsigned __int64>::is_signed */
279 const BOOLEAN std_numeric_limits_unsigned_int64_is_signed = FALSE;
280
281 /* ?is_signed@?$numeric_limits@_N@std@@2_NB -> public: static bool const std::numeric_limits<bool>::is_signed */
282 const BOOLEAN std_numeric_limits_bool_is_signed = FALSE;
283
284 /* ?is_signed@?$numeric_limits@_W@std@@2_NB -> public: static bool const std::numeric_limits<wchar_t>::is_signed */
285 const BOOLEAN std_numeric_limits_wchar_t_is_signed = FALSE;
286
287 /* ?is_signed@_Num_base@std@@2_NB -> public: static bool const std::_Num_base::is_signed */
288 const BOOLEAN std_Num_base_is_signed = FALSE;
289
290 /* ?is_signed@_Num_float_base@std@@2_NB -> public: static bool const std::_Num_float_base::is_signed */
291 const BOOLEAN std_Num_float_base_is_signed = TRUE;
292
293 /* ?is_specialized@_Num_base@std@@2_NB -> public: static bool const std::_Num_base::is_specialized */
294 const BOOLEAN std_Num_base_is_specialized = FALSE;
295
296 /* ?is_specialized@_Num_float_base@std@@2_NB -> public: static bool const std::_Num_float_base::is_specialized */
297 const BOOLEAN std_Num_float_base_is_specialized = TRUE;
298
299 /* ?is_specialized@_Num_int_base@std@@2_NB -> public: static bool const std::_Num_int_base::is_specialized */
300 const BOOLEAN std_Num_int_base_is_specialized = TRUE;
301
302 /* ?max_exponent10@?$numeric_limits@M@std@@2HB -> public: static int const std::numeric_limits<float>::max_exponent10 */
303 const int std_numeric_limits_float_max_exponent10 = FLT_MAX_10_EXP;
304
305 /* ?max_exponent10@?$numeric_limits@N@std@@2HB -> public: static int const std::numeric_limits<double>::max_exponent10 */
306 const int std_numeric_limits_double_max_exponent10 = DBL_MAX_10_EXP;
307
308 /* ?max_exponent10@?$numeric_limits@O@std@@2HB -> public: static int const std::numeric_limits<long double>::max_exponent10 */
309 const int std_numeric_limits_long_double_max_exponent10 = LDBL_MAX_10_EXP;
310
311 /* ?max_exponent10@_Num_base@std@@2HB -> public: static int const std::_Num_base::max_exponent10 */
312 const int std_Num_base_max_exponent10 = 0;
313
314 /* ?max_exponent@?$numeric_limits@M@std@@2HB -> public: static int const std::numeric_limits<float>::max_exponent */
315 const int std_numeric_limits_float_max_exponent = FLT_MAX_EXP;
316
317 /* ?max_exponent@?$numeric_limits@N@std@@2HB -> public: static int const std::numeric_limits<double>::max_exponent */
318 const int std_numeric_limits_double_max_exponent = DBL_MAX_EXP;
319
320 /* ?max_exponent@?$numeric_limits@O@std@@2HB -> public: static int const std::numeric_limits<long double>::max_exponent */
321 const int std_numeric_limits_long_double_max_exponent = LDBL_MAX_EXP;
322
323 /* ?max_exponent@_Num_base@std@@2HB -> public: static int const std::_Num_base::max_exponent */
324 const int std_Num_base_max_exponent = 0;
325
326 /* ?min_exponent10@?$numeric_limits@M@std@@2HB -> public: static int const std::numeric_limits<float>::min_exponent10 */
327 const int std_numeric_limits_float_min_exponent10 = FLT_MIN_10_EXP;
328
329 /* ?min_exponent10@?$numeric_limits@N@std@@2HB -> public: static int const std::numeric_limits<double>::min_exponent10 */
330 const int std_numeric_limits_double_min_exponent10 = DBL_MIN_10_EXP;
331
332 /* ?min_exponent10@?$numeric_limits@O@std@@2HB -> public: static int const std::numeric_limits<long double>::min_exponent10 */
333 const int std_numeric_limits_long_double_min_exponent10 = LDBL_MIN_10_EXP;
334
335 /* ?min_exponent10@_Num_base@std@@2HB -> public: static int const std::_Num_base::min_exponent10 */
336 const int std_Num_base_min_exponent10 = 0;
337
338 /* ?min_exponent@?$numeric_limits@M@std@@2HB -> public: static int const std::numeric_limits<float>::min_exponent */
339 const int std_numeric_limits_float_min_exponent = FLT_MIN_EXP;
340
341 /* ?min_exponent@?$numeric_limits@N@std@@2HB -> public: static int const std::numeric_limits<double>::min_exponent */
342 const int std_numeric_limits_double_min_exponent = DBL_MIN_EXP;
343
344 /* ?min_exponent@?$numeric_limits@O@std@@2HB -> public: static int const std::numeric_limits<long double>::min_exponent */
345 const int std_numeric_limits_long_double_min_exponent = LDBL_MIN_EXP;
346
347 /* ?min_exponent@_Num_base@std@@2HB -> public: static int const std::_Num_base::min_exponent */
348 const int std_Num_base_min_exponent = 0;
349
350 /* ?radix@_Num_base@std@@2HB -> public: static int const std::_Num_base::radix */
351 const int std_Num_base_radix = 0;
352
353 /* ?radix@_Num_float_base@std@@2HB -> public: static int const std::_Num_float_base::radix */
354 const int std_Num_float_base_radix = FLT_RADIX;
355
356 /* ?radix@_Num_int_base@std@@2HB -> public: static int const std::_Num_int_base::radix */
357 const int std_Num_int_base_radix = 2;
358
359 /* ?round_style@_Num_base@std@@2W4float_round_style@2@B -> public: static enum std::float_round_style const std::_Num_base::round_style */
360 const enum std_float_round_style std_Num_base_round_style = round_toward_zero;
361
362 /* ?round_style@_Num_float_base@std@@2W4float_round_style@2@B -> public: static enum std::float_round_style const std::_Num_float_base::round_style */
363 const enum std_float_round_style std_Num_float_base_round_style = round_to_nearest;
364
365 /* ?tinyness_before@_Num_base@std@@2_NB -> public: static bool const  std::_Num_base::tinyness_before */
366 const BOOLEAN std_Num_base_tinyness_before = FALSE;
367
368 /* ?tinyness_before@_Num_float_base@std@@2_NB -> public: static bool const  std::_Num_float_base::tinyness_before */
369 const BOOLEAN std_Num_float_base_tinyness_before = TRUE;
370
371 /* ?traps@_Num_base@std@@2_NB -> public: static bool const  std::_Num_base::traps */
372 const BOOLEAN std_Num_base_traps = FALSE;
373
374 /* ?traps@_Num_float_base@std@@2_NB -> public: static bool const  std::_Num_float_base::traps */
375 const BOOLEAN std_Num_float_base_traps = TRUE;
376
377 /* ??4?$numeric_limits@C@std@@QAEAAV01@ABV01@@Z -> public: class std::numeric_limits<signed char> & __thiscall std::numeric_limits<signed char>::operator=(class std::numeric_limits<signed char> const &) */
378 /* ??4?$numeric_limits@C@std@@QEAAAEAV01@AEBV01@@Z -> public: class std::numeric_limits<signed char> & __ptr64 __cdecl std::numeric_limits<signed char>::operator=(class std::numeric_limits<signed char> const & __ptr64) __ptr64 */
379 /* ??4?$numeric_limits@D@std@@QAEAAV01@ABV01@@Z -> public: class std::numeric_limits<char> & __thiscall std::numeric_limits<char>::operator=(class std::numeric_limits<char> const &) */
380 /* ??4?$numeric_limits@D@std@@QEAAAEAV01@AEBV01@@Z -> public: class std::numeric_limits<char> & __ptr64 __cdecl std::numeric_limits<char>::operator=(class std::numeric_limits<char> const & __ptr64) __ptr64 */
381 /* ??4?$numeric_limits@E@std@@QAEAAV01@ABV01@@Z -> public: class std::numeric_limits<unsigned char> & __thiscall std::numeric_limits<unsigned char>::operator=(class std::numeric_limits<unsigned char> const &) */
382 /* ??4?$numeric_limits@E@std@@QEAAAEAV01@AEBV01@@Z -> public: class std::numeric_limits<unsigned char> & __ptr64 __cdecl std::numeric_limits<unsigned char>::operator=(class std::numeric_limits<unsigned char> const & __ptr64) __ptr64 */
383 /* ??4?$numeric_limits@F@std@@QAEAAV01@ABV01@@Z -> public: class std::numeric_limits<short> & __thiscall std::numeric_limits<short>::operator=(class std::numeric_limits<short> const &) */
384 /* ??4?$numeric_limits@F@std@@QEAAAEAV01@AEBV01@@Z -> public: class std::numeric_limits<short> & __ptr64 __cdecl std::numeric_limits<short>::operator=(class std::numeric_limits<short> const & __ptr64) __ptr64 */
385 /* ??4?$numeric_limits@G@std@@QAEAAV01@ABV01@@Z -> public: class std::numeric_limits<unsigned short> & __thiscall std::numeric_limits<unsigned short>::operator=(class std::numeric_limits<unsigned short> const &) */
386 /* ??4?$numeric_limits@G@std@@QEAAAEAV01@AEBV01@@Z -> public: class std::numeric_limits<unsigned short> & __ptr64 __cdecl std::numeric_limits<unsigned short>::operator=(class std::numeric_limits<unsigned short> const & __ptr64) __ptr64 */
387 /* ??4?$numeric_limits@H@std@@QAEAAV01@ABV01@@Z -> public: class std::numeric_limits<int> & __thiscall std::numeric_limits<int>::operator=(class std::numeric_limits<int> const &) */
388 /* ??4?$numeric_limits@H@std@@QEAAAEAV01@AEBV01@@Z -> public: class std::numeric_limits<int> & __ptr64 __cdecl std::numeric_limits<int>::operator=(class std::numeric_limits<int> const & __ptr64) __ptr64 */
389 /* ??4?$numeric_limits@I@std@@QAEAAV01@ABV01@@Z -> public: class std::numeric_limits<unsigned int> & __thiscall std::numeric_limits<unsigned int>::operator=(class std::numeric_limits<unsigned int> const &) */
390 /* ??4?$numeric_limits@I@std@@QEAAAEAV01@AEBV01@@Z -> public: class std::numeric_limits<unsigned int> & __ptr64 __cdecl std::numeric_limits<unsigned int>::operator=(class std::numeric_limits<unsigned int> const & __ptr64) __ptr64 */
391 /* ??4?$numeric_limits@J@std@@QAEAAV01@ABV01@@Z -> public: class std::numeric_limits<long> & __thiscall std::numeric_limits<long>::operator=(class std::numeric_limits<long> const &) */
392 /* ??4?$numeric_limits@J@std@@QEAAAEAV01@AEBV01@@Z -> public: class std::numeric_limits<long> & __ptr64 __cdecl std::numeric_limits<long>::operator=(class std::numeric_limits<long> const & __ptr64) __ptr64 */
393 /* ??4?$numeric_limits@K@std@@QAEAAV01@ABV01@@Z -> public: class std::numeric_limits<unsigned long> & __thiscall std::numeric_limits<unsigned long>::operator=(class std::numeric_limits<unsigned long> const &) */
394 /* ??4?$numeric_limits@K@std@@QEAAAEAV01@AEBV01@@Z -> public: class std::numeric_limits<unsigned long> & __ptr64 __cdecl std::numeric_limits<unsigned long>::operator=(class std::numeric_limits<unsigned long> const & __ptr64) __ptr64 */
395 /* ??4?$numeric_limits@M@std@@QAEAAV01@ABV01@@Z -> public: class std::numeric_limits<float> & __thiscall std::numeric_limits<float>::operator=(class std::numeric_limits<float> const &) */
396 /* ??4?$numeric_limits@M@std@@QEAAAEAV01@AEBV01@@Z -> public: class std::numeric_limits<float> & __ptr64 __cdecl std::numeric_limits<float>::operator=(class std::numeric_limits<float> const & __ptr64) __ptr64 */
397 /* ??4?$numeric_limits@N@std@@QAEAAV01@ABV01@@Z -> public: class std::numeric_limits<double> & __thiscall std::numeric_limits<double>::operator=(class std::numeric_limits<double> const &) */
398 /* ??4?$numeric_limits@N@std@@QEAAAEAV01@AEBV01@@Z -> public: class std::numeric_limits<double> & __ptr64 __cdecl std::numeric_limits<double>::operator=(class std::numeric_limits<double> const & __ptr64) __ptr64 */
399 /* ??4?$numeric_limits@O@std@@QAEAAV01@ABV01@@Z -> public: class std::numeric_limits<long double> & __thiscall std::numeric_limits<long double>::operator=(class std::numeric_limits<long double> const &) */
400 /* ??4?$numeric_limits@O@std@@QEAAAEAV01@AEBV01@@Z -> public: class std::numeric_limits<long double> & __ptr64 __cdecl std::numeric_limits<long double>::operator=(class std::numeric_limits<long double> const & __ptr64) __ptr64 */
401 /* ??4?$numeric_limits@_J@std@@QAEAAV01@ABV01@@Z -> public: class std::numeric_limits<__int64> & __thiscall std::numeric_limits<__int64>::operator=(class std::numeric_limits<__int64> const &) */
402 /* ??4?$numeric_limits@_J@std@@QEAAAEAV01@AEBV01@@Z -> public: class std::numeric_limits<__int64> & __ptr64 __cdecl std::numeric_limits<__int64>::operator=(class std::numeric_limits<__int64> const & __ptr64) __ptr64 */
403 /* ??4?$numeric_limits@_K@std@@QAEAAV01@ABV01@@Z -> public: class std::numeric_limits<unsigned __int64> & __thiscall std::numeric_limits<unsigned __int64>::operator=(class std::numeric_limits<unsigned __int64> const &) */
404 /* ??4?$numeric_limits@_K@std@@QEAAAEAV01@AEBV01@@Z -> public: class std::numeric_limits<unsigned __int64> & __ptr64 __cdecl std::numeric_limits<unsigned __int64>::operator=(class std::numeric_limits<unsigned __int64> const & __ptr64) __ptr64 */
405 /* ??4?$numeric_limits@_N@std@@QAEAAV01@ABV01@@Z -> public: class std::numeric_limits<bool> & __thiscall std::numeric_limits<bool>::operator=(class std::numeric_limits<bool> const &) */
406 /* ??4?$numeric_limits@_N@std@@QEAAAEAV01@AEBV01@@Z -> public: class std::numeric_limits<bool> & __ptr64 __cdecl std::numeric_limits<bool>::operator=(class std::numeric_limits<bool> const & __ptr64) __ptr64 */
407 /* ??4?$numeric_limits@_W@std@@QAEAAV01@ABV01@@Z -> public: class std::numeric_limits<wchar_t> & __thiscall std::numeric_limits<wchar_t>::operator=(class std::numeric_limits<wchar_t> const &) */
408 /* ??4?$numeric_limits@_W@std@@QEAAAEAV01@AEBV01@@Z -> public: class std::numeric_limits<wchar_t> & __ptr64 __cdecl std::numeric_limits<wchar_t>::operator=(class std::numeric_limits<wchar_t> const & __ptr64) __ptr64 */
409 /* ??4_Num_base@std@@QAEAAU01@ABU01@@Z -> public: struct std::_Num_base & __thiscall std::_Num_base::operator=(struct std::_Num_base const &) */
410 /* ??4_Num_base@std@@QEAAAEAU01@AEBU01@@Z -> public: struct std::_Num_base & __ptr64 __cdecl std::_Num_base::operator=(struct std::_Num_base const & __ptr64) __ptr64 */
411 /* ??4_Num_float_base@std@@QAEAAU01@ABU01@@Z -> public: struct std::_Num_float_base & __thiscall std::_Num_float_base::operator=(struct std::_Num_float_base const &) */
412 /* ??4_Num_float_base@std@@QEAAAEAU01@AEBU01@@Z -> public: struct std::_Num_float_base & __ptr64 __cdecl std::_Num_float_base::operator=(struct std::_Num_float_base const & __ptr64) __ptr64 */
413 /* ??4_Num_int_base@std@@QAEAAU01@ABU01@@Z -> public: struct std::_Num_int_base & __thiscall std::_Num_int_base::operator=(struct std::_Num_int_base const &) */
414 /* ??4_Num_int_base@std@@QEAAAEAU01@AEBU01@@Z -> public: struct std::_Num_int_base & __ptr64 __cdecl std::_Num_int_base::operator=(struct std::_Num_int_base const & __ptr64) __ptr64 */
415 DEFINE_THISCALL_WRAPPER( std_Num_base_op_assign, 8 )
416 std_Num_base * __thiscall std_Num_base_op_assign( std_Num_base *this, std_Num_base *right )
417 {
418     return this;
419 }
420
421 /* ?denorm_min@?$numeric_limits@C@std@@SACXZ -> public: static signed char __cdecl std::numeric_limits<signed char>::denorm_min(void) */
422 signed char __cdecl std_numeric_limits_signed_char_denorm_min(void) { return 0; }
423
424 /* ?denorm_min@?$numeric_limits@D@std@@SADXZ -> public: static char __cdecl std::numeric_limits<char>::denorm_min(void) */
425 char __cdecl std_numeric_limits_char_denorm_min(void) { return 0; }
426
427 /* ?denorm_min@?$numeric_limits@E@std@@SAEXZ -> public: static unsigned char __cdecl std::numeric_limits<unsigned char>::denorm_min(void) */
428 unsigned char __cdecl std_numeric_limits_unsigned_char_denorm_min(void) { return 0; }
429
430 /* ?denorm_min@?$numeric_limits@F@std@@SAFXZ -> public: static short __cdecl std::numeric_limits<short>::denorm_min(void) */
431 short __cdecl std_numeric_limits_short_denorm_min(void) { return 0; }
432
433 /* ?denorm_min@?$numeric_limits@G@std@@SAGXZ -> public: static unsigned short __cdecl std::numeric_limits<unsigned short>::denorm_min(void) */
434 unsigned short __cdecl std_numeric_limits_unsigned_short_denorm_min(void) { return 0; }
435
436 /* ?denorm_min@?$numeric_limits@H@std@@SAHXZ -> public: static int __cdecl std::numeric_limits<int>::denorm_min(void) */
437 int __cdecl std_numeric_limits_int_denorm_min(void) { return 0; }
438
439 /* ?denorm_min@?$numeric_limits@I@std@@SAIXZ -> public: static unsigned int __cdecl std::numeric_limits<unsigned int>::denorm_min(void) */
440 unsigned int __cdecl std_numeric_limits_unsigned_int_denorm_min(void) { return 0; }
441
442 /* ?denorm_min@?$numeric_limits@J@std@@SAJXZ -> public: static long __cdecl std::numeric_limits<long>::denorm_min(void) */
443 LONG __cdecl std_numeric_limits_long_denorm_min(void) { return 0; }
444
445 /* ?denorm_min@?$numeric_limits@K@std@@SAKXZ -> public: static unsigned long __cdecl std::numeric_limits<unsigned long>::denorm_min(void) */
446 ULONG __cdecl std_numeric_limits_unsigned_long_denorm_min(void) { return 0; }
447
448 /* ?denorm_min@?$numeric_limits@M@std@@SAMXZ -> public: static float __cdecl std::numeric_limits<float>::denorm_min(void) */
449 float __cdecl std_numeric_limits_float_denorm_min(void) { return *(float *)&_FDenorm; }
450
451 /* ?denorm_min@?$numeric_limits@N@std@@SANXZ -> public: static double __cdecl std::numeric_limits<double>::denorm_min(void) */
452 double __cdecl std_numeric_limits_double_denorm_min(void) { return *(double *)&_Denorm; }
453
454 /* ?denorm_min@?$numeric_limits@O@std@@SAOXZ -> public: static long double __cdecl std::numeric_limits<long double>::denorm_min(void) */
455 LDOUBLE __cdecl std_numeric_limits_long_double_denorm_min(void) { return *(LDOUBLE *)&_LDenorm; }
456
457 /* ?denorm_min@?$numeric_limits@_J@std@@SA_JXZ -> public: static __int64 __cdecl std::numeric_limits<__int64>::denorm_min(void) */
458 __int64 __cdecl std_numeric_limits_int64_denorm_min(void) { return 0; }
459
460 /* ?denorm_min@?$numeric_limits@_K@std@@SA_KXZ -> public: static unsigned __int64 __cdecl std::numeric_limits<unsigned __int64>::denorm_min(void) */
461 unsigned __int64 __cdecl std_numeric_limits_unsigned_int64_denorm_min(void) { return 0; }
462
463 /* ?denorm_min@?$numeric_limits@_N@std@@SA_NXZ -> public: static bool __cdecl std::numeric_limits<bool>::denorm_min(void) */
464 BOOLEAN __cdecl std_numeric_limits_bool_denorm_min(void) { return 0; }
465
466 /* ?denorm_min@?$numeric_limits@_W@std@@SA_WXZ -> public: static wchar_t __cdecl std::numeric_limits<wchar_t>::denorm_min(void) */
467 WCHAR __cdecl std_numeric_limits_wchar_t_denorm_min(void) { return 0; }
468
469 /* ?epsilon@?$numeric_limits@C@std@@SACXZ -> public: static signed char __cdecl std::numeric_limits<signed char>::epsilon(void) */
470 signed char __cdecl std_numeric_limits_signed_char_epsilon(void) { return 0; }
471
472 /* ?epsilon@?$numeric_limits@D@std@@SADXZ -> public: static char __cdecl std::numeric_limits<char>::epsilon(void) */
473 char __cdecl std_numeric_limits_char_epsilon(void) { return 0; }
474
475 /* ?epsilon@?$numeric_limits@E@std@@SAEXZ -> public: static unsigned char __cdecl std::numeric_limits<unsigned char>::epsilon(void) */
476 unsigned char __cdecl std_numeric_limits_unsigned_char_epsilon(void) { return 0; }
477
478 /* ?epsilon@?$numeric_limits@F@std@@SAFXZ -> public: static short __cdecl std::numeric_limits<short>::epsilon(void) */
479 short __cdecl std_numeric_limits_short_epsilon(void) { return 0; }
480
481 /* ?epsilon@?$numeric_limits@G@std@@SAGXZ -> public: static unsigned short __cdecl std::numeric_limits<unsigned short>::epsilon(void) */
482 unsigned short __cdecl std_numeric_limits_unsigned_short_epsilon(void) { return 0; }
483
484 /* ?epsilon@?$numeric_limits@H@std@@SAHXZ -> public: static int __cdecl std::numeric_limits<int>::epsilon(void) */
485 int __cdecl std_numeric_limits_int_epsilon(void) { return 0; }
486
487 /* ?epsilon@?$numeric_limits@I@std@@SAIXZ -> public: static unsigned int __cdecl std::numeric_limits<unsigned int>::epsilon(void) */
488 unsigned int __cdecl std_numeric_limits_unsigned_int_epsilon(void) { return 0; }
489
490 /* ?epsilon@?$numeric_limits@J@std@@SAJXZ -> public: static long __cdecl std::numeric_limits<long>::epsilon(void) */
491 LONG __cdecl std_numeric_limits_long_epsilon(void) { return 0; }
492
493 /* ?epsilon@?$numeric_limits@K@std@@SAKXZ -> public: static unsigned long __cdecl std::numeric_limits<unsigned long>::epsilon(void) */
494 ULONG __cdecl std_numeric_limits_unsigned_long_epsilon(void) { return 0; }
495
496 /* ?epsilon@?$numeric_limits@M@std@@SAMXZ -> public: static float __cdecl std::numeric_limits<float>::epsilon(void) */
497 float __cdecl std_numeric_limits_float_epsilon(void) { return _FEps; }
498
499 /* ?epsilon@?$numeric_limits@N@std@@SANXZ -> public: static double __cdecl std::numeric_limits<double>::epsilon(void) */
500 double __cdecl std_numeric_limits_double_epsilon(void) { return _Eps; }
501
502 /* ?epsilon@?$numeric_limits@O@std@@SAOXZ -> public: static long double __cdecl std::numeric_limits<long double>::epsilon(void) */
503 LDOUBLE __cdecl std_numeric_limits_long_double_epsilon(void) { return _LEps; }
504
505 /* ?epsilon@?$numeric_limits@_J@std@@SA_JXZ -> public: static __int64 __cdecl std::numeric_limits<__int64>::epsilon(void) */
506 __int64 __cdecl std_numeric_limits_int64_epsilon(void) { return 0; }
507
508 /* ?epsilon@?$numeric_limits@_K@std@@SA_KXZ -> public: static unsigned __int64 __cdecl std::numeric_limits<unsigned __int64>::epsilon(void) */
509 unsigned __int64 __cdecl std_numeric_limits_unsigned_int64_epsilon(void) { return 0; }
510
511 /* ?epsilon@?$numeric_limits@_N@std@@SA_NXZ -> public: static bool __cdecl std::numeric_limits<bool>::epsilon(void) */
512 BOOLEAN __cdecl std_numeric_limits_bool_epsilon(void) { return 0; }
513
514 /* ?epsilon@?$numeric_limits@_W@std@@SA_WXZ -> public: static wchar_t __cdecl std::numeric_limits<wchar_t>::epsilon(void) */
515 WCHAR __cdecl std_numeric_limits_wchar_t_epsilon(void) { return 0; }
516
517 /* ?infinity@?$numeric_limits@C@std@@SACXZ -> public: static signed char __cdecl std::numeric_limits<signed char>::infinity(void) */
518 signed char __cdecl std_numeric_limits_signed_char_infinity(void) { return 0; }
519
520 /* ?infinity@?$numeric_limits@D@std@@SADXZ -> public: static char __cdecl std::numeric_limits<char>::infinity(void) */
521 char __cdecl std_numeric_limits_char_infinity(void) { return 0; }
522
523 /* ?infinity@?$numeric_limits@E@std@@SAEXZ -> public: static unsigned char __cdecl std::numeric_limits<unsigned char>::infinity(void) */
524 unsigned char __cdecl std_numeric_limits_unsigned_char_infinity(void) { return 0; }
525
526 /* ?infinity@?$numeric_limits@F@std@@SAFXZ -> public: static short __cdecl std::numeric_limits<short>::infinity(void) */
527 short __cdecl std_numeric_limits_short_infinity(void) { return 0; }
528
529 /* ?infinity@?$numeric_limits@G@std@@SAGXZ -> public: static unsigned short __cdecl std::numeric_limits<unsigned short>::infinity(void) */
530 unsigned short __cdecl std_numeric_limits_unsigned_short_infinity(void) { return 0; }
531
532 /* ?infinity@?$numeric_limits@H@std@@SAHXZ -> public: static int __cdecl std::numeric_limits<int>::infinity(void) */
533 int __cdecl std_numeric_limits_int_infinity(void) { return 0; }
534
535 /* ?infinity@?$numeric_limits@I@std@@SAIXZ -> public: static unsigned int __cdecl std::numeric_limits<unsigned int>::infinity(void) */
536 unsigned int __cdecl std_numeric_limits_unsigned_int_infinity(void) { return 0; }
537
538 /* ?infinity@?$numeric_limits@J@std@@SAJXZ -> public: static long __cdecl std::numeric_limits<long>::infinity(void) */
539 LONG __cdecl std_numeric_limits_long_infinity(void) { return 0; }
540
541 /* ?infinity@?$numeric_limits@K@std@@SAKXZ -> public: static unsigned long __cdecl std::numeric_limits<unsigned long>::infinity(void) */
542 ULONG __cdecl std_numeric_limits_unsigned_long_infinity(void) { return 0; }
543
544 /* ?infinity@?$numeric_limits@M@std@@SAMXZ -> public: static float __cdecl std::numeric_limits<float>::infinity(void) */
545 float __cdecl std_numeric_limits_float_infinity(void) { return *(float *)&_FInf; }
546
547 /* ?infinity@?$numeric_limits@N@std@@SANXZ -> public: static double __cdecl std::numeric_limits<double>::infinity(void) */
548 double __cdecl std_numeric_limits_double_infinity(void) { return *(double *)&_Inf; }
549
550 /* ?infinity@?$numeric_limits@O@std@@SAOXZ -> public: static long double __cdecl std::numeric_limits<long double>::infinity(void) */
551 LDOUBLE __cdecl std_numeric_limits_long_double_infinity(void) { return *(LDOUBLE *)&_LInf; }
552
553 /* ?infinity@?$numeric_limits@_J@std@@SA_JXZ -> public: static __int64 __cdecl std::numeric_limits<__int64>::infinity(void) */
554 __int64 __cdecl std_numeric_limits_int64_infinity(void) { return 0; }
555
556 /* ?infinity@?$numeric_limits@_K@std@@SA_KXZ -> public: static unsigned __int64 __cdecl std::numeric_limits<unsigned __int64>::infinity(void) */
557 unsigned __int64 __cdecl std_numeric_limits_unsigned_int64_infinity(void) { return 0; }
558
559 /* ?infinity@?$numeric_limits@_N@std@@SA_NXZ -> public: static bool __cdecl std::numeric_limits<bool>::infinity(void) */
560 BOOLEAN __cdecl std_numeric_limits_bool_infinity(void) { return 0; }
561
562 /* ?infinity@?$numeric_limits@_W@std@@SA_WXZ -> public: static wchar_t __cdecl std::numeric_limits<wchar_t>::infinity(void) */
563 WCHAR __cdecl std_numeric_limits_wchar_t_infinity(void) { return 0; }
564
565 /* ?max@?$numeric_limits@C@std@@SACXZ -> public: static signed char __cdecl std::numeric_limits<signed char>::max(void) */
566 signed char __cdecl std_numeric_limits_signed_char_max(void) { return SCHAR_MAX; }
567
568 /* ?max@?$numeric_limits@D@std@@SADXZ -> public: static char __cdecl std::numeric_limits<char>::max(void) */
569 char __cdecl std_numeric_limits_char_max(void) { return CHAR_MAX; }
570
571 /* ?max@?$numeric_limits@E@std@@SAEXZ -> public: static unsigned char __cdecl std::numeric_limits<unsigned char>::max(void) */
572 unsigned char __cdecl std_numeric_limits_unsigned_char_max(void) { return UCHAR_MAX; }
573
574 /* ?max@?$numeric_limits@F@std@@SAFXZ -> public: static short __cdecl std::numeric_limits<short>::max(void) */
575 short __cdecl std_numeric_limits_short_max(void) { return SHRT_MAX; }
576
577 /* ?max@?$numeric_limits@G@std@@SAGXZ -> public: static unsigned short __cdecl std::numeric_limits<unsigned short>::max(void) */
578 unsigned short __cdecl std_numeric_limits_unsigned_short_max(void) { return USHRT_MAX; }
579
580 /* ?max@?$numeric_limits@H@std@@SAHXZ -> public: static int __cdecl std::numeric_limits<int>::max(void) */
581 int __cdecl std_numeric_limits_int_max(void) { return INT_MAX; }
582
583 /* ?max@?$numeric_limits@I@std@@SAIXZ -> public: static unsigned int __cdecl std::numeric_limits<unsigned int>::max(void) */
584 unsigned int __cdecl std_numeric_limits_unsigned_int_max(void) { return UINT_MAX; }
585
586 /* ?max@?$numeric_limits@J@std@@SAJXZ -> public: static long __cdecl std::numeric_limits<long>::max(void) */
587 LONG __cdecl std_numeric_limits_long_max(void) { return LONG_MAX; }
588
589 /* ?max@?$numeric_limits@K@std@@SAKXZ -> public: static unsigned long __cdecl std::numeric_limits<unsigned long>::max(void) */
590 ULONG __cdecl std_numeric_limits_unsigned_long_max(void) { return ULONG_MAX; }
591
592 /* ?max@?$numeric_limits@M@std@@SAMXZ -> public: static float __cdecl std::numeric_limits<float>::max(void) */
593 float __cdecl std_numeric_limits_float_max(void) { return FLT_MAX; }
594
595 /* ?max@?$numeric_limits@N@std@@SANXZ -> public: static double __cdecl std::numeric_limits<double>::max(void) */
596 double __cdecl std_numeric_limits_double_max(void) { return DBL_MAX; }
597
598 /* ?max@?$numeric_limits@O@std@@SAOXZ -> public: static long double __cdecl std::numeric_limits<long double>::max(void) */
599 LDOUBLE __cdecl std_numeric_limits_long_double_max(void) { return LDBL_MAX; }
600
601 /* ?max@?$numeric_limits@_J@std@@SA_JXZ -> public: static __int64 __cdecl std::numeric_limits<__int64>::max(void) */
602 __int64 __cdecl std_numeric_limits_int64_max(void) { return I64_MAX; }
603
604 /* ?max@?$numeric_limits@_K@std@@SA_KXZ -> public: static unsigned __int64 __cdecl std::numeric_limits<unsigned __int64>::max(void) */
605 unsigned __int64 __cdecl std_numeric_limits_unsigned_int64_max(void) { return UI64_MAX; }
606
607 /* ?max@?$numeric_limits@_N@std@@SA_NXZ -> public: static bool __cdecl std::numeric_limits<bool>::max(void) */
608 BOOLEAN __cdecl std_numeric_limits_bool_max(void) { return 1; }
609
610 /* ?max@?$numeric_limits@_W@std@@SA_WXZ -> public: static wchar_t __cdecl std::numeric_limits<wchar_t>::max(void) */
611 WCHAR __cdecl std_numeric_limits_wchar_t_max(void) { return USHRT_MAX; }
612
613 /* ?min@?$numeric_limits@C@std@@SACXZ -> public: static signed char __cdecl std::numeric_limits<signed char>::min(void) */
614 signed char __cdecl std_numeric_limits_signed_char_min(void) { return SCHAR_MIN; }
615
616 /* ?min@?$numeric_limits@D@std@@SADXZ -> public: static char __cdecl std::numeric_limits<char>::min(void) */
617 char __cdecl std_numeric_limits_char_min(void) { return CHAR_MIN; }
618
619 /* ?min@?$numeric_limits@E@std@@SAEXZ -> public: static unsigned char __cdecl std::numeric_limits<unsigned char>::min(void) */
620 unsigned char __cdecl std_numeric_limits_unsigned_char_min(void) { return 0; }
621
622 /* ?min@?$numeric_limits@F@std@@SAFXZ -> public: static short __cdecl std::numeric_limits<short>::min(void) */
623 short __cdecl std_numeric_limits_short_min(void) { return SHRT_MIN; }
624
625 /* ?min@?$numeric_limits@G@std@@SAGXZ -> public: static unsigned short __cdecl std::numeric_limits<unsigned short>::min(void) */
626 unsigned short __cdecl std_numeric_limits_unsigned_short_min(void) { return 0; }
627
628 /* ?min@?$numeric_limits@H@std@@SAHXZ -> public: static int __cdecl std::numeric_limits<int>::min(void) */
629 int __cdecl std_numeric_limits_int_min(void) { return INT_MIN; }
630
631 /* ?min@?$numeric_limits@I@std@@SAIXZ -> public: static unsigned int __cdecl std::numeric_limits<unsigned int>::min(void) */
632 unsigned int __cdecl std_numeric_limits_unsigned_int_min(void) { return 0; }
633
634 /* ?min@?$numeric_limits@J@std@@SAJXZ -> public: static long __cdecl std::numeric_limits<long>::min(void) */
635 LONG __cdecl std_numeric_limits_long_min(void) { return LONG_MIN; }
636
637 /* ?min@?$numeric_limits@K@std@@SAKXZ -> public: static unsigned long __cdecl std::numeric_limits<unsigned long>::min(void) */
638 ULONG __cdecl std_numeric_limits_unsigned_long_min(void) { return 0; }
639
640 /* ?min@?$numeric_limits@M@std@@SAMXZ -> public: static float __cdecl std::numeric_limits<float>::min(void) */
641 float __cdecl std_numeric_limits_float_min(void) { return FLT_MIN; }
642
643 /* ?min@?$numeric_limits@N@std@@SANXZ -> public: static double __cdecl std::numeric_limits<double>::min(void) */
644 double __cdecl std_numeric_limits_double_min(void) { return DBL_MIN; }
645
646 /* ?min@?$numeric_limits@O@std@@SAOXZ -> public: static long double __cdecl std::numeric_limits<long double>::min(void) */
647 LDOUBLE __cdecl std_numeric_limits_long_double_min(void) { return LDBL_MIN; }
648
649 /* ?min@?$numeric_limits@_J@std@@SA_JXZ -> public: static __int64 __cdecl std::numeric_limits<__int64>::min(void) */
650 __int64 __cdecl std_numeric_limits_int64_min(void) { return I64_MIN; }
651
652 /* ?min@?$numeric_limits@_K@std@@SA_KXZ -> public: static unsigned __int64 __cdecl std::numeric_limits<unsigned __int64>::min(void) */
653 unsigned __int64 __cdecl std_numeric_limits_unsigned_int64_min(void) { return 0; }
654
655 /* ?min@?$numeric_limits@_N@std@@SA_NXZ -> public: static bool __cdecl std::numeric_limits<bool>::min(void) */
656 BOOLEAN __cdecl std_numeric_limits_bool_min(void) { return 0; }
657
658 /* ?min@?$numeric_limits@_W@std@@SA_WXZ -> public: static wchar_t __cdecl std::numeric_limits<wchar_t>::min(void) */
659 WCHAR __cdecl std_numeric_limits_wchar_t_min(void) { return 0; }
660
661 /* ?quiet_NaN@?$numeric_limits@C@std@@SACXZ -> public: static signed char __cdecl std::numeric_limits<signed char>::quiet_NaN(void) */
662 signed char __cdecl std_numeric_limits_signed_char_quiet_NaN(void) { return 0; }
663
664 /* ?quiet_NaN@?$numeric_limits@D@std@@SADXZ -> public: static char __cdecl std::numeric_limits<char>::quiet_NaN(void) */
665 char __cdecl std_numeric_limits_char_quiet_NaN(void) { return 0; }
666
667 /* ?quiet_NaN@?$numeric_limits@E@std@@SAEXZ -> public: static unsigned char __cdecl std::numeric_limits<unsigned char>::quiet_NaN(void) */
668 unsigned char __cdecl std_numeric_limits_unsigned_char_quiet_NaN(void) { return 0; }
669
670 /* ?quiet_NaN@?$numeric_limits@F@std@@SAFXZ -> public: static short __cdecl std::numeric_limits<short>::quiet_NaN(void) */
671 short __cdecl std_numeric_limits_short_quiet_NaN(void) { return 0; }
672
673 /* ?quiet_NaN@?$numeric_limits@G@std@@SAGXZ -> public: static unsigned short __cdecl std::numeric_limits<unsigned short>::quiet_NaN(void) */
674 unsigned short __cdecl std_numeric_limits_unsigned_short_quiet_NaN(void) { return 0; }
675
676 /* ?quiet_NaN@?$numeric_limits@H@std@@SAHXZ -> public: static int __cdecl std::numeric_limits<int>::quiet_NaN(void) */
677 int __cdecl std_numeric_limits_int_quiet_NaN(void) { return 0; }
678
679 /* ?quiet_NaN@?$numeric_limits@I@std@@SAIXZ -> public: static unsigned int __cdecl std::numeric_limits<unsigned int>::quiet_NaN(void) */
680 unsigned int __cdecl std_numeric_limits_unsigned_int_quiet_NaN(void) { return 0; }
681
682 /* ?quiet_NaN@?$numeric_limits@J@std@@SAJXZ -> public: static long __cdecl std::numeric_limits<long>::quiet_NaN(void) */
683 LONG __cdecl std_numeric_limits_long_quiet_NaN(void) { return 0; }
684
685 /* ?quiet_NaN@?$numeric_limits@K@std@@SAKXZ -> public: static unsigned long __cdecl std::numeric_limits<unsigned long>::quiet_NaN(void) */
686 ULONG __cdecl std_numeric_limits_unsigned_long_quiet_NaN(void) { return 0; }
687
688 /* ?quiet_NaN@?$numeric_limits@M@std@@SAMXZ -> public: static float __cdecl std::numeric_limits<float>::quiet_NaN(void) */
689 float __cdecl std_numeric_limits_float_quiet_NaN(void) { return *(float *)&_FNan; }
690
691 /* ?quiet_NaN@?$numeric_limits@N@std@@SANXZ -> public: static double __cdecl std::numeric_limits<double>::quiet_NaN(void) */
692 double __cdecl std_numeric_limits_double_quiet_NaN(void) { return *(double *)&_Nan; }
693
694 /* ?quiet_NaN@?$numeric_limits@O@std@@SAOXZ -> public: static long double __cdecl std::numeric_limits<long double>::quiet_NaN(void) */
695 LDOUBLE __cdecl std_numeric_limits_long_double_quiet_NaN(void) { return *(LDOUBLE *)&_LNan; }
696
697 /* ?quiet_NaN@?$numeric_limits@_J@std@@SA_JXZ -> public: static __int64 __cdecl std::numeric_limits<__int64>::quiet_NaN(void) */
698 __int64 __cdecl std_numeric_limits_int64_quiet_NaN(void) { return 0; }
699
700 /* ?quiet_NaN@?$numeric_limits@_K@std@@SA_KXZ -> public: static unsigned __int64 __cdecl std::numeric_limits<unsigned __int64>::quiet_NaN(void) */
701 unsigned __int64 __cdecl std_numeric_limits_unsigned_int64_quiet_NaN(void) { return 0; }
702
703 /* ?quiet_NaN@?$numeric_limits@_N@std@@SA_NXZ -> public: static bool __cdecl std::numeric_limits<bool>::quiet_NaN(void) */
704 BOOLEAN __cdecl std_numeric_limits_bool_quiet_NaN(void) { return 0; }
705
706 /* ?quiet_NaN@?$numeric_limits@_W@std@@SA_WXZ -> public: static wchar_t __cdecl std::numeric_limits<wchar_t>::quiet_NaN(void) */
707 WCHAR __cdecl std_numeric_limits_wchar_t_quiet_NaN(void) { return 0; }
708
709 /* ?round_error@?$numeric_limits@C@std@@SACXZ -> public: static signed char __cdecl std::numeric_limits<signed char>::round_error(void) */
710 signed char __cdecl std_numeric_limits_signed_char_round_error(void) { return 0; }
711
712 /* ?round_error@?$numeric_limits@D@std@@SADXZ -> public: static char __cdecl std::numeric_limits<char>::round_error(void) */
713 char __cdecl std_numeric_limits_char_round_error(void) { return 0; }
714
715 /* ?round_error@?$numeric_limits@E@std@@SAEXZ -> public: static unsigned char __cdecl std::numeric_limits<unsigned char>::round_error(void) */
716 unsigned char __cdecl std_numeric_limits_unsigned_char_round_error(void) { return 0; }
717
718 /* ?round_error@?$numeric_limits@F@std@@SAFXZ -> public: static short __cdecl std::numeric_limits<short>::round_error(void) */
719 short __cdecl std_numeric_limits_short_round_error(void) { return 0; }
720
721 /* ?round_error@?$numeric_limits@G@std@@SAGXZ -> public: static unsigned short __cdecl std::numeric_limits<unsigned short>::round_error(void) */
722 unsigned short __cdecl std_numeric_limits_unsigned_short_round_error(void) { return 0; }
723
724 /* ?round_error@?$numeric_limits@H@std@@SAHXZ -> public: static int __cdecl std::numeric_limits<int>::round_error(void) */
725 int __cdecl std_numeric_limits_int_round_error(void) { return 0; }
726
727 /* ?round_error@?$numeric_limits@I@std@@SAIXZ -> public: static unsigned int __cdecl std::numeric_limits<unsigned int>::round_error(void) */
728 unsigned int __cdecl std_numeric_limits_unsigned_int_round_error(void) { return 0; }
729
730 /* ?round_error@?$numeric_limits@J@std@@SAJXZ -> public: static long __cdecl std::numeric_limits<long>::round_error(void) */
731 LONG __cdecl std_numeric_limits_long_round_error(void) { return 0; }
732
733 /* ?round_error@?$numeric_limits@K@std@@SAKXZ -> public: static unsigned long __cdecl std::numeric_limits<unsigned long>::round_error(void) */
734 ULONG __cdecl std_numeric_limits_unsigned_long_round_error(void) { return 0; }
735
736 /* ?round_error@?$numeric_limits@M@std@@SAMXZ -> public: static float __cdecl std::numeric_limits<float>::round_error(void) */
737 float __cdecl std_numeric_limits_float_round_error(void) { return 0.5; }
738
739 /* ?round_error@?$numeric_limits@N@std@@SANXZ -> public: static double __cdecl std::numeric_limits<double>::round_error(void) */
740 double __cdecl std_numeric_limits_double_round_error(void) { return 0.5; }
741
742 /* ?round_error@?$numeric_limits@O@std@@SAOXZ -> public: static long double __cdecl std::numeric_limits<long double>::round_error(void) */
743 LDOUBLE __cdecl std_numeric_limits_long_double_round_error(void) { return 0.5; }
744
745 /* ?round_error@?$numeric_limits@_J@std@@SA_JXZ -> public: static __int64 __cdecl std::numeric_limits<__int64>::round_error(void) */
746 __int64 __cdecl std_numeric_limits_int64_round_error(void) { return 0; }
747
748 /* ?round_error@?$numeric_limits@_K@std@@SA_KXZ -> public: static unsigned __int64 __cdecl std::numeric_limits<unsigned __int64>::round_error(void) */
749 unsigned __int64 __cdecl std_numeric_limits_unsigned_int64_round_error(void) { return 0; }
750
751 /* ?round_error@?$numeric_limits@_N@std@@SA_NXZ -> public: static bool __cdecl std::numeric_limits<bool>::round_error(void) */
752 BOOLEAN __cdecl std_numeric_limits_bool_round_error(void) { return 0; }
753
754 /* ?round_error@?$numeric_limits@_W@std@@SA_WXZ -> public: static wchar_t __cdecl std::numeric_limits<wchar_t>::round_error(void) */
755 WCHAR __cdecl std_numeric_limits_wchar_t_round_error(void) { return 0; }
756
757 /* ?signaling_NaN@?$numeric_limits@C@std@@SACXZ -> public: static signed char __cdecl std::numeric_limits<signed char>::signaling_NaN(void) */
758 signed char __cdecl std_numeric_limits_signed_char_signaling_NaN(void) { return 0; }
759
760 /* ?signaling_NaN@?$numeric_limits@D@std@@SADXZ -> public: static char __cdecl std::numeric_limits<char>::signaling_NaN(void) */
761 char __cdecl std_numeric_limits_char_signaling_NaN(void) { return 0; }
762
763 /* ?signaling_NaN@?$numeric_limits@E@std@@SAEXZ -> public: static unsigned char __cdecl std::numeric_limits<unsigned char>::signaling_NaN(void) */
764 unsigned char __cdecl std_numeric_limits_unsigned_char_signaling_NaN(void) { return 0; }
765
766 /* ?signaling_NaN@?$numeric_limits@F@std@@SAFXZ -> public: static short __cdecl std::numeric_limits<short>::signaling_NaN(void) */
767 short __cdecl std_numeric_limits_short_signaling_NaN(void) { return 0; }
768
769 /* ?signaling_NaN@?$numeric_limits@G@std@@SAGXZ -> public: static unsigned short __cdecl std::numeric_limits<unsigned short>::signaling_NaN(void) */
770 unsigned short __cdecl std_numeric_limits_unsigned_short_signaling_NaN(void) { return 0; }
771
772 /* ?signaling_NaN@?$numeric_limits@H@std@@SAHXZ -> public: static int __cdecl std::numeric_limits<int>::signaling_NaN(void) */
773 int __cdecl std_numeric_limits_int_signaling_NaN(void) { return 0; }
774
775 /* ?signaling_NaN@?$numeric_limits@I@std@@SAIXZ -> public: static unsigned int __cdecl std::numeric_limits<unsigned int>::signaling_NaN(void) */
776 unsigned int __cdecl std_numeric_limits_unsigned_int_signaling_NaN(void) { return 0; }
777
778 /* ?signaling_NaN@?$numeric_limits@J@std@@SAJXZ -> public: static long __cdecl std::numeric_limits<long>::signaling_NaN(void) */
779 LONG __cdecl std_numeric_limits_long_signaling_NaN(void) { return 0; }
780
781 /* ?signaling_NaN@?$numeric_limits@K@std@@SAKXZ -> public: static unsigned long __cdecl std::numeric_limits<unsigned long>::signaling_NaN(void) */
782 ULONG __cdecl std_numeric_limits_unsigned_long_signaling_NaN(void) { return 0; }
783
784 /* ?signaling_NaN@?$numeric_limits@M@std@@SAMXZ -> public: static float __cdecl std::numeric_limits<float>::signaling_NaN(void) */
785 float __cdecl std_numeric_limits_float_signaling_NaN(void) { return *(float *)&_FSnan; }
786
787 /* ?signaling_NaN@?$numeric_limits@N@std@@SANXZ -> public: static double __cdecl std::numeric_limits<double>::signaling_NaN(void) */
788 double __cdecl std_numeric_limits_double_signaling_NaN(void) { return *(double *)&_Snan; }
789
790 /* ?signaling_NaN@?$numeric_limits@O@std@@SAOXZ -> public: static long double __cdecl std::numeric_limits<long double>::signaling_NaN(void) */
791 LDOUBLE __cdecl std_numeric_limits_long_double_signaling_NaN(void) { return *(LDOUBLE *)&_LSnan; }
792
793 /* ?signaling_NaN@?$numeric_limits@_J@std@@SA_JXZ -> public: static __int64 __cdecl std::numeric_limits<__int64>::signaling_NaN(void) */
794 __int64 __cdecl std_numeric_limits_int64_signaling_NaN(void) { return 0; }
795
796 /* ?signaling_NaN@?$numeric_limits@_K@std@@SA_KXZ -> public: static unsigned __int64 __cdecl std::numeric_limits<unsigned __int64>::signaling_NaN(void) */
797 unsigned __int64 __cdecl std_numeric_limits_unsigned_int64_signaling_NaN(void) { return 0; }
798
799 /* ?signaling_NaN@?$numeric_limits@_N@std@@SA_NXZ -> public: static bool __cdecl std::numeric_limits<bool>::signaling_NaN(void) */
800 BOOLEAN __cdecl std_numeric_limits_bool_signaling_NaN(void) { return 0; }
801
802 /* ?signaling_NaN@?$numeric_limits@_W@std@@SA_WXZ -> public: static wchar_t __cdecl std::numeric_limits<wchar_t>::signaling_NaN(void) */
803 WCHAR __cdecl std_numeric_limits_wchar_t_signaling_NaN(void) { return 0; }
804
805 /* ??4?$_Ctraits@M@std@@QAEAAV01@ABV01@@Z -> public: class std::_Ctraits<float> & __thiscall std::_Ctraits<float>::operator=(class std::_Ctraits<float> const &) */
806 /* ??4?$_Ctraits@M@std@@QEAAAEAV01@AEBV01@@Z -> public: class std::_Ctraits<float> & __ptr64 __cdecl std::_Ctraits<float>::operator=(class std::_Ctraits<float> const & __ptr64) __ptr64 */
807 /* ??4?$_Ctraits@N@std@@QAEAAV01@ABV01@@Z -> public: class std::_Ctraits<double> & __thiscall std::_Ctraits<double>::operator=(class std::_Ctraits<double> const &) */
808 /* ??4?$_Ctraits@N@std@@QEAAAEAV01@AEBV01@@Z -> public: class std::_Ctraits<double> & __ptr64 __cdecl std::_Ctraits<double>::operator=(class std::_Ctraits<double> const & __ptr64) __ptr64 */
809 /* ??4?$_Ctraits@O@std@@QAEAAV01@ABV01@@Z -> public: class std::_Ctraits<long double> & __thiscall std::_Ctraits<long double>::operator=(class std::_Ctraits<long double> const &) */
810 /* ??4?$_Ctraits@O@std@@QEAAAEAV01@AEBV01@@Z -> public: class std::_Ctraits<long double> & __ptr64 __cdecl std::_Ctraits<long double>::operator=(class std::_Ctraits<long double> const & __ptr64) __ptr64 */
811 DEFINE_THISCALL_WRAPPER( std_Ctraits_op_assign, 8 )
812 std_Ctraits * __thiscall std_Ctraits_op_assign( std_Ctraits *this, std_Ctraits *right )
813 {
814     return this;
815 }
816
817 /* ?atan2@?$_Ctraits@M@std@@SAMMM@Z -> public: static float __cdecl std::_Ctraits<float>::atan2(float,float) */
818 float __cdecl std_Ctraits_float_atan2( float y, float x ) { return atan2f( y, x ); }
819
820 /* ?atan2@?$_Ctraits@N@std@@SANNN@Z -> public: static double __cdecl std::_Ctraits<double>::atan2(double,double) */
821 double __cdecl std_Ctraits_double_atan2( double y, double x ) { return atan2( y, x ); }
822
823 /* ?atan2@?$_Ctraits@O@std@@SAOOO@Z -> public: static long double __cdecl std::_Ctraits<long double>::atan2(long double,long double) */
824 LDOUBLE __cdecl std_Ctraits_long_double_atan2( LDOUBLE y, LDOUBLE x ) { return atan2( y, x ); }
825
826 /* ?cos@?$_Ctraits@M@std@@SAMM@Z -> public: static float __cdecl std::_Ctraits<float>::cos(float) */
827 float __cdecl std_Ctraits_float_cos( float x ) { return cosf( x ); }
828
829 /* ?cos@?$_Ctraits@N@std@@SANN@Z -> public: static double __cdecl std::_Ctraits<double>::cos(double) */
830 double __cdecl std_Ctraits_double_cos( double x ) { return cos( x ); }
831
832 /* ?cos@?$_Ctraits@O@std@@SAOO@Z -> public: static long double __cdecl std::_Ctraits<long double>::cos(long double) */
833 LDOUBLE __cdecl std_Ctraits_long_double_cos( LDOUBLE x ) { return cos( x ); }
834
835 /* ?exp@?$_Ctraits@M@std@@SAMM@Z -> public: static float __cdecl std::_Ctraits<float>::exp(float) */
836 float __cdecl std_Ctraits_float_exp( float x ) { return expf( x ); }
837
838 /* ?exp@?$_Ctraits@N@std@@SANN@Z -> public: static double __cdecl std::_Ctraits<double>::exp(double) */
839 double __cdecl std_Ctraits_double_exp( double x ) { return exp( x ); }
840
841 /* ?exp@?$_Ctraits@O@std@@SAOO@Z -> public: static long double __cdecl std::_Ctraits<long double>::exp(long double) */
842 LDOUBLE __cdecl std_Ctraits_long_double_exp( LDOUBLE x ) { return exp( x ); }
843
844 /* ?ldexp@?$_Ctraits@M@std@@SAMMH@Z -> public: static float __cdecl std::_Ctraits<float>::ldexp(float,int) */
845 float __cdecl std_Ctraits_float_ldexp( float x, int y ) { return ldexpf( x, y ); }
846
847 /* ?ldexp@?$_Ctraits@N@std@@SANNH@Z -> public: static double __cdecl std::_Ctraits<double>::ldexp(double,int) */
848 double __cdecl std_Ctraits_double_ldexp( double x, int y ) { return ldexp( x, y ); }
849
850 /* ?ldexp@?$_Ctraits@O@std@@SAOOH@Z -> public: static long double __cdecl std::_Ctraits<long double>::ldexp(long double,int) */
851 LDOUBLE __cdecl std_Ctraits_long_double_ldexp( LDOUBLE x, int y ) { return ldexp( x, y ); }
852
853 /* ?log@?$_Ctraits@M@std@@SAMM@Z -> public: static float __cdecl std::_Ctraits<float>::log(float) */
854 float __cdecl std_Ctraits_float_log( float x ) { return logf( x ); }
855
856 /* ?log@?$_Ctraits@N@std@@SANN@Z -> public: static double __cdecl std::_Ctraits<double>::log(double) */
857 double __cdecl std_Ctraits_double_log( double x ) { return log( x ); }
858
859 /* ?log@?$_Ctraits@O@std@@SAOO@Z -> public: static long double __cdecl std::_Ctraits<long double>::log(long double) */
860 LDOUBLE __cdecl std_Ctraits_long_double_log( LDOUBLE x ) { return log( x ); }
861
862 /* ?pow@?$_Ctraits@M@std@@SAMMM@Z -> public: static float __cdecl std::_Ctraits<float>::pow(float,float) */
863 float __cdecl std_Ctraits_float_pow( float x, float y ) { return powf( x, y ); }
864
865 /* ?pow@?$_Ctraits@N@std@@SANNN@Z -> public: static double __cdecl std::_Ctraits<double>::pow(double,double) */
866 double __cdecl std_Ctraits_double_pow( double x, double y ) { return pow( x, y ); }
867
868 /* ?pow@?$_Ctraits@O@std@@SAOOO@Z -> public: static long double __cdecl std::_Ctraits<long double>::pow(long double,long double) */
869 LDOUBLE __cdecl std_Ctraits_long_double_pow( LDOUBLE x, LDOUBLE y ) { return pow( x, y ); }
870
871 /* ?sin@?$_Ctraits@M@std@@SAMM@Z -> public: static float __cdecl std::_Ctraits<float>::sin(float) */
872 float __cdecl std_Ctraits_float_sin( float x ) { return sinf( x ); }
873
874 /* ?sin@?$_Ctraits@N@std@@SANN@Z -> public: static double __cdecl std::_Ctraits<double>::sin(double) */
875 double __cdecl std_Ctraits_double_sin( double x ) { return sin( x ); }
876
877 /* ?sin@?$_Ctraits@O@std@@SAOO@Z -> public: static long double __cdecl std::_Ctraits<long double>::sin(long double) */
878 LDOUBLE __cdecl std_Ctraits_long_double_sin( LDOUBLE x ) { return sin( x ); }
879
880 /* ?sqrt@?$_Ctraits@M@std@@SAMM@Z -> public: static float __cdecl std::_Ctraits<float>::sqrt(float) */
881 float __cdecl std_Ctraits_float_sqrt( float x ) { return sqrtf( x ); }
882
883 /* ?sqrt@?$_Ctraits@N@std@@SANN@Z -> public: static double __cdecl std::_Ctraits<double>::sqrt(double) */
884 double __cdecl std_Ctraits_double_sqrt( double x ) { return sqrt( x ); }
885
886 /* ?sqrt@?$_Ctraits@O@std@@SAOO@Z -> public: static long double __cdecl std::_Ctraits<long double>::sqrt(long double) */
887 LDOUBLE __cdecl std_Ctraits_long_double_sqrt( LDOUBLE x ) { return sqrt( x ); }
888
889 /* ?tan@?$_Ctraits@M@std@@SAMM@Z -> public: static float __cdecl std::_Ctraits<float>::tan(float) */
890 float __cdecl std_Ctraits_float_tan( float x ) { return tanf( x ); }
891
892 /* ?tan@?$_Ctraits@N@std@@SANN@Z -> public: static double __cdecl std::_Ctraits<double>::tan(double) */
893 double __cdecl std_Ctraits_double_tan( double x ) { return tan( x ); }
894
895 /* ?tan@?$_Ctraits@O@std@@SAOO@Z -> public: static long double __cdecl std::_Ctraits<long double>::tan(long double) */
896 LDOUBLE __cdecl std_Ctraits_long_double_tan( LDOUBLE x ) { return tan( x ); }
897
898 /* ??0?$_Complex_base@MU_C_float_complex@@@std@@QAE@ABM0@Z */
899 /* ??0?$_Complex_base@MU_C_float_complex@@@std@@QEAA@AEBM0@Z */
900 /* ??0?$complex@M@std@@QAE@ABM0@Z */
901 /* ??0?$complex@M@std@@QEAA@AEBM0@Z */
902 DEFINE_THISCALL_WRAPPER(complex_float_ctor, 12)
903 complex_float* __thiscall complex_float_ctor(complex_float *this, const float *real, const float *imag)
904 {
905     this->real = *real;
906     this->imag = *imag;
907     return this;
908 }
909
910 /* ??0?$complex@M@std@@QAE@ABU_C_float_complex@@@Z */
911 /* ??0?$complex@M@std@@QEAA@AEBU_C_float_complex@@@Z */
912 DEFINE_THISCALL_WRAPPER(complex_float_ctor_float, 8)
913 complex_float* __thiscall complex_float_ctor_float(complex_float *this, const complex_float *c)
914 {
915     this->real = c->real;
916     this->imag = c->imag;
917     return this;
918 }
919
920 /* ??0?$complex@M@std@@QAE@ABU_C_double_complex@@@Z */
921 /* ??0?$complex@M@std@@QEAA@AEBU_C_double_complex@@@Z */
922 /* ??0?$complex@M@std@@QAE@ABU_C_ldouble_complex@@@Z */
923 /* ??0?$complex@M@std@@QEAA@AEBU_C_ldouble_complex@@@Z */
924 /* ??0?$complex@M@std@@QAE@ABV?$complex@N@1@@Z */
925 /* ??0?$complex@M@std@@QEAA@AEBV?$complex@N@1@@Z */
926 /* ??0?$complex@M@std@@QAE@ABV?$complex@O@1@@Z */
927 /* ??0?$complex@M@std@@QEAA@AEBV?$complex@O@1@@Z */
928 DEFINE_THISCALL_WRAPPER(complex_float_ctor_double, 8)
929 complex_float* __thiscall complex_float_ctor_double(complex_float *this, const complex_double *c)
930 {
931     this->real = c->real;
932     this->imag = c->imag;
933     return this;
934 }
935
936 /* ??_F?$complex@M@std@@QAEXXZ */
937 /* ??_F?$complex@M@std@@QEAAXXZ */
938 DEFINE_THISCALL_WRAPPER(complex_float_ctor_def, 4)
939 complex_float* __thiscall complex_float_ctor_def(complex_float *this)
940 {
941     this->real = this->imag = 0;
942     return this;
943 }
944
945 /* ??$?8M@std@@YA_NABMABV?$complex@M@0@@Z */
946 /* ??$?8M@std@@YA_NAEBMAEBV?$complex@M@0@@Z */
947 MSVCP_bool __cdecl complex_float_equal_fc(const float *l, const complex_float *r)
948 {
949     return *l==r->real && r->imag==0;
950 }
951
952 /* ??$?8M@std@@YA_NABV?$complex@M@0@0@Z */
953 /* ??$?8M@std@@YA_NAEBV?$complex@M@0@0@Z */
954 MSVCP_bool __cdecl complex_float_equal(const complex_float *l, const complex_float *r)
955 {
956     return l->real==r->real && l->imag==r->imag;
957 }
958
959 /* ??$?8M@std@@YA_NABV?$complex@M@0@ABM@Z */
960 /* ??$?8M@std@@YA_NAEBV?$complex@M@0@AEBM@Z */
961 MSVCP_bool __cdecl complex_float_equal_cf(const complex_float *l, const float *r)
962 {
963     return l->real==*r && l->imag==0;
964 }
965
966 /* ??$?9M@std@@YA_NABMABV?$complex@M@0@@Z */
967 /* ??$?9M@std@@YA_NAEBMAEBV?$complex@M@0@@Z */
968 MSVCP_bool __cdecl complex_float_not_equal_fc(const float *l, const complex_float *r)
969 {
970     return !complex_float_equal_fc(l, r);
971 }
972
973 /* ??$?9M@std@@YA_NABV?$complex@M@0@0@Z */
974 /* ??$?9M@std@@YA_NAEBV?$complex@M@0@0@Z */
975 MSVCP_bool __cdecl complex_float_not_equal(const complex_float *l, const complex_float *r)
976 {
977     return !complex_float_equal(l, r);
978 }
979
980 /* ??$?9M@std@@YA_NABV?$complex@M@0@ABM@Z */
981 /* ??$?9M@std@@YA_NAEBV?$complex@M@0@AEBM@Z */
982 MSVCP_bool __cdecl complex_float_not_equal_cf(const complex_float *l, const float *r)
983 {
984     return !complex_float_equal_cf(l, r);
985 }
986
987 /* ??$?DM@std@@YA?AV?$complex@M@0@ABMABV10@@Z */
988 /* ??$?DM@std@@YA?AV?$complex@M@0@AEBMAEBV10@@Z */
989 complex_float* __cdecl complex_float_mult_fc(complex_float *ret, const float *l, const complex_float *r)
990 {
991     ret->real = *l * r->real;
992     ret->imag = *l * r->imag;
993     return ret;
994 }
995
996 /* ??$?DM@std@@YA?AV?$complex@M@0@ABV10@0@Z */
997 /* ??$?DM@std@@YA?AV?$complex@M@0@AEBV10@0@Z */
998 complex_float* __cdecl complex_float_mult(complex_float *ret, const complex_float *l, const complex_float *r)
999 {
1000     ret->real = l->real*r->real - l->imag*r->imag;
1001     ret->imag = l->imag*r->real + l->real*r->imag;
1002     return ret;
1003 }
1004
1005 /* ??$?DM@std@@YA?AV?$complex@M@0@ABV10@ABM@Z */
1006 /* ??$?DM@std@@YA?AV?$complex@M@0@AEBV10@AEBM@Z */
1007 complex_float* __cdecl complex_float_mult_cf(complex_float *ret, const complex_float *l, const float *r)
1008 {
1009     ret->real = l->real * *r;
1010     ret->imag = l->imag * *r;
1011     return ret;
1012 }
1013
1014 /* ??$?GM@std@@YA?AV?$complex@M@0@ABMABV10@@Z */
1015 /* ??$?GM@std@@YA?AV?$complex@M@0@AEBMAEBV10@@Z */
1016 complex_float* __cdecl complex_float_sub_fc(complex_float *ret, const float *l, const complex_float *r)
1017 {
1018     ret->real = *l - r->real;
1019     ret->imag = -r->imag;
1020     return ret;
1021 }
1022
1023 /* ??$?GM@std@@YA?AV?$complex@M@0@ABV10@0@Z */
1024 /* ??$?GM@std@@YA?AV?$complex@M@0@AEBV10@0@Z */
1025 complex_float* __cdecl complex_float_sub(complex_float *ret, const complex_float *l, const complex_float *r)
1026 {
1027     ret->real = l->real - r->real;
1028     ret->imag = l->imag - r->imag;
1029     return ret;
1030 }
1031
1032 /* ??$?GM@std@@YA?AV?$complex@M@0@ABV10@@Z */
1033 /* ??$?GM@std@@YA?AV?$complex@M@0@AEBV10@@Z */
1034 complex_float* __cdecl complex_float_neg(complex_float *ret, const complex_float *c)
1035 {
1036     ret->real = -c->real;
1037     ret->imag = -c->imag;
1038     return ret;
1039 }
1040
1041 /* ??$?GM@std@@YA?AV?$complex@M@0@ABV10@ABM@Z */
1042 /* ??$?GM@std@@YA?AV?$complex@M@0@AEBV10@AEBM@Z */
1043 complex_float* __cdecl complex_float_sub_cf(complex_float *ret, const complex_float *l, const float *r)
1044 {
1045     ret->real = l->real - *r;
1046     ret->imag = l->imag;
1047     return ret;
1048 }
1049
1050 /* ??$?HM@std@@YA?AV?$complex@M@0@ABMABV10@@Z */
1051 /* ??$?HM@std@@YA?AV?$complex@M@0@AEBMAEBV10@@Z */
1052 complex_float* __cdecl complex_float_add_fc(complex_float *ret, const float *l, const complex_float *r)
1053 {
1054     ret->real = *l + r->real;
1055     ret->imag = r->imag;
1056     return ret;
1057 }
1058
1059 /* ??$?HM@std@@YA?AV?$complex@M@0@ABV10@0@Z */
1060 /* ??$?HM@std@@YA?AV?$complex@M@0@AEBV10@0@Z */
1061 complex_float* __cdecl complex_float_add(complex_float *ret, const complex_float *l, const complex_float *r)
1062 {
1063     ret->real = l->real + r->real;
1064     ret->imag = l->imag + r->imag;
1065     return ret;
1066 }
1067
1068 /* ??$?HM@std@@YA?AV?$complex@M@0@ABV10@@Z */
1069 /* ??$?HM@std@@YA?AV?$complex@M@0@AEBV10@@Z */
1070 complex_float* __cdecl complex_float_plus(complex_float *ret, const complex_float *c)
1071 {
1072     *ret = *c;
1073     return ret;
1074 }
1075
1076 /* ??$?HM@std@@YA?AV?$complex@M@0@ABV10@ABM@Z */
1077 /* ??$?HM@std@@YA?AV?$complex@M@0@AEBV10@AEBM@Z */
1078 complex_float* __cdecl complex_float_add_cf(complex_float *ret, const complex_float *l, const float *r)
1079 {
1080     ret->real = l->real + *r;
1081     ret->imag = l->imag;
1082     return ret;
1083 }
1084
1085 /* ??$?KM@std@@YA?AV?$complex@M@0@ABV10@0@Z */
1086 /* ??$?KM@std@@YA?AV?$complex@M@0@AEBV10@0@Z */
1087 complex_float* __cdecl complex_float_div(complex_float *ret, const complex_float *l, const complex_float *r)
1088 {
1089     if((!r->real && !r->imag) || _isnan(l->real) || _isnan(l->imag)
1090             || _isnan(r->real) || _isnan(r->imag)) {
1091         ret->real = std_numeric_limits_float_quiet_NaN();
1092         ret->imag = ret->real;
1093         return ret;
1094     }
1095
1096     ret->real = 0;
1097     ret->imag = 0;
1098     if(r->real) {
1099         ret->real = l->real / r->real;
1100         ret->imag = l->imag / r->real;
1101     }
1102     if(r->imag) {
1103         ret->real += l->imag / r->imag;
1104         ret->imag -= l->real / r->imag;
1105     }
1106     return ret;
1107 }
1108
1109 /* ??$?KM@std@@YA?AV?$complex@M@0@ABMABV10@@Z */
1110 /* ??$?KM@std@@YA?AV?$complex@M@0@AEBMAEBV10@@Z */
1111 complex_float* __cdecl complex_float_div_fc(complex_float *ret, const float *l, const complex_float *r)
1112 {
1113     complex_float c = {*l, 0};
1114     return complex_float_div(ret, &c, r);
1115 }
1116
1117 /* ??$?KM@std@@YA?AV?$complex@M@0@ABV10@ABM@Z */
1118 /* ??$?KM@std@@YA?AV?$complex@M@0@AEBV10@AEBM@Z */
1119 complex_float* __cdecl complex_float_div_cf(complex_float *ret, const complex_float *l, const float *r)
1120 {
1121     ret->real = l->real / *r;
1122     ret->imag = l->imag / *r;
1123     return ret;
1124 }
1125
1126 /* ??4?$_Complex_base@MU_C_float_complex@@@std@@QAEAAV01@ABV01@@Z */
1127 /* ??4?$_Complex_base@MU_C_float_complex@@@std@@QEAAAEAV01@AEBV01@@Z */
1128 /* ??4?$complex@M@std@@QAEAAV01@ABV01@@Z */
1129 /* ??4?$complex@M@std@@QEAAAEAV01@AEBV01@@Z */
1130 DEFINE_THISCALL_WRAPPER(complex_float_assign, 8)
1131 complex_float* __thiscall complex_float_assign(complex_float *this, const complex_float *r)
1132 {
1133     *this = *r;
1134     return this;
1135 }
1136
1137 /* ??4?$complex@M@std@@QAEAAV01@ABM@Z */
1138 /* ??4?$complex@M@std@@QEAAAEAV01@AEBM@Z */
1139 DEFINE_THISCALL_WRAPPER(complex_float_assign_float, 8)
1140 complex_float* __thiscall complex_float_assign_float(complex_float *this, const float *r)
1141 {
1142     this->real = *r;
1143     this->imag = 0;
1144     return this;
1145 }
1146
1147 /* ??X?$complex@M@std@@QAEAAV01@ABM@Z */
1148 /* ??X?$complex@M@std@@QEAAAEAV01@AEBM@Z */
1149 DEFINE_THISCALL_WRAPPER(complex_float_mult_assign_float, 8)
1150 complex_float* __thiscall complex_float_mult_assign_float(complex_float *this, const float *r)
1151 {
1152     this->real *= *r;
1153     this->imag *= *r;
1154     return this;
1155 }
1156
1157 /* ??X?$complex@M@std@@QAEAAV01@ABV01@@Z */
1158 /* ??X?$complex@M@std@@QEAAAEAV01@AEBV01@@Z */
1159 DEFINE_THISCALL_WRAPPER(complex_float_mult_assign, 8)
1160 complex_float* __thiscall complex_float_mult_assign(complex_float *this, const complex_float *r)
1161 {
1162     complex_float tmp = *this;
1163
1164     this->real = tmp.real*r->real - tmp.imag*r->imag;
1165     this->imag = tmp.real*r->imag + tmp.imag*r->real;
1166     return this;
1167 }
1168
1169 /* ??Y?$complex@M@std@@QAEAAV01@ABM@Z */
1170 /* ??Y?$complex@M@std@@QEAAAEAV01@AEBM@Z */
1171 DEFINE_THISCALL_WRAPPER(complex_float_add_assign_float, 8)
1172 complex_float* __thiscall complex_float_add_assign_float(complex_float *this, const float *r)
1173 {
1174     this->real += *r;
1175     return this;
1176 }
1177
1178 /* ??Y?$complex@M@std@@QAEAAV01@ABV01@@Z */
1179 /* ??Y?$complex@M@std@@QEAAAEAV01@AEBV01@@Z */
1180 DEFINE_THISCALL_WRAPPER(complex_float_add_assign, 8)
1181 complex_float* __thiscall complex_float_add_assign(complex_float *this, const complex_float *r)
1182 {
1183     this->real += r->real;
1184     this->imag += r->imag;
1185     return this;
1186 }
1187
1188 /* ??Z?$complex@M@std@@QAEAAV01@ABM@Z */
1189 /* ??Z?$complex@M@std@@QEAAAEAV01@AEBM@Z */
1190 DEFINE_THISCALL_WRAPPER(complex_float_sub_assign_float, 8)
1191 complex_float* __thiscall complex_float_sub_assign_float(complex_float *this, const float *r)
1192 {
1193     this->real -= *r;
1194     return this;
1195 }
1196
1197 /* ??Z?$complex@M@std@@QAEAAV01@ABV01@@Z */
1198 /* ??Z?$complex@M@std@@QEAAAEAV01@AEBV01@@Z */
1199 DEFINE_THISCALL_WRAPPER(complex_float_sub_assign, 8)
1200 complex_float* __thiscall complex_float_sub_assign(complex_float *this, const complex_float *r)
1201 {
1202     this->real -= r->real;
1203     this->imag -= r->imag;
1204     return this;
1205 }
1206
1207 /* ??_0?$complex@M@std@@QAEAAV01@ABM@Z */
1208 /* ??_0?$complex@M@std@@QEAAAEAV01@AEBM@Z */
1209 DEFINE_THISCALL_WRAPPER(complex_float_div_assign_float, 8)
1210 complex_float* __thiscall complex_float_div_assign_float(complex_float *this, const float *r)
1211 {
1212     this->real /= *r;
1213     this->imag /= *r;
1214     return this;
1215 }
1216
1217 /* ??_0?$complex@M@std@@QAEAAV01@ABV01@@Z */
1218 /* ??_0?$complex@M@std@@QEAAAEAV01@AEBV01@@Z */
1219 DEFINE_THISCALL_WRAPPER(complex_float_div_assign, 8)
1220 complex_float* __thiscall complex_float_div_assign(complex_float *this, const complex_float *r)
1221 {
1222     complex_float tmp = *this;
1223     return complex_float_div(this, &tmp, r);
1224 }
1225
1226 /* ??$arg@M@std@@YAMABV?$complex@M@0@@Z */
1227 /* ??$arg@M@std@@YAMAEBV?$complex@M@0@@Z */
1228 float __cdecl complex_float_arg(const complex_float *c)
1229 {
1230     return atan2(c->imag, c->real);
1231 }
1232
1233 /* ??$imag@M@std@@YAMABV?$complex@M@0@@Z */
1234 /* ??$imag@M@std@@YAMAEBV?$complex@M@0@@Z */
1235 float __cdecl complex_float_imag(const complex_float *c)
1236 {
1237     return c->imag;
1238 }
1239
1240 /* ?imag@?$_Complex_base@MU_C_float_complex@@@std@@QAEMABM@Z */
1241 /* ?imag@?$_Complex_base@MU_C_float_complex@@@std@@QEAAMAEBM@Z */
1242 DEFINE_THISCALL_WRAPPER(complex_float_imag_set, 8)
1243 float __thiscall complex_float_imag_set(complex_float *this, const float *f)
1244 {
1245     return (this->imag = *f);
1246 }
1247
1248 /* ?imag@?$_Complex_base@MU_C_float_complex@@@std@@QBEMXZ */
1249 /* ?imag@?$_Complex_base@MU_C_float_complex@@@std@@QEBAMXZ */
1250 DEFINE_THISCALL_WRAPPER(complex_float_imag_get, 4)
1251 float __thiscall complex_float_imag_get(const complex_float *this)
1252 {
1253     return this->imag;
1254 }
1255
1256 /* ??$real@M@std@@YAMABV?$complex@M@0@@Z */
1257 /* ??$real@M@std@@YAMAEBV?$complex@M@0@@Z */
1258 float __cdecl complex_float_real(const complex_float *c)
1259 {
1260     return c->real;
1261 }
1262
1263 /* ?real@?$_Complex_base@MU_C_float_complex@@@std@@QAEMABM@Z */
1264 /* ?real@?$_Complex_base@MU_C_float_complex@@@std@@QEAAMAEBM@Z */
1265 DEFINE_THISCALL_WRAPPER(complex_float_real_set, 8)
1266 float __thiscall complex_float_real_set(complex_float *this, const float *f)
1267 {
1268     return (this->real = *f);
1269 }
1270
1271 /* ?real@?$_Complex_base@MU_C_float_complex@@@std@@QBEMXZ */
1272 /* ?real@?$_Complex_base@MU_C_float_complex@@@std@@QEBAMXZ */
1273 DEFINE_THISCALL_WRAPPER(complex_float_real_get, 4)
1274 float __thiscall complex_float_real_get(const complex_float *this)
1275 {
1276     return this->real;
1277 }
1278
1279 /* ??$_Fabs@M@std@@YAMABV?$complex@M@0@PAH@Z */
1280 /* ??$_Fabs@M@std@@YAMAEBV?$complex@M@0@PEAH@Z */
1281 float __cdecl complex_float__Fabs(const complex_float *c, int *scale)
1282 {
1283     float ret;
1284
1285     ret = hypotf(c->real, c->imag);
1286     if(_isnan(ret) || ret==0) {
1287         *scale = 0;
1288     }else if(ret >= 1) {
1289         *scale = 2;
1290         ret /= 4;
1291     }else {
1292         *scale = -2;
1293         ret *= 4;
1294     }
1295
1296     return ret;
1297 }
1298
1299 /* ??$abs@M@std@@YAMABV?$complex@M@0@@Z */
1300 /* ??$abs@M@std@@YAMAEBV?$complex@M@0@@Z */
1301 float __cdecl complex_float_abs(const complex_float *c)
1302 {
1303     return hypotf(c->real, c->imag);
1304 }
1305
1306 /* ??$conj@M@std@@YA?AV?$complex@M@0@ABV10@@Z */
1307 /* ??$conj@M@std@@YA?AV?$complex@M@0@AEBV10@@Z */
1308 complex_float* __cdecl complex_float_conj(complex_float *ret, const complex_float *c)
1309 {
1310     ret->real = c->real;
1311     ret->imag = -c->imag;
1312     return ret;
1313 }
1314
1315 /* ??$cos@M@std@@YA?AV?$complex@M@0@ABV10@@Z */
1316 /* ??$cos@M@std@@YA?AV?$complex@M@0@AEBV10@@Z */
1317 complex_float* __cdecl complex_float_cos(complex_float *ret, const complex_float *c)
1318 {
1319     ret->real = cos(c->real)*cosh(c->imag);
1320     ret->imag = -sin(c->real)*sinh(c->imag);
1321     return ret;
1322 }
1323
1324 /* ??$sin@M@std@@YA?AV?$complex@M@0@ABV10@@Z */
1325 /* ??$sin@M@std@@YA?AV?$complex@M@0@AEBV10@@Z */
1326 complex_float* __cdecl complex_float_sin(complex_float *ret, const complex_float *c)
1327 {
1328     ret->real = sin(c->real)*cosh(c->imag);
1329     ret->imag = cos(c->real)*sinh(c->imag);
1330     return ret;
1331 }
1332
1333 /* ??$tan@M@std@@YA?AV?$complex@M@0@ABV10@@Z */
1334 /* ??$tan@M@std@@YA?AV?$complex@M@0@AEBV10@@Z */
1335 complex_float* __cdecl complex_float_tan(complex_float *ret, const complex_float *c)
1336 {
1337     double denom = cos(2*c->real) + cosh(2*c->imag);
1338     ret->real = sin(2*c->real) / denom;
1339     ret->imag = sinh(2*c->imag) / denom;
1340     return ret;
1341 }
1342
1343 /* ??0?$_Complex_base@NU_C_double_complex@@@std@@QAE@ABN0@Z */
1344 /* ??0?$_Complex_base@NU_C_double_complex@@@std@@QEAA@AEBN0@Z */
1345 /* ??0?$_Complex_base@OU_C_ldouble_complex@@@std@@QAE@ABO0@Z */
1346 /* ??0?$_Complex_base@OU_C_ldouble_complex@@@std@@QEAA@AEBO0@Z */
1347 /* ??0?$complex@N@std@@QAE@ABN0@Z */
1348 /* ??0?$complex@N@std@@QEAA@AEBN0@Z */
1349 /* ??0?$complex@O@std@@QAE@ABO0@Z */
1350 /* ??0?$complex@O@std@@QEAA@AEBO0@Z */
1351 DEFINE_THISCALL_WRAPPER(complex_double_ctor, 12)
1352 complex_double* __thiscall complex_double_ctor(complex_double *this, const double *real, const double *imag)
1353 {
1354     this->real = *real;
1355     this->imag = *imag;
1356     return this;
1357 }
1358
1359 /* ??0?$complex@N@std@@QAE@ABU_C_double_complex@@@Z */
1360 /* ??0?$complex@N@std@@QEAA@AEBU_C_double_complex@@@Z */
1361 /* ??0?$complex@N@std@@QAE@ABU_C_ldouble_complex@@@Z */
1362 /* ??0?$complex@N@std@@QEAA@AEBU_C_ldouble_complex@@@Z */
1363 /* ??0?$complex@N@std@@QAE@ABV?$complex@O@1@@Z */
1364 /* ??0?$complex@N@std@@QEAA@AEBV?$complex@O@1@@Z */
1365 /* ??0?$complex@O@std@@QAE@ABU_C_ldouble_complex@@@Z */
1366 /* ??0?$complex@O@std@@QEAA@AEBU_C_ldouble_complex@@@Z */
1367 /* ??0?$complex@O@std@@QAE@ABV?$complex@N@1@@Z */
1368 /* ??0?$complex@O@std@@QEAA@AEBV?$complex@N@1@@Z */
1369 DEFINE_THISCALL_WRAPPER(complex_double_ctor_double, 8)
1370 complex_double* __thiscall complex_double_ctor_double(complex_double *this, const complex_double *c)
1371 {
1372     this->real = c->real;
1373     this->imag = c->imag;
1374     return this;
1375 }
1376
1377 /* ??0?$complex@N@std@@QAE@ABV?$complex@M@1@@Z */
1378 /* ??0?$complex@N@std@@QEAA@AEBV?$complex@M@1@@Z */
1379 /* ??0?$complex@O@std@@QAE@ABV?$complex@M@1@@Z */
1380 /* ??0?$complex@O@std@@QEAA@AEBV?$complex@M@1@@Z */
1381 DEFINE_THISCALL_WRAPPER(complex_double_ctor_float, 8)
1382 complex_double* __thiscall complex_double_ctor_float(complex_double *this, const complex_float *c)
1383 {
1384     this->real = c->real;
1385     this->imag = c->imag;
1386     return this;
1387 }
1388
1389 /* ??_F?$complex@N@std@@QAEXXZ */
1390 /* ??_F?$complex@N@std@@QEAAXXZ */
1391 /* ??_F?$complex@O@std@@QAEXXZ */
1392 /* ??_F?$complex@O@std@@QEAAXXZ */
1393 DEFINE_THISCALL_WRAPPER(complex_double_ctor_def, 4)
1394 complex_double* __thiscall complex_double_ctor_def(complex_double *this)
1395 {
1396     this->real = this->imag = 0;
1397     return this;
1398 }
1399
1400 /* ??$?8N@std@@YA_NABNABV?$complex@N@0@@Z */
1401 /* ??$?8N@std@@YA_NAEBNAEBV?$complex@N@0@@Z */
1402 /* ??$?8O@std@@YA_NABOABV?$complex@O@0@@Z */
1403 /* ??$?8O@std@@YA_NAEBOAEBV?$complex@O@0@@Z */
1404 MSVCP_bool __cdecl complex_double_equal_dc(const double *l, const complex_double *r)
1405 {
1406     return *l==r->real && r->imag==0;
1407 }
1408
1409 /* ??$?8N@std@@YA_NABV?$complex@N@0@0@Z */
1410 /* ??$?8N@std@@YA_NAEBV?$complex@N@0@0@Z */
1411 /* ??$?8O@std@@YA_NABV?$complex@O@0@0@Z */
1412 /* ??$?8O@std@@YA_NAEBV?$complex@O@0@0@Z */
1413 MSVCP_bool __cdecl complex_double_equal(const complex_double *l, const complex_double *r)
1414 {
1415     return l->real==r->real && l->imag==r->imag;
1416 }
1417
1418 /* ??$?8N@std@@YA_NABV?$complex@N@0@ABN@Z */
1419 /* ??$?8N@std@@YA_NAEBV?$complex@N@0@AEBN@Z */
1420 /* ??$?8O@std@@YA_NABV?$complex@O@0@ABO@Z */
1421 /* ??$?8O@std@@YA_NAEBV?$complex@O@0@AEBO@Z */
1422 MSVCP_bool __cdecl complex_double_equal_cd(const complex_double *l, double *r)
1423 {
1424     return l->real==*r && l->imag==0;
1425 }
1426
1427 /* ??$?9N@std@@YA_NABNABV?$complex@N@0@@Z */
1428 /* ??$?9N@std@@YA_NAEBNAEBV?$complex@N@0@@Z */
1429 /* ??$?9O@std@@YA_NABOABV?$complex@O@0@@Z */
1430 /* ??$?9O@std@@YA_NAEBOAEBV?$complex@O@0@@Z */
1431 MSVCP_bool __cdecl complex_double_not_equal_dc(const double *l, const complex_double *r)
1432 {
1433     return !complex_double_equal_dc(l, r);
1434 }
1435
1436 /* ??$?9N@std@@YA_NABV?$complex@N@0@0@Z */
1437 /* ??$?9N@std@@YA_NAEBV?$complex@N@0@0@Z */
1438 /* ??$?9O@std@@YA_NABV?$complex@O@0@0@Z */
1439 /* ??$?9O@std@@YA_NAEBV?$complex@O@0@0@Z */
1440 MSVCP_bool __cdecl complex_double_not_equal(const complex_double *l, const complex_double *r)
1441 {
1442     return !complex_double_equal(l, r);
1443 }
1444
1445 /* ??$?9N@std@@YA_NABV?$complex@N@0@ABN@Z */
1446 /* ??$?9N@std@@YA_NAEBV?$complex@N@0@AEBN@Z */
1447 /* ??$?9O@std@@YA_NABV?$complex@O@0@ABO@Z */
1448 /* ??$?9O@std@@YA_NAEBV?$complex@O@0@AEBO@Z */
1449 MSVCP_bool __cdecl complex_double_not_equal_cd(const complex_double *l, double *r)
1450 {
1451     return !complex_double_equal_cd(l, r);
1452 }
1453
1454 /* ??$?DN@std@@YA?AV?$complex@N@0@ABNABV10@@Z */
1455 /* ??$?DN@std@@YA?AV?$complex@N@0@AEBNAEBV10@@Z */
1456 /* ??$?DO@std@@YA?AV?$complex@O@0@ABOABV10@@Z */
1457 /* ??$?DO@std@@YA?AV?$complex@O@0@AEBOAEBV10@@Z */
1458 complex_double* __cdecl complex_double_mult_dc(complex_double *ret, const double *l, const complex_double *r)
1459 {
1460     ret->real = *l * r->real;
1461     ret->imag = *l * r->imag;
1462     return ret;
1463 }
1464
1465 /* ??$?DN@std@@YA?AV?$complex@N@0@ABV10@0@Z */
1466 /* ??$?DN@std@@YA?AV?$complex@N@0@AEBV10@0@Z */
1467 /* ??$?DO@std@@YA?AV?$complex@O@0@ABV10@0@Z */
1468 /* ??$?DO@std@@YA?AV?$complex@O@0@AEBV10@0@Z */
1469 complex_double* __cdecl complex_double_mult(complex_double *ret, const complex_double *l, const complex_double *r)
1470 {
1471     ret->real = l->real*r->real - l->imag*r->imag;
1472     ret->imag = l->imag*r->real + l->real*r->imag;
1473     return ret;
1474 }
1475
1476 /* ??$?DN@std@@YA?AV?$complex@N@0@ABV10@ABN@Z */
1477 /* ??$?DN@std@@YA?AV?$complex@N@0@AEBV10@AEBN@Z */
1478 /* ??$?DO@std@@YA?AV?$complex@O@0@ABV10@ABO@Z */
1479 /* ??$?DO@std@@YA?AV?$complex@O@0@AEBV10@AEBO@Z */
1480 complex_double* __cdecl complex_double_mult_cd(complex_double *ret, const complex_double *l, double *r)
1481 {
1482     ret->real = l->real * *r;
1483     ret->imag = l->imag * *r;
1484     return ret;
1485 }
1486
1487 /* ??$?GN@std@@YA?AV?$complex@N@0@ABNABV10@@Z */
1488 /* ??$?GN@std@@YA?AV?$complex@N@0@AEBNAEBV10@@Z */
1489 /* ??$?GO@std@@YA?AV?$complex@O@0@ABOABV10@@Z */
1490 /* ??$?GO@std@@YA?AV?$complex@O@0@AEBOAEBV10@@Z */
1491 complex_double* __cdecl complex_double_sub_dc(complex_double *ret, const double *l, const complex_double *r)
1492 {
1493     ret->real = *l - r->real;
1494     ret->imag = -r->imag;
1495     return ret;
1496 }
1497
1498 /* ??$?GN@std@@YA?AV?$complex@N@0@ABV10@0@Z */
1499 /* ??$?GN@std@@YA?AV?$complex@N@0@AEBV10@0@Z */
1500 /* ??$?GO@std@@YA?AV?$complex@O@0@ABV10@0@Z */
1501 /* ??$?GO@std@@YA?AV?$complex@O@0@AEBV10@0@Z */
1502 complex_double* __cdecl complex_double_sub(complex_double *ret, const complex_double *l, const complex_double *r)
1503 {
1504     ret->real = l->real - r->real;
1505     ret->imag = l->imag - r->imag;
1506     return ret;
1507 }
1508
1509 /* ??$?GN@std@@YA?AV?$complex@N@0@ABV10@@Z */
1510 /* ??$?GN@std@@YA?AV?$complex@N@0@AEBV10@@Z */
1511 /* ??$?GO@std@@YA?AV?$complex@O@0@ABV10@@Z */
1512 /* ??$?GO@std@@YA?AV?$complex@O@0@AEBV10@@Z */
1513 complex_double* __cdecl complex_double_neg(complex_double *ret, const complex_double *c)
1514 {
1515     ret->real = -c->real;
1516     ret->imag = -c->imag;
1517     return ret;
1518 }
1519
1520 /* ??$?GN@std@@YA?AV?$complex@N@0@ABV10@ABN@Z */
1521 /* ??$?GN@std@@YA?AV?$complex@N@0@AEBV10@AEBN@Z */
1522 /* ??$?GO@std@@YA?AV?$complex@O@0@ABV10@ABO@Z */
1523 /* ??$?GO@std@@YA?AV?$complex@O@0@AEBV10@AEBO@Z */
1524 complex_double* __cdecl complex_double_sub_cd(complex_double *ret, const complex_double *l, double *r)
1525 {
1526     ret->real = l->real - *r;
1527     ret->imag = l->imag;
1528     return ret;
1529 }
1530
1531 /* ??$?HN@std@@YA?AV?$complex@N@0@ABNABV10@@Z */
1532 /* ??$?HN@std@@YA?AV?$complex@N@0@AEBNAEBV10@@Z */
1533 /* ??$?HO@std@@YA?AV?$complex@O@0@ABOABV10@@Z */
1534 /* ??$?HO@std@@YA?AV?$complex@O@0@AEBOAEBV10@@Z */
1535 complex_double* __cdecl complex_double_add_dc(complex_double *ret, const double *l, const complex_double *r)
1536 {
1537     ret->real = *l + r->real;
1538     ret->imag = r->imag;
1539     return ret;
1540 }
1541
1542 /* ??$?HN@std@@YA?AV?$complex@N@0@ABV10@0@Z */
1543 /* ??$?HN@std@@YA?AV?$complex@N@0@AEBV10@0@Z */
1544 /* ??$?HO@std@@YA?AV?$complex@O@0@ABV10@0@Z */
1545 /* ??$?HO@std@@YA?AV?$complex@O@0@AEBV10@0@Z */
1546 complex_double* __cdecl complex_double_add(complex_double *ret, const complex_double *l, const complex_double *r)
1547 {
1548     ret->real = l->real + r->real;
1549     ret->imag = l->imag + r->imag;
1550     return ret;
1551 }
1552
1553 /* ??$?HN@std@@YA?AV?$complex@N@0@ABV10@@Z */
1554 /* ??$?HN@std@@YA?AV?$complex@N@0@AEBV10@@Z */
1555 /* ??$?HO@std@@YA?AV?$complex@O@0@ABV10@@Z */
1556 /* ??$?HO@std@@YA?AV?$complex@O@0@AEBV10@@Z */
1557 complex_double* __cdecl complex_double_plus(complex_double *ret, const complex_double *c)
1558 {
1559     *ret = *c;
1560     return ret;
1561 }
1562
1563 /* ??$?HN@std@@YA?AV?$complex@N@0@ABV10@ABN@Z */
1564 /* ??$?HN@std@@YA?AV?$complex@N@0@AEBV10@AEBN@Z */
1565 /* ??$?HO@std@@YA?AV?$complex@O@0@ABV10@ABO@Z */
1566 /* ??$?HO@std@@YA?AV?$complex@O@0@AEBV10@AEBO@Z */
1567 complex_double* __cdecl complex_double_add_cd(complex_double *ret, const complex_double *l, double *r)
1568 {
1569     ret->real = l->real + *r;
1570     ret->imag = l->imag;
1571     return ret;
1572 }
1573
1574 /* ??$?KN@std@@YA?AV?$complex@N@0@ABV10@0@Z */
1575 /* ??$?KN@std@@YA?AV?$complex@N@0@AEBV10@0@Z */
1576 /* ??$?KO@std@@YA?AV?$complex@O@0@ABV10@0@Z */
1577 /* ??$?KO@std@@YA?AV?$complex@O@0@AEBV10@0@Z */
1578 complex_double* __cdecl complex_double_div(complex_double *ret, const complex_double *l, const complex_double *r)
1579 {
1580     if((!r->real && !r->imag) || _isnan(l->real) || _isnan(l->imag)
1581             || _isnan(r->real) || _isnan(r->imag)) {
1582         ret->real = std_numeric_limits_double_quiet_NaN();
1583         ret->imag = ret->real;
1584         return ret;
1585     }
1586
1587     ret->real = 0;
1588     ret->imag = 0;
1589     if(r->real) {
1590         ret->real = l->real / r->real;
1591         ret->imag = l->imag / r->real;
1592     }
1593     if(r->imag) {
1594         ret->real += l->imag / r->imag;
1595         ret->imag -= l->real / r->imag;
1596     }
1597     return ret;
1598 }
1599
1600 /* ??$?KN@std@@YA?AV?$complex@N@0@ABNABV10@@Z */
1601 /* ??$?KN@std@@YA?AV?$complex@N@0@AEBNAEBV10@@Z */
1602 /* ??$?KO@std@@YA?AV?$complex@O@0@ABOABV10@@Z */
1603 /* ??$?KO@std@@YA?AV?$complex@O@0@AEBOAEBV10@@Z */
1604 complex_double* __cdecl complex_double_div_dc(complex_double *ret, const double *l, const complex_double *r)
1605 {
1606     complex_double c = {*l, 0};
1607     return complex_double_div(ret, &c, r);
1608 }
1609
1610 /* ??$?KN@std@@YA?AV?$complex@N@0@ABV10@ABN@Z */
1611 /* ??$?KN@std@@YA?AV?$complex@N@0@AEBV10@AEBN@Z */
1612 /* ??$?KO@std@@YA?AV?$complex@O@0@ABV10@ABO@Z */
1613 /* ??$?KO@std@@YA?AV?$complex@O@0@AEBV10@AEBO@Z */
1614 complex_double* __cdecl complex_double_div_cd(complex_double *ret, const complex_double *l, double *r)
1615 {
1616     ret->real = l->real / *r;
1617     ret->imag = l->imag / *r;
1618     return ret;
1619 }
1620
1621 /* ??4?$_Complex_base@NU_C_double_complex@@@std@@QAEAAV01@ABV01@@Z */
1622 /* ??4?$_Complex_base@NU_C_double_complex@@@std@@QEAAAEAV01@AEBV01@@Z */
1623 /* ??4?$_Complex_base@OU_C_ldouble_complex@@@std@@QAEAAV01@ABV01@@Z */
1624 /* ??4?$_Complex_base@OU_C_ldouble_complex@@@std@@QEAAAEAV01@AEBV01@@Z */
1625 /* ??4?$complex@N@std@@QAEAAV01@ABV01@@Z */
1626 /* ??4?$complex@N@std@@QEAAAEAV01@AEBV01@@Z */
1627 /* ??4?$complex@O@std@@QAEAAV01@ABV01@@Z */
1628 /* ??4?$complex@O@std@@QEAAAEAV01@AEBV01@@Z */
1629 DEFINE_THISCALL_WRAPPER(complex_double_assign, 8)
1630 complex_double* __thiscall complex_double_assign(complex_double *this, const complex_double *r)
1631 {
1632     *this = *r;
1633     return this;
1634 }
1635
1636 /* ??4?$complex@N@std@@QAEAAV01@ABN@Z */
1637 /* ??4?$complex@N@std@@QEAAAEAV01@AEBN@Z */
1638 /* ??4?$complex@O@std@@QAEAAV01@ABO@Z */
1639 /* ??4?$complex@O@std@@QEAAAEAV01@AEBO@Z */
1640 DEFINE_THISCALL_WRAPPER(complex_double_assign_double, 8)
1641 complex_double* __thiscall complex_double_assign_double(complex_double *this, double *r)
1642 {
1643     this->real = *r;
1644     this->imag = 0;
1645     return this;
1646 }
1647
1648 /* ??X?$complex@N@std@@QAEAAV01@ABN@Z */
1649 /* ??X?$complex@N@std@@QEAAAEAV01@AEBN@Z */
1650 /* ??X?$complex@O@std@@QAEAAV01@ABO@Z */
1651 /* ??X?$complex@O@std@@QEAAAEAV01@AEBO@Z */
1652 DEFINE_THISCALL_WRAPPER(complex_double_mult_assign_double, 8)
1653 complex_double* __thiscall complex_double_mult_assign_double(complex_double *this, const double *r)
1654 {
1655     this->real *= *r;
1656     this->imag *= *r;
1657     return this;
1658 }
1659
1660 /* ??X?$complex@N@std@@QAEAAV01@ABV01@@Z */
1661 /* ??X?$complex@N@std@@QEAAAEAV01@AEBV01@@Z */
1662 /* ??X?$complex@O@std@@QAEAAV01@ABV01@@Z */
1663 /* ??X?$complex@O@std@@QEAAAEAV01@AEBV01@@Z */
1664 DEFINE_THISCALL_WRAPPER(complex_double_mult_assign, 8)
1665 complex_double* __thiscall complex_double_mult_assign(complex_double *this, const complex_double *r)
1666 {
1667     complex_double tmp = *this;
1668
1669     this->real = tmp.real*r->real - tmp.imag*r->imag;
1670     this->imag = tmp.real*r->imag + tmp.imag*r->real;
1671     return this;
1672 }
1673
1674 /* ??Y?$complex@N@std@@QAEAAV01@ABN@Z */
1675 /* ??Y?$complex@N@std@@QEAAAEAV01@AEBN@Z */
1676 /* ??Y?$complex@O@std@@QAEAAV01@ABO@Z */
1677 /* ??Y?$complex@O@std@@QEAAAEAV01@AEBO@Z */
1678 DEFINE_THISCALL_WRAPPER(complex_double_add_assign_double, 8)
1679 complex_double* __thiscall complex_double_add_assign_double(complex_double *this, const double *r)
1680 {
1681     this->real += *r;
1682     return this;
1683 }
1684
1685 /* ??Y?$complex@N@std@@QAEAAV01@ABV01@@Z */
1686 /* ??Y?$complex@N@std@@QEAAAEAV01@AEBV01@@Z */
1687 /* ??Y?$complex@O@std@@QAEAAV01@ABV01@@Z */
1688 /* ??Y?$complex@O@std@@QEAAAEAV01@AEBV01@@Z */
1689 DEFINE_THISCALL_WRAPPER(complex_double_add_assign, 8)
1690 complex_double* __thiscall complex_double_add_assign(complex_double *this, const complex_double *r)
1691 {
1692     this->real += r->real;
1693     this->imag += r->imag;
1694     return this;
1695 }
1696
1697 /* ??Z?$complex@N@std@@QAEAAV01@ABN@Z */
1698 /* ??Z?$complex@N@std@@QEAAAEAV01@AEBN@Z */
1699 /* ??Z?$complex@O@std@@QAEAAV01@ABO@Z */
1700 /* ??Z?$complex@O@std@@QEAAAEAV01@AEBO@Z */
1701 DEFINE_THISCALL_WRAPPER(complex_double_sub_assign_double, 8)
1702 complex_double* __thiscall complex_double_sub_assign_double(complex_double *this, const double *r)
1703 {
1704     this->real -= *r;
1705     return this;
1706 }
1707
1708 /* ??Z?$complex@N@std@@QAEAAV01@ABV01@@Z */
1709 /* ??Z?$complex@N@std@@QEAAAEAV01@AEBV01@@Z */
1710 /* ??Z?$complex@O@std@@QAEAAV01@ABV01@@Z */
1711 /* ??Z?$complex@O@std@@QEAAAEAV01@AEBV01@@Z */
1712 DEFINE_THISCALL_WRAPPER(complex_double_sub_assign, 8)
1713 complex_double* __thiscall complex_double_sub_assign(complex_double *this, const complex_double *r)
1714 {
1715     this->real -= r->real;
1716     this->imag -= r->imag;
1717     return this;
1718 }
1719
1720 /* ??_0?$complex@N@std@@QAEAAV01@ABN@Z */
1721 /* ??_0?$complex@N@std@@QEAAAEAV01@AEBN@Z */
1722 /* ??_0?$complex@O@std@@QAEAAV01@ABO@Z */
1723 /* ??_0?$complex@O@std@@QEAAAEAV01@AEBO@Z */
1724 DEFINE_THISCALL_WRAPPER(complex_double_div_assign_double, 8)
1725 complex_double* __thiscall complex_double_div_assign_double(complex_double *this, const double *r)
1726 {
1727     this->real /= *r;
1728     this->imag /= *r;
1729     return this;
1730 }
1731
1732 /* ??_0?$complex@N@std@@QAEAAV01@ABV01@@Z */
1733 /* ??_0?$complex@N@std@@QEAAAEAV01@AEBV01@@Z */
1734 /* ??_0?$complex@O@std@@QAEAAV01@ABV01@@Z */
1735 /* ??_0?$complex@O@std@@QEAAAEAV01@AEBV01@@Z */
1736 DEFINE_THISCALL_WRAPPER(complex_double_div_assign, 8)
1737 complex_double* __thiscall complex_double_div_assign(complex_double *this, const complex_double *r)
1738 {
1739     complex_double tmp = *this;
1740     return complex_double_div(this, &tmp, r);
1741 }
1742
1743 /* ??$arg@N@std@@YANABV?$complex@N@0@@Z */
1744 /* ??$arg@N@std@@YANAEBV?$complex@N@0@@Z */
1745 /* ??$arg@O@std@@YAOABV?$complex@O@0@@Z */
1746 /* ??$arg@O@std@@YAOAEBV?$complex@O@0@@Z */
1747 double __cdecl complex_double_arg(const complex_double *c)
1748 {
1749     return atan2(c->imag, c->real);
1750 }
1751
1752 /* ??$imag@N@std@@YANABV?$complex@N@0@@Z */
1753 /* ??$imag@N@std@@YANAEBV?$complex@N@0@@Z */
1754 /* ??$imag@O@std@@YAOABV?$complex@O@0@@Z */
1755 /* ??$imag@O@std@@YAOAEBV?$complex@O@0@@Z */
1756 double __cdecl complex_double_imag(const complex_double *c)
1757 {
1758     return c->imag;
1759 }
1760
1761 /* ?imag@?$_Complex_base@NU_C_double_complex@@@std@@QAENABN@Z */
1762 /* ?imag@?$_Complex_base@NU_C_double_complex@@@std@@QEAANAEBN@Z */
1763 /* ?imag@?$_Complex_base@OU_C_ldouble_complex@@@std@@QAEOABO@Z */
1764 /* ?imag@?$_Complex_base@OU_C_ldouble_complex@@@std@@QEAAOAEBO@Z */
1765 DEFINE_THISCALL_WRAPPER(complex_double_imag_set, 8)
1766 double __thiscall complex_double_imag_set(complex_double *this, const double *d)
1767 {
1768     return (this->imag = *d);
1769 }
1770
1771 /* ?imag@?$_Complex_base@NU_C_double_complex@@@std@@QBENXZ */
1772 /* ?imag@?$_Complex_base@NU_C_double_complex@@@std@@QEBANXZ */
1773 /* ?imag@?$_Complex_base@OU_C_ldouble_complex@@@std@@QBEOXZ */
1774 /* ?imag@?$_Complex_base@OU_C_ldouble_complex@@@std@@QEBAOXZ */
1775 DEFINE_THISCALL_WRAPPER(complex_double_imag_get, 4)
1776 double __thiscall complex_double_imag_get(const complex_double *this)
1777 {
1778     return this->imag;
1779 }
1780
1781 /* ??$real@N@std@@YANABV?$complex@N@0@@Z */
1782 /* ??$real@N@std@@YANAEBV?$complex@N@0@@Z */
1783 /* ??$real@O@std@@YAOABV?$complex@O@0@@Z */
1784 /* ??$real@O@std@@YAOAEBV?$complex@O@0@@Z */
1785 double __cdecl complex_double_real(const complex_double *c)
1786 {
1787     return c->real;
1788 }
1789
1790 /* ?real@?$_Complex_base@NU_C_double_complex@@@std@@QAENABN@Z */
1791 /* ?real@?$_Complex_base@NU_C_double_complex@@@std@@QEAANAEBN@Z */
1792 /* ?real@?$_Complex_base@OU_C_ldouble_complex@@@std@@QAEOABO@Z */
1793 /* ?real@?$_Complex_base@OU_C_ldouble_complex@@@std@@QEAAOAEBO@Z */
1794 DEFINE_THISCALL_WRAPPER(complex_double_real_set, 8)
1795 double __thiscall complex_double_real_set(complex_double *this, const double *d)
1796 {
1797     return (this->real = *d);
1798 }
1799
1800 /* ?real@?$_Complex_base@NU_C_double_complex@@@std@@QBENXZ */
1801 /* ?real@?$_Complex_base@NU_C_double_complex@@@std@@QEBANXZ */
1802 /* ?real@?$_Complex_base@OU_C_ldouble_complex@@@std@@QBEOXZ */
1803 /* ?real@?$_Complex_base@OU_C_ldouble_complex@@@std@@QEBAOXZ */
1804 DEFINE_THISCALL_WRAPPER(complex_double_real_get, 4)
1805 double __thiscall complex_double_real_get(const complex_double *this)
1806 {
1807     return this->real;
1808 }
1809
1810 /* ??$_Fabs@N@std@@YANABV?$complex@N@0@PAH@Z */
1811 /* ??$_Fabs@N@std@@YANAEBV?$complex@N@0@PEAH@Z */
1812 /* ??$_Fabs@O@std@@YAOABV?$complex@O@0@PAH@Z */
1813 /* ??$_Fabs@O@std@@YAOAEBV?$complex@O@0@PEAH@Z */
1814 double __cdecl complex_double__Fabs(const complex_double *c, int *scale)
1815 {
1816     double ret;
1817
1818     ret = hypot(c->real, c->imag);
1819     if(_isnan(ret) || ret==0) {
1820         *scale = 0;
1821     }else if(ret >= 1) {
1822         *scale = 2;
1823         ret /= 4;
1824     }else {
1825         *scale = -2;
1826         ret *= 4;
1827     }
1828
1829     return ret;
1830 }
1831
1832 /* ??$abs@N@std@@YANABV?$complex@N@0@@Z */
1833 /* ??$abs@N@std@@YANAEBV?$complex@N@0@@Z */
1834 /* ??$abs@O@std@@YAOABV?$complex@O@0@@Z */
1835 /* ??$abs@O@std@@YAOAEBV?$complex@O@0@@Z */
1836 double __cdecl complex_double_abs(const complex_double *c)
1837 {
1838     return hypot(c->real, c->imag);
1839 }
1840
1841 /* ??$conj@N@std@@YA?AV?$complex@N@0@ABV10@@Z */
1842 /* ??$conj@N@std@@YA?AV?$complex@N@0@AEBV10@@Z */
1843 /* ??$conj@O@std@@YA?AV?$complex@O@0@ABV10@@Z */
1844 /* ??$conj@O@std@@YA?AV?$complex@O@0@AEBV10@@Z */
1845 complex_double* __cdecl complex_double_conj(complex_double *ret, const complex_double *c)
1846 {
1847     ret->real = c->real;
1848     ret->imag = -c->imag;
1849     return ret;
1850 }
1851
1852 /* ??$cos@N@std@@YA?AV?$complex@N@0@ABV10@@Z */
1853 /* ??$cos@N@std@@YA?AV?$complex@N@0@AEBV10@@Z */
1854 /* ??$cos@O@std@@YA?AV?$complex@O@0@ABV10@@Z */
1855 /* ??$cos@O@std@@YA?AV?$complex@O@0@AEBV10@@Z */
1856 complex_double* __cdecl complex_double_cos(complex_double *ret, const complex_double *c)
1857 {
1858     ret->real = cos(c->real)*cosh(c->imag);
1859     ret->imag = -sin(c->real)*sinh(c->imag);
1860     return ret;
1861 }
1862
1863 /* ??$sin@N@std@@YA?AV?$complex@N@0@ABV10@@Z */
1864 /* ??$sin@N@std@@YA?AV?$complex@N@0@AEBV10@@Z */
1865 /* ??$sin@O@std@@YA?AV?$complex@O@0@ABV10@@Z */
1866 /* ??$sin@O@std@@YA?AV?$complex@O@0@AEBV10@@Z */
1867 complex_double* __cdecl complex_double_sin(complex_double *ret, const complex_double *c)
1868 {
1869     ret->real = sin(c->real)*cosh(c->imag);
1870     ret->imag = cos(c->real)*sinh(c->imag);
1871     return ret;
1872 }
1873
1874 /* ??$tan@N@std@@YA?AV?$complex@N@0@ABV10@@Z */
1875 /* ??$tan@N@std@@YA?AV?$complex@N@0@AEBV10@@Z */
1876 /* ??$tan@O@std@@YA?AV?$complex@O@0@ABV10@@Z */
1877 /* ??$tan@O@std@@YA?AV?$complex@O@0@AEBV10@@Z */
1878 complex_double* __cdecl complex_double_tan(complex_double *ret, const complex_double *c)
1879 {
1880     double denom = cos(2*c->real) + cosh(2*c->imag);
1881     ret->real = sin(2*c->real) / denom;
1882     ret->imag = sinh(2*c->imag) / denom;
1883     return ret;
1884 }