From 3ad67771fe036c0027c5512d58c02a7c179b9941 Mon Sep 17 00:00:00 2001 From: Kim Kulling Date: Sat, 18 Feb 2023 17:09:14 +0100 Subject: [PATCH] Add missing pod types. --- CMakeLists.txt | 16 ++++++++++++---- include/assimp/metadata.h | 38 +++++++++++++++++++++++++++++++++++++- test/unit/utMetadata.cpp | 36 ++++++++++++++++++++++++++++++------ 3 files changed, 79 insertions(+), 11 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index e859986b7..0f0e5a793 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -84,10 +84,6 @@ OPTION( ASSIMP_NO_EXPORT "Disable Assimp's export functionality." OFF ) -OPTION( ASSIMP_BUILD_ZLIB - "Build your own zlib" - OFF -) OPTION( ASSIMP_BUILD_ASSIMP_TOOLS "If the supplementary tools for Assimp are built in addition to the library." OFF @@ -134,6 +130,18 @@ OPTION ( ASSIMP_IGNORE_GIT_HASH OFF ) +IF (WIN32) + OPTION( ASSIMP_BUILD_ZLIB + "Build your own zlib" + ON + ) +ELSE() + OPTION( ASSIMP_BUILD_ZLIB + "Build your own zlib" + OFF + ) +ENDIF() + IF (WIN32) # Use subset of Windows.h ADD_DEFINITIONS( -DWIN32_LEAN_AND_MEAN ) diff --git a/include/assimp/metadata.h b/include/assimp/metadata.h index d2ec837e9..c766d0ae2 100644 --- a/include/assimp/metadata.h +++ b/include/assimp/metadata.h @@ -56,6 +56,8 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include #endif +#include + // ------------------------------------------------------------------------------- /** * Enum used to distinguish data types @@ -70,7 +72,9 @@ typedef enum aiMetadataType { AI_AISTRING = 5, AI_AIVECTOR3D = 6, AI_AIMETADATA = 7, - AI_META_MAX = 8, + AI_INT64 = 8, + AI_UINT32 = 9, + AI_META_MAX = 10, #ifndef SWIG FORCE_32BIT = INT_MAX @@ -133,6 +137,12 @@ inline aiMetadataType GetAiType(const aiVector3D &) { inline aiMetadataType GetAiType(const aiMetadata &) { return AI_AIMETADATA; } +inline aiMetadataType GetAiType(int64_t) { + return AI_INT64; +} +inline aiMetadataType GetAiType(uint32_t) { + return AI_UINT32; +} #endif // __cplusplus @@ -215,6 +225,16 @@ struct aiMetadata { rhs.Get(static_cast(i), v); mValues[i].mData = new aiMetadata(v); } break; + case AI_INT64: { + int64_t v; + ::memcpy(&v, rhs.mValues[i].mData, sizeof(int64_t)); + mValues[i].mData = new int64_t(v); + } break; + case AI_UINT32: { + uint32_t v; + ::memcpy(&v, rhs.mValues[i].mData, sizeof(uint32_t)); + mValues[i].mData = new uint32_t(v); + } break; #ifndef SWIG case FORCE_32BIT: #endif @@ -267,6 +287,12 @@ struct aiMetadata { case AI_AIMETADATA: delete static_cast(data); break; + case AI_INT64: + delete static_cast(data); + break; + case AI_UINT32: + delete static_cast(data); + break; #ifndef SWIG case FORCE_32BIT: #endif @@ -510,6 +536,16 @@ struct aiMetadata { return false; } } break; + case AI_INT64: { + if (*static_cast(lhs.mValues[i].mData) != *static_cast(rhs.mValues[i].mData)) { + return false; + } + } break; + case AI_UINT32: { + if (*static_cast(lhs.mValues[i].mData) != *static_cast(rhs.mValues[i].mData)) { + return false; + } + } break; #ifndef SWIG case FORCE_32BIT: #endif diff --git a/test/unit/utMetadata.cpp b/test/unit/utMetadata.cpp index 514b1a4a4..676404c3c 100644 --- a/test/unit/utMetadata.cpp +++ b/test/unit/utMetadata.cpp @@ -5,8 +5,6 @@ Open Asset Import Library (assimp) Copyright (c) 2006-2022, assimp team - - All rights reserved. Redistribution and use of this software in source and binary forms, @@ -84,7 +82,7 @@ TEST_F( utMetadata, allocTest ) { } TEST_F( utMetadata, get_set_pod_Test ) { - m_data = aiMetadata::Alloc( 5 ); + m_data = aiMetadata::Alloc( 7 ); // int, 32 bit unsigned int index( 0 ); @@ -137,6 +135,28 @@ TEST_F( utMetadata, get_set_pod_Test ) { EXPECT_TRUE( success ); EXPECT_DOUBLE_EQ( 3.0, result_double ); + // int64_t + index++; + const std::string key_int64 = "test_int64"; + int64_t val_int64 = 64; + success = m_data->Set(index, key_int64, val_int64); + EXPECT_TRUE(success); + int64_t result_int64(0); + success = m_data->Get(key_int64, result_int64); + EXPECT_TRUE(success); + EXPECT_EQ(result_int64, val_int64); + + // uint32 + index++; + const std::string key_uint32 = "test_uint32"; + int64_t val_uint32 = 32; + success = m_data->Set(index, key_uint32, val_uint32); + EXPECT_TRUE(success); + int64_t result_uint32(0); + success = m_data->Get(key_uint32, result_uint32); + EXPECT_TRUE(success); + EXPECT_EQ(result_uint32, val_uint32); + // error int result; success = m_data->Get( "bla", result ); @@ -181,6 +201,7 @@ TEST_F( utMetadata, get_set_aiVector3D_Test ) { EXPECT_TRUE( success ); } + TEST_F( utMetadata, copy_test ) { m_data = aiMetadata::Alloc( AI_META_MAX ); bool bv = true; @@ -199,9 +220,12 @@ TEST_F( utMetadata, copy_test ) { m_data->Set( 6, "aiVector3D", vecVal ); aiMetadata metaVal; m_data->Set( 7, "aiMetadata", metaVal ); - - aiMetadata copy( *m_data ); - EXPECT_EQ( 8u, copy.mNumProperties ); + int64_t i64 = 64; + m_data->Set(8, "int64_t", i64); + uint32_t ui32 = 32; + m_data->Set(9, "uint32_t", ui32); + aiMetadata copy(*m_data); + EXPECT_EQ( 10u, copy.mNumProperties ); // bool test {