summaryrefslogtreecommitdiffstats
path: root/src/3rdparty/assimp/include/assimp/metadata.h
diff options
context:
space:
mode:
authorAndy Nichols <andy.nichols@theqtcompany.com>2015-05-16 17:13:57 +0200
committerSean Harmer <sean.harmer@kdab.com>2015-08-02 11:09:06 +0000
commitef4ee5a2d31910e0109ba0d6eda1d2a6bfc3124c (patch)
tree25aa21d1ddce5c5264637b3f0a65cfdd16bd6497 /src/3rdparty/assimp/include/assimp/metadata.h
parentcbeade7bde94a795eed14cdeadcb79184fa87858 (diff)
Re-add libassimp 3.1.1 to 3rd party
Previously the assimp library was a dependency that was always built, but it is possible to use an external system version if one is available. It is however non- trivial to provide the dependency on platforms other than Linux, so now we provide a copy of libassimp for use when it is not already available. This commit is a combination of reverting commit 672b3e47299f6ba0034f73b252d0436b55fb3085 which removed assimp and introduced the scene parser, and adding the logic to use the system version when available. Change-Id: Ia05f9a92b8d82f19a0db3588b2bbeafe71404386 Reviewed-by: Sean Harmer <sean.harmer@kdab.com>
Diffstat (limited to 'src/3rdparty/assimp/include/assimp/metadata.h')
-rw-r--r--src/3rdparty/assimp/include/assimp/metadata.h247
1 files changed, 247 insertions, 0 deletions
diff --git a/src/3rdparty/assimp/include/assimp/metadata.h b/src/3rdparty/assimp/include/assimp/metadata.h
new file mode 100644
index 000000000..16809a511
--- /dev/null
+++ b/src/3rdparty/assimp/include/assimp/metadata.h
@@ -0,0 +1,247 @@
+/*
+---------------------------------------------------------------------------
+Open Asset Import Library (assimp)
+---------------------------------------------------------------------------
+
+Copyright (c) 2006-2012, assimp team
+
+All rights reserved.
+
+Redistribution and use of this software in source and binary forms,
+with or without modification, are permitted provided that the following
+conditions are met:
+
+* Redistributions of source code must retain the above
+ copyright notice, this list of conditions and the
+ following disclaimer.
+
+* Redistributions in binary form must reproduce the above
+ copyright notice, this list of conditions and the
+ following disclaimer in the documentation and/or other
+ materials provided with the distribution.
+
+* Neither the name of the assimp team, nor the names of its
+ contributors may be used to endorse or promote products
+ derived from this software without specific prior
+ written permission of the assimp team.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+---------------------------------------------------------------------------
+*/
+
+/** @file metadata.h
+ * @brief Defines the data structures for holding node meta information.
+ */
+#ifndef __AI_METADATA_H_INC__
+#define __AI_METADATA_H_INC__
+
+#include <assert.h>
+
+#if defined(_MSC_VER) && (_MSC_VER <= 1500)
+#include "Compiler/pstdint.h"
+#else
+#include <stdint.h>
+#endif
+
+
+
+// -------------------------------------------------------------------------------
+/**
+ * Enum used to distinguish data types
+ */
+ // -------------------------------------------------------------------------------
+typedef enum aiMetadataType
+{
+ AI_BOOL = 0,
+ AI_INT = 1,
+ AI_UINT64 = 2,
+ AI_FLOAT = 3,
+ AI_AISTRING = 4,
+ AI_AIVECTOR3D = 5,
+
+#ifndef SWIG
+ FORCE_32BIT = INT_MAX
+#endif
+} aiMetadataType;
+
+
+
+// -------------------------------------------------------------------------------
+/**
+ * Metadata entry
+ *
+ * The type field uniquely identifies the underlying type of the data field
+ */
+ // -------------------------------------------------------------------------------
+struct aiMetadataEntry
+{
+ aiMetadataType mType;
+ void* mData;
+};
+
+
+
+#ifdef __cplusplus
+
+#include <string>
+
+
+
+// -------------------------------------------------------------------------------
+/**
+ * Helper functions to get the aiType enum entry for a type
+ */
+ // -------------------------------------------------------------------------------
+inline aiMetadataType GetAiType( bool ) { return AI_BOOL; }
+inline aiMetadataType GetAiType( int ) { return AI_INT; }
+inline aiMetadataType GetAiType( uint64_t ) { return AI_UINT64; }
+inline aiMetadataType GetAiType( float ) { return AI_FLOAT; }
+inline aiMetadataType GetAiType( aiString ) { return AI_AISTRING; }
+inline aiMetadataType GetAiType( aiVector3D ) { return AI_AIVECTOR3D; }
+
+
+
+#endif
+
+
+
+// -------------------------------------------------------------------------------
+/**
+ * Container for holding metadata.
+ *
+ * Metadata is a key-value store using string keys and values.
+ */
+ // -------------------------------------------------------------------------------
+struct aiMetadata
+{
+ /** Length of the mKeys and mValues arrays, respectively */
+ unsigned int mNumProperties;
+
+ /** Arrays of keys, may not be NULL. Entries in this array may not be NULL as well. */
+ C_STRUCT aiString* mKeys;
+
+ /** Arrays of values, may not be NULL. Entries in this array may be NULL if the
+ * corresponding property key has no assigned value. */
+ C_STRUCT aiMetadataEntry* mValues;
+
+#ifdef __cplusplus
+
+ /** Constructor */
+ aiMetadata()
+ // set all members to zero by default
+ : mNumProperties(0)
+ , mKeys(NULL)
+ , mValues(NULL)
+ {}
+
+
+ /** Destructor */
+ ~aiMetadata()
+ {
+ delete[] mKeys;
+ mKeys = NULL;
+ if (mValues)
+ {
+ // Delete each metadata entry
+ for (unsigned i=0; i<mNumProperties; ++i)
+ {
+ void* data = mValues[i].mData;
+ switch (mValues[i].mType)
+ {
+ case AI_BOOL:
+ delete static_cast<bool*>(data);
+ break;
+ case AI_INT:
+ delete static_cast<int*>(data);
+ break;
+ case AI_UINT64:
+ delete static_cast<uint64_t*>(data);
+ break;
+ case AI_FLOAT:
+ delete static_cast<float*>(data);
+ break;
+ case AI_AISTRING:
+ delete static_cast<aiString*>(data);
+ break;
+ case AI_AIVECTOR3D:
+ delete static_cast<aiVector3D*>(data);
+ break;
+ default:
+ assert(false);
+ break;
+ }
+ }
+
+ // Delete the metadata array
+ delete [] mValues;
+ mValues = NULL;
+ }
+ }
+
+
+
+ template<typename T>
+ inline void Set( unsigned index, const std::string& key, const T& value )
+ {
+ // In range assertion
+ assert(index < mNumProperties);
+
+ // Set metadata key
+ mKeys[index] = key;
+
+ // Set metadata type
+ mValues[index].mType = GetAiType(value);
+ // Copy the given value to the dynamic storage
+ mValues[index].mData = new T(value);
+ }
+
+ template<typename T>
+ inline bool Get( unsigned index, T& value )
+ {
+ // In range assertion
+ assert(index < mNumProperties);
+
+ // Return false if the output data type does
+ // not match the found value's data type
+ if ( GetAiType( value ) != mValues[ index ].mType ) {
+ return false;
+ }
+
+ // Otherwise, output the found value and
+ // return true
+ value = *static_cast<T*>(mValues[index].mData);
+ return true;
+ }
+
+ template<typename T>
+ inline bool Get( const aiString& key, T& value )
+ {
+ // Search for the given key
+ for (unsigned i=0; i<mNumProperties; ++i)
+ if (mKeys[i]==key)
+ return Get(i, value);
+ return false;
+ }
+
+ template<typename T>
+ inline bool Get( const std::string& key, T& value ) {
+ return Get(aiString(key), value);
+ }
+
+#endif // __cplusplus
+
+};
+
+#endif // __AI_METADATA_H_INC__
+
+