Browse Source

usage of dynamic_cast instead of static_cast

CwTCwT 7 years ago
parent
commit
9415380b4c
3 changed files with 10 additions and 8 deletions
  1. 6 4
      code/BlenderCustomData.cpp
  2. 2 2
      code/BlenderCustomData.h
  3. 2 2
      code/BlenderLoader.cpp

+ 6 - 4
code/BlenderCustomData.cpp

@@ -24,11 +24,11 @@ namespace Assimp {
         */
         */
         typedef bool        (*PRead)(ElemBase *pOut, const size_t cnt, const FileDatabase &db);
         typedef bool        (*PRead)(ElemBase *pOut, const size_t cnt, const FileDatabase &db);
         typedef ElemBase *  (*PCreate)(const size_t cnt);
         typedef ElemBase *  (*PCreate)(const size_t cnt);
-        typedef void        (*PDestroy)(ElemBase *);
+        typedef void(*PDestroy)(ElemBase *);
 
 
 #define IMPL_STRUCT_READ(ty)                                                    \
 #define IMPL_STRUCT_READ(ty)                                                    \
         bool read##ty(ElemBase *v, const size_t cnt, const FileDatabase &db) {  \
         bool read##ty(ElemBase *v, const size_t cnt, const FileDatabase &db) {  \
-            return read<ty>(db.dna[#ty], static_cast<ty *>(v), cnt, db);        \
+            return read<ty>(db.dna[#ty], dynamic_cast<ty *>(v), cnt, db);       \
         }
         }
 
 
 #define IMPL_STRUCT_CREATE(ty)                                                  \
 #define IMPL_STRUCT_CREATE(ty)                                                  \
@@ -37,7 +37,8 @@ namespace Assimp {
         }
         }
 
 
 #define IMPL_STRUCT_DESTROY(ty)                                                 \
 #define IMPL_STRUCT_DESTROY(ty)                                                 \
-        void destroy##ty(ElemBase *p) {                                         \
+        void destroy##ty(ElemBase *pE) {                                        \
+            ty *p = dynamic_cast<ty *>(pE);                                     \
             delete[]p;                                                          \
             delete[]p;                                                          \
         }
         }
 
 
@@ -172,7 +173,8 @@ namespace Assimp {
             return nullptr;
             return nullptr;
         }
         }
 
 
-        const void * getCustomDataLayerData(const CustomData &customdata, const CustomDataType cdtype, const std::string &name) {
+        const ElemBase * getCustomDataLayerData(const CustomData &customdata, const CustomDataType cdtype, const std::string &name)
+        {
             const std::shared_ptr<CustomDataLayer> pLayer = getCustomDataLayer(customdata, cdtype, name);
             const std::shared_ptr<CustomDataLayer> pLayer = getCustomDataLayer(customdata, cdtype, name);
             if (pLayer && pLayer->data) {
             if (pLayer && pLayer->data) {
                 return pLayer->data.get();
                 return pLayer->data.get();

+ 2 - 2
code/BlenderCustomData.h

@@ -82,8 +82,8 @@ namespace Assimp {
         *   @param[in]  customdata CustomData to search for wanted layer
         *   @param[in]  customdata CustomData to search for wanted layer
         *   @param[in]  cdtype to search for
         *   @param[in]  cdtype to search for
         *   @param[in]  name to search for
         *   @param[in]  name to search for
-        *   @return CustomDataLayer * or nullptr if not found
+        *   @return * to struct data or nullptr if not found
         */
         */
-        const void * getCustomDataLayerData(const CustomData &customdata, CustomDataType cdtype, const std::string &name);
+        const ElemBase * getCustomDataLayerData(const CustomData &customdata, CustomDataType cdtype, const std::string &name);
     }
     }
 }
 }

+ 2 - 2
code/BlenderLoader.cpp

@@ -1039,9 +1039,9 @@ void BlenderImporter::ConvertMesh(const Scene& /*in*/, const Object* /*obj*/, co
         for (uint32_t t = 0; t < maxTex; ++t) {
         for (uint32_t t = 0; t < maxTex; ++t) {
             if (pMat->mtex[t] && pMat->mtex[t]->uvname[0]) {
             if (pMat->mtex[t] && pMat->mtex[t]->uvname[0]) {
                 // get the CustomData layer for given uvname and correct type
                 // get the CustomData layer for given uvname and correct type
-                const MLoopUV *pLoop = static_cast<const MLoopUV*>(getCustomDataLayerData(mesh->ldata, CD_MLOOPUV, pMat->mtex[t]->uvname));
+                const ElemBase *pLoop = getCustomDataLayerData(mesh->ldata, CD_MLOOPUV, pMat->mtex[t]->uvname);
                 if (pLoop) {
                 if (pLoop) {
-                    texuv.insert(std::make_pair(t, pLoop));
+                    texuv.insert(std::make_pair(t, dynamic_cast<const MLoopUV *>(pLoop)));
                 }
                 }
             }
             }
         }
         }