Browse Source

[2994288] AI_BE / AI_LE macros - Thanks to mick-p for the patch.
Add shared_ptr to pch includes.

git-svn-id: https://assimp.svn.sourceforge.net/svnroot/assimp/trunk@712 67173fc5-114c-0410-ac8e-9d2fd5bffc1f

aramis_acg 15 years ago
parent
commit
c224dfaf81
2 changed files with 39 additions and 0 deletions
  1. 1 0
      code/AssimpPCH.h
  2. 38 0
      code/ByteSwap.h

+ 1 - 0
code/AssimpPCH.h

@@ -134,6 +134,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 #include "qnan.h"
 #include "qnan.h"
 
 
 // ----------------------------------------------------------------------------------------
 // ----------------------------------------------------------------------------------------
+#include <boost/shared_ptr.hpp>
 #include <boost/scoped_ptr.hpp>
 #include <boost/scoped_ptr.hpp>
 #include <boost/scoped_array.hpp>
 #include <boost/scoped_array.hpp>
 #include <boost/format.hpp>
 #include <boost/format.hpp>

+ 38 - 0
code/ByteSwap.h

@@ -162,6 +162,40 @@ public:
 	static inline void Swap(uint64_t* fOut) {
 	static inline void Swap(uint64_t* fOut) {
 		Swap8(fOut);
 		Swap8(fOut);
 	}
 	}
+
+	// ----------------------------------------------------------------------
+	//! Templatized ByteSwap
+	//! \returns param tOut as swapped
+	template<typename Type> 
+	static inline Type Swapped(Type tOut)
+	{
+		return _swapper<Type,sizeof(Type)>()(tOut);
+	}
+
+private:
+
+	template <typename T, size_t size> struct _swapper;
+};
+
+template <typename T> struct ByteSwap::_swapper<T,2> {
+	T operator() (T tOut) {
+		Swap2(&tOut); 
+		return tOut;
+	}
+};
+
+template <typename T> struct ByteSwap::_swapper<T,4> {
+	T operator() (T tOut) {
+		Swap4(&tOut); 
+		return tOut;
+	}
+};
+
+template <typename T> struct ByteSwap::_swapper<T,8> {
+	T operator() (T tOut) {
+		Swap8(&tOut); 
+		return tOut;
+	}
 };
 };
 
 
 } // Namespace Assimp
 } // Namespace Assimp
@@ -171,6 +205,8 @@ public:
 // ByteSwap macros for BigEndian/LittleEndian support 
 // ByteSwap macros for BigEndian/LittleEndian support 
 // --------------------------------------------------------------------------------------
 // --------------------------------------------------------------------------------------
 #if (defined AI_BUILD_BIG_ENDIAN)
 #if (defined AI_BUILD_BIG_ENDIAN)
+#	define AI_LE(t)	(t)
+#	define AI_BE(t) ByteSwap::Swapped(t)
 #	define AI_LSWAP2(p)
 #	define AI_LSWAP2(p)
 #	define AI_LSWAP4(p)
 #	define AI_LSWAP4(p)
 #	define AI_LSWAP8(p)
 #	define AI_LSWAP8(p)
@@ -186,6 +222,8 @@ public:
 #	define AI_SWAP8P(p) ByteSwap::Swap8((p))
 #	define AI_SWAP8P(p) ByteSwap::Swap8((p))
 #	define BE_NCONST
 #	define BE_NCONST
 #else
 #else
+#	define AI_BE(t)	(t)
+#	define AI_LE(t) ByteSwap::Swapped(t)
 #	define AI_SWAP2(p)
 #	define AI_SWAP2(p)
 #	define AI_SWAP4(p)
 #	define AI_SWAP4(p)
 #	define AI_SWAP8(p)
 #	define AI_SWAP8(p)