|
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