aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-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();