summaryrefslogtreecommitdiff
path: root/gnuradio-core/src/lib/swig/guile
diff options
context:
space:
mode:
Diffstat (limited to 'gnuradio-core/src/lib/swig/guile')
-rw-r--r--gnuradio-core/src/lib/swig/guile/std_complex.i30
1 files changed, 30 insertions, 0 deletions
diff --git a/gnuradio-core/src/lib/swig/guile/std_complex.i b/gnuradio-core/src/lib/swig/guile/std_complex.i
new file mode 100644
index 0000000000..cafcfeae3a
--- /dev/null
+++ b/gnuradio-core/src/lib/swig/guile/std_complex.i
@@ -0,0 +1,30 @@
+%{
+#include <complex>
+%}
+
+// To the target language, complex number conversion
+%typemap(out) complex, complex<double>, std::complex<double> {
+ $result = scm_make_rectangular( gh_double2scm ($1.real ()),
+ gh_double2scm ($1.imag ()) );
+}
+
+// To the target language, complex number conversion
+%typemap(out) complex, complex<float>, std::complex<float> {
+ $result = scm_make_rectangular( gh_double2scm ($1.real ()),
+ gh_double2scm ($1.imag ()) );
+}
+
+// From the target language, complex number conversion
+%typemap(in) complex, complex<double>, std::complex<double> {
+ $1 = std::complex<double>( gh_scm2double (scm_real_part ($input)),
+ gh_scm2double (scm_imag_part ($input)) );
+}
+
+// From the target language, complex number conversion
+%typemap(in) complex, complex<float>, std::complex<float> {
+ $1 = std::complex<float>( gh_scm2double (scm_real_part ($input)),
+ gh_scm2double (scm_imag_part ($input)) );
+}
+
+%typemaps_primitive(%checkcode(CPLXDBL), std::complex<double>);
+%typemaps_primitive(%checkcode(CPLXFLT), std::complex<float>);