From c0c093d485798aec96ea7a7230c0639797cd9830 Mon Sep 17 00:00:00 2001 From: Hugo Lima Date: Mon, 29 Mar 2010 17:47:02 -0300 Subject: Add support for multiple inheritance involving more than one C++ object. --- libshiboken/conversions.h | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) (limited to 'libshiboken/conversions.h') diff --git a/libshiboken/conversions.h b/libshiboken/conversions.h index 521e5f576..b1d57eb61 100644 --- a/libshiboken/conversions.h +++ b/libshiboken/conversions.h @@ -153,7 +153,7 @@ struct Converter if (pyobj == Py_None) return 0; else if (Shiboken_TypeCheck(pyobj, T)) - return (T*) SbkBaseWrapper_cptr(pyobj); + return (T*) getCppPointer(pyobj, SbkType()); else if (Converter::isConvertible(pyobj)) return CppObjectCopier::copy(Converter::toCpp(pyobj)); return 0; @@ -192,7 +192,8 @@ struct Converter { if (pyobj == Py_None) return 0; - return SbkBaseWrapper_cptr(pyobj); + // When someone request a void pointer, just give to him the first C++ object in the class hierarchy + return reinterpret_cast(pyobj)->cptr[0]; } }; template <> struct Converter : Converter {}; @@ -236,7 +237,7 @@ struct ValueTypeConverter return *cptr; } } - return *reinterpret_cast(reinterpret_cast(pyobj)->cptr); + return *reinterpret_cast(getCppPointer(pyobj, SbkType())); } }; @@ -269,8 +270,8 @@ struct ObjectTypeConverter return 0; SbkBaseWrapperType* shiboType = reinterpret_cast(pyobj->ob_type); if (shiboType->mi_specialcast) - return (T*) shiboType->mi_specialcast(SbkBaseWrapper_cptr(pyobj), reinterpret_cast(SbkType())); - return (T*) SbkBaseWrapper_cptr(pyobj); + return (T*) shiboType->mi_specialcast(getCppPointer(pyobj, SbkType()), reinterpret_cast(SbkType())); + return (T*) getCppPointer(pyobj, SbkType()); } }; @@ -551,7 +552,7 @@ struct StdListConverter static StdList toCpp(PyObject* pyobj) { if (PyObject_TypeCheck(pyobj, SbkType())) - return *reinterpret_cast(SbkBaseWrapper_cptr(pyobj)); + return *reinterpret_cast(getCppPointer(pyobj, SbkType())); StdList result; for (int i = 0; i < PySequence_Size(pyobj); i++) { -- cgit v1.2.3