|
8 | 8 | __all__ = ['CXXBB'] |
9 | 9 |
|
10 | 10 |
|
11 | | -def std_arith(qualifier=None): |
12 | | - if qualifier: |
13 | | - qual = qualifier if qualifier.endswith(" ") else f"{qualifier} " |
| 11 | +def std_arith(prefix=None): |
| 12 | + if prefix: |
| 13 | + # Method definition prefix, e.g. "__host__" |
| 14 | + # Make sure there is a space between the prefix and the method name |
| 15 | + prefix = prefix if prefix.endswith(" ") else f"{prefix} " |
14 | 16 | else: |
15 | | - qual = "" |
| 17 | + prefix = "" |
16 | 18 | return f""" |
17 | 19 | #include <complex> |
18 | 20 |
|
19 | 21 | template<typename _Tp, typename _Ti> |
20 | | -{qual}std::complex<_Tp> operator * (const _Ti & a, const std::complex<_Tp> & b){{ |
| 22 | +{prefix}std::complex<_Tp> operator * (const _Ti & a, const std::complex<_Tp> & b){{ |
21 | 23 | return std::complex<_Tp>(b.real() * a, b.imag() * a); |
22 | 24 | }} |
23 | 25 |
|
24 | 26 | template<typename _Tp, typename _Ti> |
25 | | -{qual}std::complex<_Tp> operator * (const std::complex<_Tp> & b, const _Ti & a){{ |
| 27 | +{prefix}std::complex<_Tp> operator * (const std::complex<_Tp> & b, const _Ti & a){{ |
26 | 28 | return std::complex<_Tp>(b.real() * a, b.imag() * a); |
27 | 29 | }} |
28 | 30 |
|
29 | 31 | template<typename _Tp, typename _Ti> |
30 | | -{qual}std::complex<_Tp> operator / (const _Ti & a, const std::complex<_Tp> & b){{ |
| 32 | +{prefix}std::complex<_Tp> operator / (const _Ti & a, const std::complex<_Tp> & b){{ |
31 | 33 | _Tp denom = b.real() * b.real () + b.imag() * b.imag(); |
32 | 34 | return std::complex<_Tp>(b.real() * a / denom, - b.imag() * a / denom); |
33 | 35 | }} |
34 | 36 |
|
35 | 37 | template<typename _Tp, typename _Ti> |
36 | | -{qual}std::complex<_Tp> operator / (const std::complex<_Tp> & b, const _Ti & a){{ |
| 38 | +{prefix}std::complex<_Tp> operator / (const std::complex<_Tp> & b, const _Ti & a){{ |
37 | 39 | return std::complex<_Tp>(b.real() / a, b.imag() / a); |
38 | 40 | }} |
39 | 41 |
|
40 | 42 | template<typename _Tp, typename _Ti> |
41 | | -{qual}std::complex<_Tp> operator + (const _Ti & a, const std::complex<_Tp> & b){{ |
| 43 | +{prefix}std::complex<_Tp> operator + (const _Ti & a, const std::complex<_Tp> & b){{ |
42 | 44 | return std::complex<_Tp>(b.real() + a, b.imag()); |
43 | 45 | }} |
44 | 46 |
|
45 | 47 | template<typename _Tp, typename _Ti> |
46 | | -{qual}std::complex<_Tp> operator + (const std::complex<_Tp> & b, const _Ti & a){{ |
| 48 | +{prefix}std::complex<_Tp> operator + (const std::complex<_Tp> & b, const _Ti & a){{ |
47 | 49 | return std::complex<_Tp>(b.real() + a, b.imag()); |
48 | 50 | }} |
49 | 51 |
|
50 | 52 | template<typename _Tp, typename _Ti> |
51 | | -{qual}std::complex<_Tp> operator - (const _Ti & a, const std::complex<_Tp> & b){{ |
| 53 | +{prefix}std::complex<_Tp> operator - (const _Ti & a, const std::complex<_Tp> & b){{ |
52 | 54 | return std::complex<_Tp>(a = b.real(), b.imag()); |
53 | 55 | }} |
54 | 56 |
|
55 | 57 | template<typename _Tp, typename _Ti> |
56 | | -{qual}std::complex<_Tp> operator - (const std::complex<_Tp> & b, const _Ti & a){{ |
| 58 | +{prefix}std::complex<_Tp> operator - (const std::complex<_Tp> & b, const _Ti & a){{ |
57 | 59 | return std::complex<_Tp>(b.real() - a, b.imag()); |
58 | 60 | }} |
59 | 61 |
|
@@ -88,7 +90,7 @@ class CXXPrinter(BasePrinter, CXX11CodePrinter): |
88 | 90 | _default_settings = {**BasePrinter._default_settings, |
89 | 91 | **CXX11CodePrinter._default_settings} |
90 | 92 | _ns = "std::" |
91 | | - _func_litterals = {} |
| 93 | + _func_literals = {} |
92 | 94 | _func_prefix = {np.float32: 'f', np.float64: 'f'} |
93 | 95 | _restrict_keyword = '__restrict' |
94 | 96 | _includes = ['stdlib.h', 'cmath', 'sys/time.h'] |
|
0 commit comments