Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add missing pod types. #4967

Merged
merged 1 commit into from Feb 19, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
16 changes: 12 additions & 4 deletions CMakeLists.txt
Expand Up @@ -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
Expand Down Expand Up @@ -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 )
Expand Down
38 changes: 37 additions & 1 deletion include/assimp/metadata.h
Expand Up @@ -56,6 +56,8 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#include <stdint.h>
#endif

#include <assimp/quaternion.h>

// -------------------------------------------------------------------------------
/**
* Enum used to distinguish data types
Expand All @@ -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
Expand Down Expand Up @@ -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

Expand Down Expand Up @@ -215,6 +225,16 @@ struct aiMetadata {
rhs.Get<aiMetadata>(static_cast<unsigned int>(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
Expand Down Expand Up @@ -267,6 +287,12 @@ struct aiMetadata {
case AI_AIMETADATA:
delete static_cast<aiMetadata *>(data);
break;
case AI_INT64:
delete static_cast<int64_t *>(data);
break;
case AI_UINT32:
delete static_cast<uint32_t *>(data);
break;
#ifndef SWIG
case FORCE_32BIT:
#endif
Expand Down Expand Up @@ -510,6 +536,16 @@ struct aiMetadata {
return false;
}
} break;
case AI_INT64: {
if (*static_cast<int64_t *>(lhs.mValues[i].mData) != *static_cast<int64_t *>(rhs.mValues[i].mData)) {
return false;
}
} break;
case AI_UINT32: {
if (*static_cast<uint32_t *>(lhs.mValues[i].mData) != *static_cast<uint32_t *>(rhs.mValues[i].mData)) {
return false;
}
} break;
#ifndef SWIG
case FORCE_32BIT:
#endif
Expand Down
36 changes: 30 additions & 6 deletions test/unit/utMetadata.cpp
Expand Up @@ -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,
Expand Down Expand Up @@ -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 );
Expand Down Expand Up @@ -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 );
Expand Down Expand Up @@ -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;
Expand All @@ -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
{
Expand Down