aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHugo Parente Lima <hugo.pl@gmail.com>2010-12-01 14:27:39 -0200
committerHugo Parente Lima <hugo.pl@gmail.com>2012-03-08 16:12:07 -0300
commit3cfac85d50b8f891a8230513a4b5a0f6aea67b3e (patch)
tree546bff5ad1910b6bdb0d54becc950a9bf8f218d1
parent96488c9cfd16c6ef9800c678c83d271343c2a813 (diff)
Remove SbkTypeInfo and CppObjectCopier structs, they aren't needed after the fix on qt_metacall.
-rw-r--r--generator/headergenerator.cpp13
-rw-r--r--generator/headergenerator.h1
-rw-r--r--libshiboken/conversions.h37
-rw-r--r--libshiboken/typeresolver.cpp4
-rw-r--r--libshiboken/typeresolver.h17
5 files changed, 9 insertions, 63 deletions
diff --git a/generator/headergenerator.cpp b/generator/headergenerator.cpp
index 3e242cc14..76206d32a 100644
--- a/generator/headergenerator.cpp
+++ b/generator/headergenerator.cpp
@@ -360,7 +360,6 @@ void HeaderGenerator::finishGeneration()
if (!metaClass->isNamespace()) {
writeSbkTypeFunction(typeFunctions, metaClass);
- writeSbkCopyCppObjectFunction(convDecl, metaClass);
writeTypeConverterDecl(convDecl, classType);
writeTypeConverterImpl(convImpl, classType);
convDecl << endl;
@@ -505,18 +504,6 @@ void HeaderGenerator::writeSbkTypeFunction(QTextStream& s, const AbstractMetaCla
<< "{ return reinterpret_cast<PyTypeObject*>(" << cpythonTypeNameExt(cppClass->typeEntry()) << "); }\n";
}
-void HeaderGenerator::writeSbkCopyCppObjectFunction(QTextStream& s, const AbstractMetaClass* metaClass)
-{
- if (!metaClass->typeEntry()->isValue() || !shouldGenerateCppWrapper(metaClass))
- return;
- QString className = metaClass->qualifiedCppName();
- s << "template <>" << endl;
- s << "struct SbkTypeInfo<" << className << " >" << endl;
- s << '{' << endl;
- s << INDENT << "static const bool isCppWrapper = true;" << endl;
- s << "};" << endl;
-}
-
void HeaderGenerator::writeTypeConverterImpl(QTextStream& s, const TypeEntry* type)
{
if (type->hasNativeConversionRule())
diff --git a/generator/headergenerator.h b/generator/headergenerator.h
index 96d63c640..d7502a9e1 100644
--- a/generator/headergenerator.h
+++ b/generator/headergenerator.h
@@ -47,7 +47,6 @@ private:
void writeTypeConverterDecl(QTextStream& s, const TypeEntry* type);
void writeSbkTypeFunction(QTextStream& s, const AbstractMetaEnum* cppEnum);
void writeSbkTypeFunction(QTextStream& s, const AbstractMetaClass* cppClass);
- void writeSbkCopyCppObjectFunction(QTextStream& s, const AbstractMetaClass* metaClass);
void writeTypeIndexDefineLine(QTextStream& s, const TypeEntry* typeEntry, int& idx);
void writeTypeIndexDefine(QTextStream& s, const AbstractMetaClass* metaClass, int& idx);
void writeTypeConverterImpl(QTextStream& s, const TypeEntry* type);
diff --git a/libshiboken/conversions.h b/libshiboken/conversions.h
index ed7dcc017..8b312dfe1 100644
--- a/libshiboken/conversions.h
+++ b/libshiboken/conversions.h
@@ -69,41 +69,6 @@ template<> inline PyTypeObject* SbkType<char>() { return &PyInt_Type; }
template<> inline PyTypeObject* SbkType<signed char>() { return &PyInt_Type; }
template<> inline PyTypeObject* SbkType<unsigned char>() { return &PyInt_Type; }
-template<typename T>
-struct SbkTypeInfo {
- static const bool isCppWrapper = false;
-};
-
-/**
- * This struct template is used to copy a C++ object using the proper
- * constructor, which could be the same type as used on the wrapped library
- * or a C++ wrapper type provided by the binding.
- */
-template <typename T, bool hasWrapper = SbkTypeInfo<T>::isCppWrapper>
-struct CppObjectCopier
-{
- static inline T* copy(const T& obj);
-};
-
-template<typename T>
-struct CppObjectCopier<T, false>
-{
- static inline T* copy(const T& obj)
- {
- return new T(obj);
- }
-};
-
-template<typename T>
-struct CppObjectCopier<T, true>
-{
- static inline T* copy(const T& obj)
- {
- return reinterpret_cast<T*>(ObjectType::copy(reinterpret_cast<SbkObjectType*>(SbkType<T>()), &obj));
- }
-};
-
-
/**
* Convenience template to create wrappers using the proper Python type for a given C++ class instance.
*/
@@ -152,7 +117,7 @@ struct Converter<T*>
if (PyObject_TypeCheck(pyobj, SbkType<T>()))
return (T*) Object::cppPointer(reinterpret_cast<SbkObject*>(pyobj), SbkType<T>());
else if (Converter<T>::isConvertible(pyobj))
- return CppObjectCopier<T>::copy(Converter<T>::toCpp(pyobj));
+ return new T(Converter<T>::toCpp(pyobj));
else if (pyobj == Py_None)
return 0;
diff --git a/libshiboken/typeresolver.cpp b/libshiboken/typeresolver.cpp
index 3d0cb11a2..8d3ce7a96 100644
--- a/libshiboken/typeresolver.cpp
+++ b/libshiboken/typeresolver.cpp
@@ -97,9 +97,9 @@ const char* TypeResolver::typeName() const
return m_d->typeName;
}
-void* TypeResolver::toCpp(PyObject* pyObj, void** place, bool alloc)
+void TypeResolver::toCpp(PyObject* pyObj, void** place)
{
- return m_d->pythonToCpp(pyObj, place, alloc);
+ m_d->pythonToCpp(pyObj, place);
}
void TypeResolver::deleteObject(void* object)
diff --git a/libshiboken/typeresolver.h b/libshiboken/typeresolver.h
index 6a3750c1b..d53d313f3 100644
--- a/libshiboken/typeresolver.h
+++ b/libshiboken/typeresolver.h
@@ -31,20 +31,15 @@ namespace Shiboken
/* To C++ convertion functions. */
template <typename T>
-inline void* pythonToValueType(PyObject* pyobj, void** data, bool alloc)
+inline void pythonToValueType(PyObject* pyobj, void** data)
{
- if (alloc)
- *data = Shiboken::CppObjectCopier<T>::copy(Shiboken::Converter<T>::toCpp(pyobj));
-
- *reinterpret_cast< T*>(*data) = Shiboken::Converter<T>::toCpp(pyobj);
- return *data;
+ *reinterpret_cast<T*>(*data) = Shiboken::Converter<T>::toCpp(pyobj);
}
template <typename T>
-inline void* pythonToObjectType(PyObject* pyobj, void** data, bool)
+inline void pythonToObjectType(PyObject* pyobj, void** data)
{
- *data = Shiboken::Converter<T*>::toCpp(pyobj);
- return *data;
+ *reinterpret_cast<T**>(*data) = Shiboken::Converter<T*>::toCpp(pyobj);
}
template <typename T>
@@ -70,7 +65,7 @@ public:
};
typedef PyObject* (*CppToPythonFunc)(void*);
- typedef void* (*PythonToCppFunc)(PyObject*, void**, bool);
+ typedef void (*PythonToCppFunc)(PyObject*, void**);
typedef void (*DeleteObjectFunc)(void*);
~TypeResolver();
@@ -92,7 +87,7 @@ public:
const char* typeName() const;
PyObject* toPython(void* cppObj);
- void* toCpp(PyObject* pyObj, void** place, bool alloc=false);
+ void toCpp(PyObject* pyObj, void** place);
void deleteObject(void* object);
PyTypeObject* pythonType();