1 %module complextest
2 
3 %include <complex.i>
4 
5 #ifdef __cplusplus
6 %{
7 #include <algorithm>
8 #include <functional>
9 #include <numeric>
10 %}
11 %include <std_vector.i>
12 
13 #if 1
14 %template(VectorStdCplx) std::vector<std::complex<double> >;
15 #endif
16 
17 %inline
18 {
Conj(std::complex<double> a)19   std::complex<double> Conj(std::complex<double> a)
20   {
21     return std::conj(a);
22   }
23 
Conjf(std::complex<float> a)24   std::complex<float> Conjf(std::complex<float>  a)
25   {
26     return std::conj(a);
27   }
28 
CopyHalf(std::vector<std::complex<double>> a)29   std::vector<std::complex<double> > CopyHalf(std::vector<std::complex<double> >  a)
30   {
31     std::vector<std::complex<double> > b(a.size()/2);
32     std::copy(a.begin(), a.begin()+a.size()/2, b.begin());
33     return b;
34   }
35 
36   using namespace std;
37 
38   struct ComplexPair
39   {
40     std::complex<double> z1;
41     complex<double> z2;
42   };
43 
Conj2(const complex<double> & a)44   const complex<double>& Conj2(const complex<double>& a)
45   {
46     static complex<double> ret;
47     ret = std::conj(a);
48     return ret;
49   }
50 
Conjf2(const complex<float> & a)51   const complex<float>& Conjf2(const complex<float>& a)
52   {
53     static complex<float> ret;
54     ret = std::conj(a);
55     return ret;
56   }
57 
CopyHalfRef(const vector<complex<double>> & a)58   const vector<complex<double> >& CopyHalfRef(const vector<complex<double> >&  a)
59   {
60     static vector<complex<double> > b;
61     b = CopyHalf(a);
62     return b;
63   }
64 }
65 
66 
67 #else
68 
69 
70 %{
71 %}
72 
73 %inline
74 {
75   complex Conj(complex a)
76   {
77     return conj(a);
78   }
79 
80 
81   complex float Conjf(float complex a)
82   {
83     return conj(a);
84   }
85 }
86 
87 
88 #endif
89