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