Documentation of
CSL
include
libcomplexop_hdata.h
Go to the documentation of this file.
1
// This file is part of MARTY.
2
//
3
// MARTY is free software: you can redistribute it and/or modify
4
// it under the terms of the GNU General Public License as published by
5
// the Free Software Foundation, either version 3 of the License, or
6
// (at your option) any later version.
7
//
8
// MARTY is distributed in the hope that it will be useful,
9
// but WITHOUT ANY WARRANTY; without even the implied warranty of
10
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11
// GNU General Public License for more details.
12
//
13
// You should have received a copy of the GNU General Public License
14
// along with MARTY. If not, see <https://www.gnu.org/licenses/>.
15
23
#pragma once
24
25
#include <iostream>
26
27
namespace
csl
{
28
29
void
print_libcomplexop_hdata(std::ostream &out) {
30
out <<
"#ifndef LIBCOMPLEXOP_H_INCLUDED\n"
;
31
out <<
"#define LIBCOMPLEXOP_H_INCLUDED\n"
;
32
out <<
"\n"
;
33
out <<
"#include <complex>\n"
;
34
out <<
"#include <iostream>\n"
;
35
out <<
"\n"
;
36
out <<
"\n"
;
37
out <<
"#ifdef QUAD\n"
;
38
out <<
"\n"
;
39
out <<
"///////////////////////////////////////////////////\n"
;
40
out <<
"// quadruple - double / float operators\n"
;
41
out <<
"///////////////////////////////////////////////////\n"
;
42
out <<
"\n"
;
43
out <<
"#include <quadmath.h>\n"
;
44
out <<
"\n"
;
45
out <<
"inline std::complex<__float128> operator+(\n"
;
46
out <<
" std::complex<__float128> const&c, \n"
;
47
out <<
" double a\n"
;
48
out <<
" )\n"
;
49
out <<
"{\n"
;
50
out <<
" return c + std::complex<__float128>(a);\n"
;
51
out <<
"}\n"
;
52
out <<
"inline std::complex<__float128> operator+(\n"
;
53
out <<
" double a,\n"
;
54
out <<
" std::complex<__float128> const&c\n"
;
55
out <<
" )\n"
;
56
out <<
"{\n"
;
57
out <<
" return c + std::complex<__float128>(a);\n"
;
58
out <<
"}\n"
;
59
out <<
"\n"
;
60
out <<
"inline std::complex<__float128> operator*(\n"
;
61
out <<
" std::complex<__float128> const&c, \n"
;
62
out <<
" double a\n"
;
63
out <<
" )\n"
;
64
out <<
"{\n"
;
65
out <<
" return c * std::complex<__float128>(a);\n"
;
66
out <<
"}\n"
;
67
out <<
"inline std::complex<__float128> operator*(\n"
;
68
out <<
" double a,\n"
;
69
out <<
" std::complex<__float128> const&c\n"
;
70
out <<
" )\n"
;
71
out <<
"{\n"
;
72
out <<
" return c * std::complex<__float128>(a);\n"
;
73
out <<
"}\n"
;
74
out <<
"\n"
;
75
out <<
"inline std::complex<__float128> operator-(\n"
;
76
out <<
" std::complex<__float128> const&c, \n"
;
77
out <<
" double a\n"
;
78
out <<
" )\n"
;
79
out <<
"{\n"
;
80
out <<
" return c - std::complex<__float128>(a);\n"
;
81
out <<
"}\n"
;
82
out <<
"inline std::complex<__float128> operator-(\n"
;
83
out <<
" double a,\n"
;
84
out <<
" std::complex<__float128> const&c\n"
;
85
out <<
" )\n"
;
86
out <<
"{\n"
;
87
out <<
" return std::complex<__float128>(a) - c;\n"
;
88
out <<
"}\n"
;
89
out <<
"\n"
;
90
out <<
"inline std::complex<__float128> operator/(\n"
;
91
out <<
" std::complex<__float128> const&c, \n"
;
92
out <<
" double a\n"
;
93
out <<
" )\n"
;
94
out <<
"{\n"
;
95
out <<
" return c / std::complex<__float128>(a);\n"
;
96
out <<
"}\n"
;
97
out <<
"inline std::complex<__float128> operator/(\n"
;
98
out <<
" double a,\n"
;
99
out <<
" std::complex<__float128> const&c\n"
;
100
out <<
" )\n"
;
101
out <<
"{\n"
;
102
out <<
" return std::complex<__float128>(a) / c;\n"
;
103
out <<
"}\n"
;
104
out <<
"\n"
;
105
out <<
"// Complex - complex operators\n"
;
106
out <<
"\n"
;
107
out <<
"inline std::complex<__float128> operator+(\n"
;
108
out <<
" std::complex<__float128> const&c, \n"
;
109
out <<
" std::complex<double> const&a\n"
;
110
out <<
" )\n"
;
111
out <<
"{\n"
;
112
out <<
" return c + std::complex<__float128>(a);\n"
;
113
out <<
"}\n"
;
114
out <<
"inline std::complex<__float128> operator+(\n"
;
115
out <<
" std::complex<double> const&a,\n"
;
116
out <<
" std::complex<__float128> const&c\n"
;
117
out <<
" )\n"
;
118
out <<
"{\n"
;
119
out <<
" return c + std::complex<__float128>(a);\n"
;
120
out <<
"}\n"
;
121
out <<
"\n"
;
122
out <<
"inline std::complex<__float128> operator*(\n"
;
123
out <<
" std::complex<__float128> const&c, \n"
;
124
out <<
" std::complex<double> const&a\n"
;
125
out <<
" )\n"
;
126
out <<
"{\n"
;
127
out <<
" return c * std::complex<__float128>(a);\n"
;
128
out <<
"}\n"
;
129
out <<
"inline std::complex<__float128> operator*(\n"
;
130
out <<
" std::complex<double> const&a,\n"
;
131
out <<
" std::complex<__float128> const&c\n"
;
132
out <<
" )\n"
;
133
out <<
"{\n"
;
134
out <<
" return c * std::complex<__float128>(a);\n"
;
135
out <<
"}\n"
;
136
out <<
"\n"
;
137
out <<
"inline std::complex<__float128> operator-(\n"
;
138
out <<
" std::complex<__float128> const&c, \n"
;
139
out <<
" std::complex<double> const&a\n"
;
140
out <<
" )\n"
;
141
out <<
"{\n"
;
142
out <<
" return c - std::complex<__float128>(a);\n"
;
143
out <<
"}\n"
;
144
out <<
"inline std::complex<__float128> operator-(\n"
;
145
out <<
" std::complex<double> const&a,\n"
;
146
out <<
" std::complex<__float128> const&c\n"
;
147
out <<
" )\n"
;
148
out <<
"{\n"
;
149
out <<
" return std::complex<__float128>(a) - c;\n"
;
150
out <<
"}\n"
;
151
out <<
"\n"
;
152
out <<
"inline std::complex<__float128> operator/(\n"
;
153
out <<
" std::complex<__float128> const&c, \n"
;
154
out <<
" std::complex<double> const&a\n"
;
155
out <<
" )\n"
;
156
out <<
"{\n"
;
157
out <<
" return c / std::complex<__float128>(a);\n"
;
158
out <<
"}\n"
;
159
out <<
"inline std::complex<__float128> operator/(\n"
;
160
out <<
" std::complex<double> const&a,\n"
;
161
out <<
" std::complex<__float128> const&c\n"
;
162
out <<
" )\n"
;
163
out <<
"{\n"
;
164
out <<
" return std::complex<__float128>(a) / c;\n"
;
165
out <<
"}\n"
;
166
out <<
"\n"
;
167
out <<
"///////////////////////////////////////////////////\n"
;
168
out <<
"// quadruple / int operators\n"
;
169
out <<
"///////////////////////////////////////////////////\n"
;
170
out <<
"\n"
;
171
out <<
"inline std::complex<__float128> operator+(\n"
;
172
out <<
" std::complex<__float128> const&c, \n"
;
173
out <<
" int a\n"
;
174
out <<
" )\n"
;
175
out <<
"{\n"
;
176
out <<
" return c + std::complex<__float128>(a);\n"
;
177
out <<
"}\n"
;
178
out <<
"inline std::complex<__float128> operator+(\n"
;
179
out <<
" int a,\n"
;
180
out <<
" std::complex<__float128> const&c\n"
;
181
out <<
" )\n"
;
182
out <<
"{\n"
;
183
out <<
" return c + std::complex<__float128>(a);\n"
;
184
out <<
"}\n"
;
185
out <<
"\n"
;
186
out <<
"inline std::complex<__float128> operator*(\n"
;
187
out <<
" std::complex<__float128> const&c, \n"
;
188
out <<
" int a\n"
;
189
out <<
" )\n"
;
190
out <<
"{\n"
;
191
out <<
" return c * std::complex<__float128>(a);\n"
;
192
out <<
"}\n"
;
193
out <<
"inline std::complex<__float128> operator*(\n"
;
194
out <<
" int a,\n"
;
195
out <<
" std::complex<__float128> const&c\n"
;
196
out <<
" )\n"
;
197
out <<
"{\n"
;
198
out <<
" return c * std::complex<__float128>(a);\n"
;
199
out <<
"}\n"
;
200
out <<
"\n"
;
201
out <<
"inline std::complex<__float128> operator-(\n"
;
202
out <<
" std::complex<__float128> const&c, \n"
;
203
out <<
" int a\n"
;
204
out <<
" )\n"
;
205
out <<
"{\n"
;
206
out <<
" return c - std::complex<__float128>(a);\n"
;
207
out <<
"}\n"
;
208
out <<
"inline std::complex<__float128> operator-(\n"
;
209
out <<
" int a,\n"
;
210
out <<
" std::complex<__float128> const&c\n"
;
211
out <<
" )\n"
;
212
out <<
"{\n"
;
213
out <<
" return std::complex<__float128>(a) - c;\n"
;
214
out <<
"}\n"
;
215
out <<
"\n"
;
216
out <<
"inline std::complex<__float128> operator/(\n"
;
217
out <<
" std::complex<__float128> const&c, \n"
;
218
out <<
" int a\n"
;
219
out <<
" )\n"
;
220
out <<
"{\n"
;
221
out <<
" return c / std::complex<__float128>(a);\n"
;
222
out <<
"}\n"
;
223
out <<
"inline std::complex<__float128> operator/(\n"
;
224
out <<
" int a,\n"
;
225
out <<
" std::complex<__float128> const&c\n"
;
226
out <<
" )\n"
;
227
out <<
"{\n"
;
228
out <<
" return std::complex<__float128>(a) / c;\n"
;
229
out <<
"}\n"
;
230
out <<
"\n"
;
231
out <<
"// Complex - complex operators\n"
;
232
out <<
"\n"
;
233
out <<
"inline std::complex<__float128> operator+(\n"
;
234
out <<
" std::complex<__float128> const&c, \n"
;
235
out <<
" std::complex<int> const&a\n"
;
236
out <<
" )\n"
;
237
out <<
"{\n"
;
238
out <<
" return c + std::complex<__float128>(a);\n"
;
239
out <<
"}\n"
;
240
out <<
"inline std::complex<__float128> operator+(\n"
;
241
out <<
" std::complex<int> const&a,\n"
;
242
out <<
" std::complex<__float128> const&c\n"
;
243
out <<
" )\n"
;
244
out <<
"{\n"
;
245
out <<
" return c + std::complex<__float128>(a);\n"
;
246
out <<
"}\n"
;
247
out <<
"\n"
;
248
out <<
"inline std::complex<__float128> operator*(\n"
;
249
out <<
" std::complex<__float128> const&c, \n"
;
250
out <<
" std::complex<int> const&a\n"
;
251
out <<
" )\n"
;
252
out <<
"{\n"
;
253
out <<
" return c * std::complex<__float128>(a);\n"
;
254
out <<
"}\n"
;
255
out <<
"inline std::complex<__float128> operator*(\n"
;
256
out <<
" std::complex<int> const&a,\n"
;
257
out <<
" std::complex<__float128> const&c\n"
;
258
out <<
" )\n"
;
259
out <<
"{\n"
;
260
out <<
" return c * std::complex<__float128>(a);\n"
;
261
out <<
"}\n"
;
262
out <<
"\n"
;
263
out <<
"inline std::complex<__float128> operator-(\n"
;
264
out <<
" std::complex<__float128> const&c, \n"
;
265
out <<
" std::complex<int> const&a\n"
;
266
out <<
" )\n"
;
267
out <<
"{\n"
;
268
out <<
" return c - std::complex<__float128>(a);\n"
;
269
out <<
"}\n"
;
270
out <<
"inline std::complex<__float128> operator-(\n"
;
271
out <<
" std::complex<int> const&a,\n"
;
272
out <<
" std::complex<__float128> const&c\n"
;
273
out <<
" )\n"
;
274
out <<
"{\n"
;
275
out <<
" return std::complex<__float128>(a) - c;\n"
;
276
out <<
"}\n"
;
277
out <<
"\n"
;
278
out <<
"inline std::complex<__float128> operator/(\n"
;
279
out <<
" std::complex<__float128> const&c, \n"
;
280
out <<
" std::complex<int> const&a\n"
;
281
out <<
" )\n"
;
282
out <<
"{\n"
;
283
out <<
" return c / std::complex<__float128>(a);\n"
;
284
out <<
"}\n"
;
285
out <<
"inline std::complex<__float128> operator/(\n"
;
286
out <<
" std::complex<int> const&a,\n"
;
287
out <<
" std::complex<__float128> const&c\n"
;
288
out <<
" )\n"
;
289
out <<
"{\n"
;
290
out <<
" return std::complex<__float128>(a) / c;\n"
;
291
out <<
"}\n"
;
292
out <<
"\n"
;
293
out <<
"inline std::ostream &operator<<(\n"
;
294
out <<
" std::ostream &out,\n"
;
295
out <<
" __float128 x\n"
;
296
out <<
" )\n"
;
297
out <<
"{\n"
;
298
out <<
" out << (double)x;\n"
;
299
out <<
" return out;\n"
;
300
out <<
"}\n"
;
301
out <<
"\n"
;
302
out <<
"inline std::ostream &operator<<(\n"
;
303
out <<
" std::ostream &out,\n"
;
304
out <<
" __complex128 z\n"
;
305
out <<
" )\n"
;
306
out <<
"{\n"
;
307
out <<
" out << \"(\" << crealq(z) << \" + i*\" << cimagq(z) << \")\";\n"
;
308
out <<
" return out;\n"
;
309
out <<
"}\n"
;
310
out <<
"\n"
;
311
out <<
"#endif\n"
;
312
out <<
"\n"
;
313
out <<
"///////////////////////////////////////////////////\n"
;
314
out <<
"// double / int operators\n"
;
315
out <<
"///////////////////////////////////////////////////\n"
;
316
out <<
"\n"
;
317
out <<
"inline std::complex<double> operator+(\n"
;
318
out <<
" std::complex<double> const&c, \n"
;
319
out <<
" int a\n"
;
320
out <<
" )\n"
;
321
out <<
"{\n"
;
322
out <<
" return c + std::complex<double>(a);\n"
;
323
out <<
"}\n"
;
324
out <<
"inline std::complex<double> operator+(\n"
;
325
out <<
" int a,\n"
;
326
out <<
" std::complex<double> const&c\n"
;
327
out <<
" )\n"
;
328
out <<
"{\n"
;
329
out <<
" return c + std::complex<double>(a);\n"
;
330
out <<
"}\n"
;
331
out <<
"\n"
;
332
out <<
"inline std::complex<double> operator*(\n"
;
333
out <<
" std::complex<double> const&c, \n"
;
334
out <<
" int a\n"
;
335
out <<
" )\n"
;
336
out <<
"{\n"
;
337
out <<
" return c * std::complex<double>(a);\n"
;
338
out <<
"}\n"
;
339
out <<
"inline std::complex<double> operator*(\n"
;
340
out <<
" int a,\n"
;
341
out <<
" std::complex<double> const&c\n"
;
342
out <<
" )\n"
;
343
out <<
"{\n"
;
344
out <<
" return c * std::complex<double>(a);\n"
;
345
out <<
"}\n"
;
346
out <<
"\n"
;
347
out <<
"inline std::complex<double> operator-(\n"
;
348
out <<
" std::complex<double> const&c, \n"
;
349
out <<
" int a\n"
;
350
out <<
" )\n"
;
351
out <<
"{\n"
;
352
out <<
" return c - std::complex<double>(a);\n"
;
353
out <<
"}\n"
;
354
out <<
"inline std::complex<double> operator-(\n"
;
355
out <<
" int a,\n"
;
356
out <<
" std::complex<double> const&c\n"
;
357
out <<
" )\n"
;
358
out <<
"{\n"
;
359
out <<
" return std::complex<double>(a) - c;\n"
;
360
out <<
"}\n"
;
361
out <<
"\n"
;
362
out <<
"inline std::complex<double> operator/(\n"
;
363
out <<
" std::complex<double> const&c, \n"
;
364
out <<
" int a\n"
;
365
out <<
" )\n"
;
366
out <<
"{\n"
;
367
out <<
" return c / std::complex<double>(a);\n"
;
368
out <<
"}\n"
;
369
out <<
"inline std::complex<double> operator/(\n"
;
370
out <<
" int a,\n"
;
371
out <<
" std::complex<double> const&c\n"
;
372
out <<
" )\n"
;
373
out <<
"{\n"
;
374
out <<
" return std::complex<double>(a) / c;\n"
;
375
out <<
"}\n"
;
376
out <<
"\n"
;
377
out <<
"// Complex - complex operators\n"
;
378
out <<
"\n"
;
379
out <<
"inline std::complex<double> operator+(\n"
;
380
out <<
" std::complex<double> const&c, \n"
;
381
out <<
" std::complex<int> const&a\n"
;
382
out <<
" )\n"
;
383
out <<
"{\n"
;
384
out <<
" return c + std::complex<double>(a.real(), a.imag());\n"
;
385
out <<
"}\n"
;
386
out <<
"inline std::complex<double> operator+(\n"
;
387
out <<
" std::complex<int> const&a,\n"
;
388
out <<
" std::complex<double> const&c\n"
;
389
out <<
" )\n"
;
390
out <<
"{\n"
;
391
out <<
" return c + std::complex<double>(a.real(), a.imag());\n"
;
392
out <<
"}\n"
;
393
out <<
"\n"
;
394
out <<
"inline std::complex<double> operator*(\n"
;
395
out <<
" std::complex<double> const&c, \n"
;
396
out <<
" std::complex<int> const&a\n"
;
397
out <<
" )\n"
;
398
out <<
"{\n"
;
399
out <<
" return c * std::complex<double>(a.real(), a.imag());\n"
;
400
out <<
"}\n"
;
401
out <<
"inline std::complex<double> operator*(\n"
;
402
out <<
" std::complex<int> const&a,\n"
;
403
out <<
" std::complex<double> const&c\n"
;
404
out <<
" )\n"
;
405
out <<
"{\n"
;
406
out <<
" return c * std::complex<double>(a.real(), a.imag());\n"
;
407
out <<
"}\n"
;
408
out <<
"\n"
;
409
out <<
"inline std::complex<double> operator-(\n"
;
410
out <<
" std::complex<double> const&c, \n"
;
411
out <<
" std::complex<int> const&a\n"
;
412
out <<
" )\n"
;
413
out <<
"{\n"
;
414
out <<
" return c - std::complex<double>(a.real(), a.imag());\n"
;
415
out <<
"}\n"
;
416
out <<
"inline std::complex<double> operator-(\n"
;
417
out <<
" std::complex<int> const&a,\n"
;
418
out <<
" std::complex<double> const&c\n"
;
419
out <<
" )\n"
;
420
out <<
"{\n"
;
421
out <<
" return std::complex<double>(a.real(), a.imag()) - c;\n"
;
422
out <<
"}\n"
;
423
out <<
"\n"
;
424
out <<
"inline std::complex<double> operator/(\n"
;
425
out <<
" std::complex<double> const&c, \n"
;
426
out <<
" std::complex<int> const&a\n"
;
427
out <<
" )\n"
;
428
out <<
"{\n"
;
429
out <<
" return c / std::complex<double>(a.real(), a.imag());\n"
;
430
out <<
"}\n"
;
431
out <<
"inline std::complex<double> operator/(\n"
;
432
out <<
" std::complex<int> const&a,\n"
;
433
out <<
" std::complex<double> const&c\n"
;
434
out <<
" )\n"
;
435
out <<
"{\n"
;
436
out <<
" return std::complex<double>(a.real(), a.imag()) / c;\n"
;
437
out <<
"}\n"
;
438
out <<
"\n"
;
439
out <<
"#endif\n"
;
440
}
441
442
}
// End of namespace csl
csl
Namespace for csl library.
Definition:
abreviation.h:34
Generated by
1.8.13