Mercurial > pytave
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);