⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 endianutils.hpp

📁 flash xmp sdk,flash官方SDK
💻 HPP
字号:
#ifndef __EndianUtils_hpp__#define __EndianUtils_hpp__ 1// =================================================================================================// ADOBE SYSTEMS INCORPORATED// Copyright 2006-2007 Adobe Systems Incorporated// All Rights Reserved//// NOTICE: Adobe permits you to use, modify, and distribute this file in accordance with the terms// of the Adobe license agreement accompanying it.// =================================================================================================#include "XMP_Environment.h"	// ! This must be the first include.#include "XMP_Const.h"// *** These should be in a more common location. The Unicode conversions of XMPCore have similar utils. // *** May want to improve with PowerPC swapping load/store, or SSE instructions.// =================================================================================================#define kLittleEndianHost (! kBigEndianHost)#if XMP_WinBuild	#define kBigEndianHost 0#elif XMP_MacBuild	#if __MWERKS__		#if __POWERPC__			#define kBigEndianHost 1		#else			#error "CodeWarrior must only be for PowerPC"		#endif	#else	// Must be an Xcode build.		#if __BIG_ENDIAN__			#define kBigEndianHost 1		#elif __LITTLE_ENDIAN__			#define kBigEndianHost 0		#else			#error "Neither __BIG_ENDIAN__ nor __LITTLE_ENDIAN__ is set"		#endif	#endif#elif XMP_UNIXBuild	#error "Endian macros not set up for generic UNIX yet"#else	#error "Unknown build environment"#endif// =================================================================================================typedef XMP_Uns16 (*GetUns16_Proc)  ( const void* addr );typedef XMP_Uns32 (*GetUns32_Proc)  ( const void* addr );typedef XMP_Uns64 (*GetUns64_Proc)  ( const void* addr );typedef float     (*GetFloat_Proc)  ( const void* addr );typedef double    (*GetDouble_Proc) ( const void* addr );typedef XMP_Uns16 (*MakeUns16_Proc)  ( XMP_Uns16 value );typedef XMP_Uns32 (*MakeUns32_Proc)  ( XMP_Uns32 value );typedef XMP_Uns64 (*MakeUns64_Proc)  ( XMP_Uns64 value );typedef float     (*MakeFloat_Proc)  ( float value );typedef double    (*MakeDouble_Proc) ( double value );typedef void (*PutUns16_Proc)  ( XMP_Uns16 value, void* addr );typedef void (*PutUns32_Proc)  ( XMP_Uns32 value, void* addr );typedef void (*PutUns64_Proc)  ( XMP_Uns64 value, void* addr );typedef void (*PutFloat_Proc)  ( float value, void* addr );typedef void (*PutDouble_Proc) ( double value, void* addr );// =================================================================================================static inline XMP_Uns16 Flip2 ( XMP_Uns16 value ){	value = ((value & 0x00FF) << 8) | ((value & 0xFF00) >> 8);	return value;}// -------------------------------------------------------------------------------------------------static inline void Flip2 ( void * addr ){	XMP_Uns16 * u16Ptr = (XMP_Uns16*) addr;	*u16Ptr = Flip2 ( *u16Ptr );}// -------------------------------------------------------------------------------------------------static inline XMP_Uns32 Flip4 ( XMP_Uns32 value ){	value = ((value & 0x000000FF) << 24) | ((value & 0x0000FF00) << 8) |			((value >> 8) & 0x0000FF00)  | ((value >> 24) & 0x000000FF);	return value;}// -------------------------------------------------------------------------------------------------static inline void Flip4 ( void * addr ){	XMP_Uns32 * u32Ptr = (XMP_Uns32*) addr;	*u32Ptr = Flip4 ( *u32Ptr );}// -------------------------------------------------------------------------------------------------static inline XMP_Uns64 Flip8 ( XMP_Uns64 value ){	XMP_Uns32 oldLow  = (XMP_Uns32)(value);	XMP_Uns32 oldHigh = (XMP_Uns32)(value >> 32);	return (((XMP_Uns64)Flip4(oldLow)) << 32) | ((XMP_Uns64)Flip4(oldHigh));}// -------------------------------------------------------------------------------------------------static inline void Flip8 ( void * addr ){	XMP_Uns64 * u64Ptr = (XMP_Uns64*) addr;	*u64Ptr = Flip8 ( *u64Ptr );}// =================================================================================================static inline XMP_Uns16GetUns16BE ( const void * addr ){	XMP_Uns16 value = *((XMP_Uns16*)addr);	if ( kLittleEndianHost ) value = Flip2 ( value );	return value;}// -------------------------------------------------------------------------------------------------static inline XMP_Uns16GetUns16LE ( const void * addr ){	XMP_Uns16 value = *((XMP_Uns16*)addr);	if ( kBigEndianHost ) value = Flip2 ( value );	return value;}// -------------------------------------------------------------------------------------------------static inline XMP_Uns32GetUns32BE ( const void * addr ){	XMP_Uns32 value = *((XMP_Uns32*)addr);	if ( kLittleEndianHost ) value = Flip4 ( value );	return value;}// -------------------------------------------------------------------------------------------------static inline XMP_Uns32GetUns32LE ( const void * addr ){	XMP_Uns32 value = *((XMP_Uns32*)addr);	if ( kBigEndianHost ) value = Flip4 ( value );	return value;}// -------------------------------------------------------------------------------------------------static inline XMP_Uns64GetUns64BE ( const void * addr ){	XMP_Uns64 value = *((XMP_Uns64*)addr);	if ( kLittleEndianHost ) value = Flip8 ( value );	return value;}// -------------------------------------------------------------------------------------------------static inline XMP_Uns64GetUns64LE ( const void * addr ){	XMP_Uns64 value = *((XMP_Uns64*)addr);	if ( kBigEndianHost ) value = Flip8 ( value );	return value;}// -------------------------------------------------------------------------------------------------static inline floatGetFloatBE ( const void * addr ){	XMP_Uns32 value = *((XMP_Uns32*)addr);	if ( kLittleEndianHost ) value = Flip4 ( value );	return *((float*)&value);}// -------------------------------------------------------------------------------------------------static inline floatGetFloatLE ( const void * addr ){	XMP_Uns32 value = *((XMP_Uns32*)addr);	if ( kBigEndianHost ) value = Flip4 ( value );	return *((float*)&value);}// -------------------------------------------------------------------------------------------------static inline doubleGetDoubleBE ( const void * addr ){	XMP_Uns64 value = *((XMP_Uns64*)addr);	if ( kLittleEndianHost ) value = Flip8 ( value );	return *((double*)&value);}// -------------------------------------------------------------------------------------------------static inline doubleGetDoubleLE ( const void * addr ){	XMP_Uns64 value = *((XMP_Uns64*)addr);	if ( kBigEndianHost ) value = Flip8 ( value );	return *((double*)&value);}// =================================================================================================static inline XMP_Uns16MakeUns16BE ( XMP_Uns16 value ){	if ( kLittleEndianHost ) value = Flip2 ( value );	return value;}// -------------------------------------------------------------------------------------------------static inline XMP_Uns16MakeUns16LE ( XMP_Uns16 value ){	if ( kBigEndianHost ) value = Flip2 ( value );	return value;}// -------------------------------------------------------------------------------------------------static inline XMP_Uns32MakeUns32BE ( XMP_Uns32 value ){	if ( kLittleEndianHost ) value = Flip4 ( value );	return value;}// -------------------------------------------------------------------------------------------------static inline XMP_Uns32MakeUns32LE ( XMP_Uns32 value ){	if ( kBigEndianHost ) value = Flip4 ( value );	return value;}// -------------------------------------------------------------------------------------------------static inline XMP_Uns64MakeUns64BE ( XMP_Uns64 value ){	if ( kLittleEndianHost ) value = Flip8 ( value );	return value;}// -------------------------------------------------------------------------------------------------static inline XMP_Uns64MakeUns64LE ( XMP_Uns64 value ){	if ( kBigEndianHost ) value = Flip8 ( value );	return value;}// -------------------------------------------------------------------------------------------------static inline floatMakeFloatBE ( float value ){	if ( kLittleEndianHost ) {		XMP_Uns32* intPtr = (XMP_Uns32*) &value;		*intPtr = Flip4 ( *intPtr );	}	return value;}// -------------------------------------------------------------------------------------------------static inline floatMakeFloatLE ( float value ){	if ( kBigEndianHost ) {		XMP_Uns32* intPtr = (XMP_Uns32*) &value;		*intPtr = Flip4 ( *intPtr );	}	return value;}// -------------------------------------------------------------------------------------------------static inline doubleMakeDoubleBE ( double value ){	if ( kLittleEndianHost ) {		XMP_Uns64* intPtr = (XMP_Uns64*) &value;		*intPtr = Flip8 ( *intPtr );	}	return value;}// -------------------------------------------------------------------------------------------------static inline doubleMakeDoubleLE ( double value ){	if ( kBigEndianHost ) {		XMP_Uns64* intPtr = (XMP_Uns64*) &value;		*intPtr = Flip8 ( *intPtr );	}	return value;}// =================================================================================================static inline voidPutUns16BE ( XMP_Uns16 value, void * addr ){	if ( kLittleEndianHost ) value = Flip2 ( value );	*((XMP_Uns16*)addr) = value;}// -------------------------------------------------------------------------------------------------static inline voidPutUns16LE ( XMP_Uns16 value, void * addr ){	if ( kBigEndianHost ) value = Flip2 ( value );	*((XMP_Uns16*)addr) = value;}// -------------------------------------------------------------------------------------------------static inline voidPutUns32BE ( XMP_Uns32 value, void * addr ){	if ( kLittleEndianHost ) value = Flip4 ( value );	*((XMP_Uns32*)addr) = value;}// -------------------------------------------------------------------------------------------------static inline voidPutUns32LE ( XMP_Uns32 value, void * addr ){	if ( kBigEndianHost ) value = Flip4 ( value );	*((XMP_Uns32*)addr) = value;}// -------------------------------------------------------------------------------------------------static inline voidPutUns64BE ( XMP_Uns64 value, void * addr ){	if ( kLittleEndianHost ) value = Flip8 ( value );	*((XMP_Uns64*)addr) = value;}// -------------------------------------------------------------------------------------------------static inline voidPutUns64LE ( XMP_Uns64 value, void * addr ){	if ( kBigEndianHost ) value = Flip8 ( value );	*((XMP_Uns64*)addr) = value;}// -------------------------------------------------------------------------------------------------static inline voidPutFloatBE ( float value, void * addr ){	if ( kLittleEndianHost ) {		XMP_Uns32* intPtr = (XMP_Uns32*) &value;		*intPtr = Flip4 ( *intPtr );	}	*((float*)addr) = value;}// -------------------------------------------------------------------------------------------------static inline voidPutFloatLE ( float value, void * addr ){	if ( kBigEndianHost ) {		XMP_Uns32* intPtr = (XMP_Uns32*) &value;		*intPtr = Flip4 ( *intPtr );	}	*((float*)addr) = value;}// -------------------------------------------------------------------------------------------------static inline voidPutDoubleBE ( double value, void * addr ){	if ( kLittleEndianHost ) {		XMP_Uns64* intPtr = (XMP_Uns64*) &value;		*intPtr = Flip8 ( *intPtr );	}	*((double*)addr) = value;}// -------------------------------------------------------------------------------------------------static inline voidPutDoubleLE ( double value, void * addr ){	if ( kBigEndianHost ) {		XMP_Uns64* intPtr = (XMP_Uns64*) &value;		*intPtr = Flip8 ( *intPtr );	}	*((double*)addr) = value;}// =================================================================================================#endif	// __EndianUtils_hpp__

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -