diff options
author | Paul Lemire <paul.lemire@kdab.com> | 2015-07-20 09:10:08 +0200 |
---|---|---|
committer | Sean Harmer <sean.harmer@kdab.com> | 2015-07-28 09:49:19 +0000 |
commit | 90623e3ccbeba4f498b3ce5c1b6c88f1122df434 (patch) | |
tree | 2e7a5b59b3d6830d0f0d70f1c1cec5cb6f355a9e /src/plugins | |
parent | 3fe37f854dcaa2d92e8936ccddd07800fb4d04d3 (diff) |
Functors: remove dynamic_cast
Introduce a QAbstractFunctor class which QAbstractMeshFunctor and
QTextureDataFunctor subclass
Make all QAbstractFunctor subclasses implement an id() function (using
QT3D_FUNCTOR(Class)).
Use this id to compare to other QAbstractMeshFunctor and eventually
static_cast into right type if possible using the functor_cast member
function.
Change-Id: Iface956e6cd818cbef204d8fa7bf2bc23c6ffa3f
Reviewed-by: Sean Harmer <sean.harmer@kdab.com>
Diffstat (limited to 'src/plugins')
-rw-r--r-- | src/plugins/sceneparsers/assimp/assimpparser.cpp | 32 |
1 files changed, 19 insertions, 13 deletions
diff --git a/src/plugins/sceneparsers/assimp/assimpparser.cpp b/src/plugins/sceneparsers/assimp/assimpparser.cpp index 272cc533a..351faa281 100644 --- a/src/plugins/sceneparsers/assimp/assimpparser.cpp +++ b/src/plugins/sceneparsers/assimp/assimpparser.cpp @@ -267,15 +267,18 @@ private: QMeshDataPtr m_meshData; QT3D_CLONEABLE(AssimpMesh) - class AssimpMeshFunctor : public QAbstractMeshFunctor - { - public: - explicit AssimpMeshFunctor(QMeshDataPtr meshData); - QMeshDataPtr operator()() Q_DECL_OVERRIDE; - bool operator ==(const QAbstractMeshFunctor &other) const Q_DECL_OVERRIDE; - private: - QMeshDataPtr m_meshData; - }; +}; + +class AssimpMeshFunctor : public QAbstractMeshFunctor +{ +public: + explicit AssimpMeshFunctor(QMeshDataPtr meshData = QMeshDataPtr()); + QMeshDataPtr operator()() Q_DECL_OVERRIDE; + bool operator ==(const QAbstractMeshFunctor &other) const Q_DECL_OVERRIDE; + QT3D_FUNCTOR(AssimpMeshFunctor) + +private: + QMeshDataPtr m_meshData; }; class AssimpRawTextureImage : public QAbstractTextureImage @@ -300,6 +303,7 @@ private: TexImageDataPtr operator()() Q_DECL_FINAL; bool operator ==(const QTextureDataFunctor &other) const Q_DECL_FINAL; + QT3D_FUNCTOR(AssimpRawTextureImageFunctor) private: QByteArray m_data; }; @@ -917,18 +921,18 @@ QAbstractMeshFunctorPtr AssimpMesh::meshFunctor() const return QAbstractMeshFunctorPtr(new AssimpMeshFunctor(m_meshData)); } -AssimpMesh::AssimpMeshFunctor::AssimpMeshFunctor(QMeshDataPtr meshData) +AssimpMeshFunctor::AssimpMeshFunctor(QMeshDataPtr meshData) : QAbstractMeshFunctor() , m_meshData(meshData) { } -QMeshDataPtr AssimpMesh::AssimpMeshFunctor::operator()() +QMeshDataPtr AssimpMeshFunctor::operator()() { return m_meshData; } -bool AssimpMesh::AssimpMeshFunctor::operator ==(const QAbstractMeshFunctor &) const +bool AssimpMeshFunctor::operator ==(const QAbstractMeshFunctor &) const { return false; } @@ -966,7 +970,7 @@ TexImageDataPtr AssimpRawTextureImage::AssimpRawTextureImageFunctor::operator()( bool AssimpRawTextureImage::AssimpRawTextureImageFunctor::operator ==(const QTextureDataFunctor &other) const { - const AssimpRawTextureImageFunctor *otherFunctor = dynamic_cast<const AssimpRawTextureImageFunctor *>(&other); + const AssimpRawTextureImageFunctor *otherFunctor = functor_cast<AssimpRawTextureImageFunctor>(&other); return (otherFunctor != Q_NULLPTR && otherFunctor->m_data == m_data); } @@ -986,4 +990,6 @@ AssimpParser::SceneImporter::~SceneImporter() QT_END_NAMESPACE +Q_DECLARE_METATYPE(Qt3D::AssimpMeshFunctor) + #include "assimpparser.moc" |