diff options
author | renatofilho <renato.filho@openbossa.org> | 2010-10-27 17:11:03 -0300 |
---|---|---|
committer | Hugo Parente Lima <hugo.pl@gmail.com> | 2012-03-08 16:08:53 -0300 |
commit | 80c24e13a41f48440cecdb5cff20f250343515a9 (patch) | |
tree | 6a07cdef6f664a4c3a10cde70d9ff2800a330f0b /libshiboken | |
parent | 1c3869ae5c7fb4c1812200671fedcc41e3c62d5e (diff) |
Implemented support to conversion without memory allocation.
Reviewer: Luciano Wolf <luciano.wolf@openbossa.org>
Marcelo Lira <marcelo.lira@openbossa.org>
Diffstat (limited to 'libshiboken')
-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(); |