FITD/FitdLib/endianess.h

71 lines
1.2 KiB
C

#ifndef _ENDIANESS_H_
#define _ENDIANESS_H_
#ifdef __GCC__
#define FORCEINLINE static inline
#else
#ifdef WIN32
#define FORCEINLINE __forceinline
#else
#define FORCEINLINE static inline
#endif
#endif
FORCEINLINE u16 READ_LE_U16(void *ptr)
{
#ifdef MACOSX
return (((u8*)ptr)[1]<<8)|((u8*)ptr)[0];
#else
return *(u16*)ptr;
#endif
}
FORCEINLINE s16 READ_LE_S16(void *ptr)
{
return (s16)READ_LE_U16(ptr);
}
FORCEINLINE u16 READ_BE_U16(void *ptr)
{
#ifdef MACOSX
return *(u16*)ptr;
#else
return (((u8*)ptr)[1]<<8)|((u8*)ptr)[0];
#endif
}
FORCEINLINE s16 READ_BE_S16(void *ptr)
{
return (s16)READ_BE_S16(ptr);
}
FORCEINLINE u32 READ_LE_U32(void *ptr)
{
#ifdef MACOSX
return (((u8*)ptr)[3]<<24)|(((u8*)ptr)[2]<<16)|(((u8*)ptr)[1]<<8)|((u8*)ptr)[0];
#else
return *(u32*)ptr;
#endif
}
FORCEINLINE s32 READ_LE_S32(void *ptr)
{
return (s32)READ_LE_U32(ptr);
}
FORCEINLINE u32 READ_BE_U32(void *ptr)
{
#ifdef MACOSX
return *(u32*)ptr;
#else
return (((u8*)ptr)[3]<<24)|(((u8*)ptr)[2]<<16)|(((u8*)ptr)[1]<<8)|((u8*)ptr)[0];
#endif
}
FORCEINLINE s32 READ_BE_S32(void *ptr)
{
return (s32)READ_LE_U32(ptr);
}
#endif