aboutsummaryrefslogtreecommitdiffstats
path: root/libshiboken
diff options
context:
space:
mode:
authorrenatofilho <renato.filho@openbossa.org>2010-10-27 17:11:03 -0300
committerHugo Parente Lima <hugo.pl@gmail.com>2012-03-08 16:08:53 -0300
commit80c24e13a41f48440cecdb5cff20f250343515a9 (patch)
tree6a07cdef6f664a4c3a10cde70d9ff2800a330f0b /libshiboken
parent1c3869ae5c7fb4c1812200671fedcc41e3c62d5e (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.cpp14
-rw-r--r--libshiboken/typeresolver.h18
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();