/trunk/Lib/ocaml/std_complex.i
Swig | 65 lines | 53 code | 12 blank | 0 comment | 0 complexity | d5e70cf8897dcd283f3ca43035cd97ee MD5 | raw file
Possible License(s): LGPL-2.1, Cube, GPL-3.0, 0BSD, GPL-2.0
- // -*- 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_