mirror of
https://github.com/nillerusr/source-engine.git
synced 2024-12-23 14:46:53 +00:00
66 lines
1.5 KiB
C++
66 lines
1.5 KiB
C++
// -*- C++ -*-
|
|
#ifndef SWIG_STD_COMPLEX_I_
|
|
#define SWIG_STD_COMPLEX_I_
|
|
|
|
#ifdef SWIG
|
|
|
|
%{
|
|
#include <complex>
|
|
%}
|
|
|
|
namespace std
|
|
{
|
|
template <class T> class complex;
|
|
|
|
%define specialize_std_complex(T)
|
|
|
|
%typemap(in) complex<T> {
|
|
if (PyComplex_Check($input)) {
|
|
$1 = std::complex<T>(PyComplex_RealAsDouble($input),
|
|
PyComplex_ImagAsDouble($input));
|
|
} else if (PyFloat_Check($input)) {
|
|
$1 = std::complex<T>(PyFloat_AsDouble($input), 0);
|
|
} else if (PyInt_Check($input)) {
|
|
$1 = std::complex<T>(PyInt_AsLong($input), 0);
|
|
}
|
|
else {
|
|
PyErr_SetString(PyExc_TypeError,"Expected a complex");
|
|
SWIG_fail;
|
|
}
|
|
}
|
|
|
|
%typemap(in) const complex<T>& (std::complex<T> temp) {
|
|
if (PyComplex_Check($input)) {
|
|
temp = std::complex<T>(PyComplex_RealAsDouble($input),
|
|
PyComplex_ImagAsDouble($input));
|
|
$1 = &temp;
|
|
} else if (PyFloat_Check($input)) {
|
|
temp = std::complex<T>(PyFloat_AsDouble($input), 0);
|
|
$1 = &temp;
|
|
} else if (PyInt_Check($input)) {
|
|
temp = std::complex<T>(PyInt_AsLong($input), 0);
|
|
$1 = &temp;
|
|
} else {
|
|
PyErr_SetString(PyExc_TypeError,"Expected a complex");
|
|
SWIG_fail;
|
|
}
|
|
}
|
|
|
|
%typemap(out) complex<T> {
|
|
$result = PyComplex_FromDoubles($1.real(), $1.imag());
|
|
}
|
|
|
|
%typemap(out) const complex<T> & {
|
|
$result = PyComplex_FromDoubles($1->real(), $1->imag());
|
|
}
|
|
|
|
%enddef
|
|
|
|
specialize_std_complex(double);
|
|
specialize_std_complex(float);
|
|
}
|
|
|
|
#endif // SWIG
|
|
|
|
#endif //SWIG_STD_COMPLEX_I_
|