diff options
-rw-r--r-- | libshiboken/typeresolver.cpp | 14 | ||||
-rw-r--r-- | libshiboken/typeresolver.h | 18 |
2 files changed, 18 insertions, 14 deletions
diff --git a/libshiboken/typeresolver.cpp b/libshiboken/typeresolver.cpp index 89bc63293..3d0cb11a2 100644 --- a/libshiboken/typeresolver.cpp +++ b/libshiboken/typeresolver.cpp @@ -97,14 +97,9 @@ const char* TypeResolver::typeName() const return m_d->typeName; } -void* TypeResolver::toCpp(PyObject* pyObj) +void* TypeResolver::toCpp(PyObject* pyObj, void** place, bool alloc) { - return m_d->pythonToCpp(pyObj); -} - -PyObject* TypeResolver::toPython(void* cppObj) -{ - return m_d->cppToPython(cppObj); + return m_d->pythonToCpp(pyObj, place, alloc); } void TypeResolver::deleteObject(void* object) @@ -113,6 +108,11 @@ void TypeResolver::deleteObject(void* object) m_d->deleteObject(object); } +PyObject* TypeResolver::toPython(void* cppObj) +{ + return m_d->cppToPython(cppObj); +} + PyTypeObject* TypeResolver::pythonType() { return m_d->pyType; diff --git a/libshiboken/typeresolver.h b/libshiboken/typeresolver.h index 18593551c..b11678e2b 100644 --- a/libshiboken/typeresolver.h +++ b/libshiboken/typeresolver.h @@ -33,15 +33,20 @@ class SbkBaseWrapperType; /* To C++ convertion functions. */ template <typename T> -inline void* pythonToValueType(PyObject* pyobj) +inline void* pythonToValueType(PyObject* pyobj, void** data, bool alloc) { - return Shiboken::CppObjectCopier<T>::copy(Shiboken::Converter<T>::toCpp(pyobj)); + if (alloc) + *data = Shiboken::CppObjectCopier<T>::copy(Shiboken::Converter<T>::toCpp(pyobj)); + + *reinterpret_cast< T*>(*data) = Shiboken::Converter<T>::toCpp(pyobj); + return *data; } template <typename T> -inline void* pythonToObjectType(PyObject* pyobj) +inline void* pythonToObjectType(PyObject* pyobj, void** data, bool) { - return Shiboken::Converter<T*>::toCpp(pyobj); + *data = Shiboken::Converter<T*>::toCpp(pyobj); + return *data; } template <typename T> @@ -73,9 +78,8 @@ public: }; typedef PyObject* (*CppToPythonFunc)(void*); - typedef void* (*PythonToCppFunc)(PyObject*); + typedef void* (*PythonToCppFunc)(PyObject*, void**, bool); typedef void (*DeleteObjectFunc)(void*); - typedef PyTypeObject* (*GetPyTypeFunc)(); ~TypeResolver(); @@ -96,7 +100,7 @@ public: const char* typeName() const; PyObject* toPython(void* cppObj); - void* toCpp(PyObject* pyObj); + void* toCpp(PyObject* pyObj, void** place, bool alloc=false); void deleteObject(void* object); PyTypeObject* pythonType(); |