diff octave_to_python.cc @ 320:c2aa34730dc9

Convert scalar struct into Python dict (fixes issue #57) * oct-py-types.cc, oct-py-types.h: New files for conversion of objects between Octave and Python APIs. * Makefile.am (COMMON_SOURCE_FILES, PYTAVE_HEADER_FILES): Include new files. * octave_to_python.cc (pytave::octvalue_to_pyobj): Add case to handle scalar struct instead of struct array. * @pyobject/pyobject.m: Add %!tests for pyobject from scalar struct and %!error tests for failure with struct array.
author Mike Miller <mtmiller@octave.org>
date Thu, 11 Aug 2016 16:12:35 -0700
parents a133564f4af7
children fd5881d48238
line wrap: on
line diff
--- a/octave_to_python.cc	Wed Aug 10 10:21:22 2016 -0700
+++ b/octave_to_python.cc	Thu Aug 11 16:12:35 2016 -0700
@@ -37,6 +37,7 @@
 #include "arrayobjectdefs.h"
 #include "exceptions.h"
 #include "octave_to_python.h"
+#include "oct-py-types.h"
 
 using namespace boost::python;
 
@@ -332,8 +333,11 @@
     else if (octvalue.is_numeric_type () || octvalue.is_string ()
              || octvalue.is_bool_type ())
       octvalue_to_pyarr (py_object, octvalue);
-    else if (octvalue.is_map ())
-      octmap_to_pyobject (py_object, octvalue.map_value ());
+    else if (octvalue.is_map () && octvalue.numel () == 1)
+      {
+        PyObject *obj = make_py_dict (octvalue.scalar_map_value ());
+        py_object = object (handle<PyObject> (obj));
+      }
     else if (octvalue.is_object () && octvalue.class_name () == "pyobject")
       {
         octave_value_list tmp = feval ("getid", ovl (octvalue), 1);