summaryrefslogtreecommitdiff
path: root/share/swig/2.0.11/ocaml/std_complex.i
diff options
context:
space:
mode:
Diffstat (limited to 'share/swig/2.0.11/ocaml/std_complex.i')
-rw-r--r--share/swig/2.0.11/ocaml/std_complex.i65
1 files changed, 65 insertions, 0 deletions
diff --git a/share/swig/2.0.11/ocaml/std_complex.i b/share/swig/2.0.11/ocaml/std_complex.i
new file mode 100644
index 0000000..5192261
--- /dev/null
+++ b/share/swig/2.0.11/ocaml/std_complex.i
@@ -0,0 +1,65 @@
+// -*- 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_