aboutsummaryrefslogtreecommitdiffstats
path: root/libshiboken/sbkconverter.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'libshiboken/sbkconverter.cpp')
-rw-r--r--libshiboken/sbkconverter.cpp25
1 files changed, 21 insertions, 4 deletions
diff --git a/libshiboken/sbkconverter.cpp b/libshiboken/sbkconverter.cpp
index b252e16c7..c5e64f3dd 100644
--- a/libshiboken/sbkconverter.cpp
+++ b/libshiboken/sbkconverter.cpp
@@ -41,7 +41,8 @@ static SbkConverter* createConverterObject(PyTypeObject* type,
converter->pointerToPython = pointerToPythonFunc;
converter->copyToPython = copyToPythonFunc;
- converter->toCppPointerConversion = std::make_pair(toCppPointerCheckFunc, toCppPointerConvFunc);
+ if (toCppPointerCheckFunc && toCppPointerConvFunc)
+ converter->toCppPointerConversion = std::make_pair(toCppPointerCheckFunc, toCppPointerConvFunc);
converter->toCppConversions.clear();
return converter;
@@ -60,6 +61,11 @@ SbkConverter* createConverter(SbkObjectType* type,
return converter;
}
+SbkConverter* createConverter(PyTypeObject* type, CppToPythonFunc toPythonFunc)
+{
+ return createConverterObject(type, 0, 0, 0, toPythonFunc);
+}
+
void deleteConverter(SbkConverter* converter)
{
if (converter) {
@@ -178,16 +184,27 @@ void pythonToCppPointer(SbkObjectType* type, PyObject* pyIn, void* cppOut)
*((void**)cppOut) = (pyIn == Py_None) ? 0 : cppPointer((PyTypeObject*)type, (SbkObject*)pyIn);
}
-void pythonToCppCopy(SbkObjectType* type, PyObject* pyIn, void* cppOut)
+static void _pythonToCppCopy(SbkConverter* converter, PyObject* pyIn, void* cppOut)
{
- assert(type);
+ assert(converter);
assert(pyIn);
assert(cppOut);
- PythonToCppFunc toCpp = IsPythonToCppConvertible(type->d->converter, pyIn);
+ PythonToCppFunc toCpp = IsPythonToCppConvertible(converter, pyIn);
if (toCpp)
toCpp(pyIn, cppOut);
}
+void pythonToCppCopy(SbkObjectType* type, PyObject* pyIn, void* cppOut)
+{
+ assert(type);
+ _pythonToCppCopy(type->d->converter, pyIn, cppOut);
+}
+
+void pythonToCpp(SbkConverter* converter, PyObject* pyIn, void* cppOut)
+{
+ _pythonToCppCopy(converter, pyIn, cppOut);
+}
+
bool isImplicitConversion(SbkObjectType* type, PythonToCppFunc toCppFunc)
{
// This is the Object Type or Value Type conversion that only