2 #ifndef SWIG_STD_COMPLEX_I_
3 #define SWIG_STD_COMPLEX_I_
13 template <class T> class complex;
15 %define specialize_std_complex(T)
17 %typemap(in) complex<T> {
18 if (PyComplex_Check($input)) {
19 $1 = std::complex<T>(PyComplex_RealAsDouble($input),
20 PyComplex_ImagAsDouble($input));
21 } else if (PyFloat_Check($input)) {
22 $1 = std::complex<T>(PyFloat_AsDouble($input), 0);
23 } else if (PyInt_Check($input)) {
24 $1 = std::complex<T>(PyInt_AsLong($input), 0);
27 PyErr_SetString(PyExc_TypeError,"Expected a complex");
32 %typemap(in) const complex<T>& (std::complex<T> temp) {
33 if (PyComplex_Check($input)) {
34 temp = std::complex<T>(PyComplex_RealAsDouble($input),
35 PyComplex_ImagAsDouble($input));
37 } else if (PyFloat_Check($input)) {
38 temp = std::complex<T>(PyFloat_AsDouble($input), 0);
40 } else if (PyInt_Check($input)) {
41 temp = std::complex<T>(PyInt_AsLong($input), 0);
44 PyErr_SetString(PyExc_TypeError,"Expected a complex");
49 %typemap(out) complex<T> {
50 $result = PyComplex_FromDoubles($1.real(), $1.imag());
53 %typemap(out) const complex<T> & {
54 $result = PyComplex_FromDoubles($1->real(), $1->imag());
59 specialize_std_complex(double);
60 specialize_std_complex(float);
65 #endif //SWIG_STD_COMPLEX_I_