%module complextest %include #ifdef __cplusplus %{ #include #include #include %} %include #if 1 %template(VectorStdCplx) std::vector >; #endif %inline { std::complex Conj(std::complex a) { return std::conj(a); } std::complex Conjf(std::complex a) { return std::conj(a); } std::vector > CopyHalf(std::vector > a) { std::vector > b(a.size()/2); std::copy(a.begin(), a.begin()+a.size()/2, b.begin()); return b; } using namespace std; struct ComplexPair { std::complex z1; complex z2; }; const complex& Conj2(const complex& a) { static complex ret; ret = std::conj(a); return ret; } const complex& Conjf2(const complex& a) { static complex ret; ret = std::conj(a); return ret; } const vector >& CopyHalfRef(const vector >& a) { static vector > b; b = CopyHalf(a); return b; } } #else %{ %} %inline { complex Conj(complex a) { return conj(a); } complex float Conjf(float complex a) { return conj(a); } } #endif