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/typeresolver.h | |
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/typeresolver.h')
-rw-r--r-- | libshiboken/typeresolver.h | 18 |
1 files changed, 11 insertions, 7 deletions
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(); |