Initial community commit
This commit is contained in:
parent
537bcbc862
commit
fc06254474
16440 changed files with 4239995 additions and 2 deletions
122
Src/external_dependencies/openmpt-trunk/include/unrar/rawint.hpp
vendored
Normal file
122
Src/external_dependencies/openmpt-trunk/include/unrar/rawint.hpp
vendored
Normal file
|
@ -0,0 +1,122 @@
|
|||
#ifndef _RAR_RAWINT_
|
||||
#define _RAR_RAWINT_
|
||||
|
||||
#define rotls(x,n,xsize) (((x)<<(n)) | ((x)>>(xsize-(n))))
|
||||
#define rotrs(x,n,xsize) (((x)>>(n)) | ((x)<<(xsize-(n))))
|
||||
#define rotl32(x,n) rotls(x,n,32)
|
||||
#define rotr32(x,n) rotrs(x,n,32)
|
||||
|
||||
inline uint RawGet2(const void *Data)
|
||||
{
|
||||
byte *D=(byte *)Data;
|
||||
return D[0]+(D[1]<<8);
|
||||
}
|
||||
|
||||
|
||||
inline uint32 RawGet4(const void *Data)
|
||||
{
|
||||
#if defined(BIG_ENDIAN) || !defined(ALLOW_MISALIGNED)
|
||||
byte *D=(byte *)Data;
|
||||
return D[0]+(D[1]<<8)+(D[2]<<16)+(D[3]<<24);
|
||||
#else
|
||||
return *(uint32 *)Data;
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
inline uint64 RawGet8(const void *Data)
|
||||
{
|
||||
#if defined(BIG_ENDIAN) || !defined(ALLOW_MISALIGNED)
|
||||
byte *D=(byte *)Data;
|
||||
return INT32TO64(RawGet4(D+4),RawGet4(D));
|
||||
#else
|
||||
return *(uint64 *)Data;
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
inline void RawPut2(uint Field,void *Data)
|
||||
{
|
||||
byte *D=(byte *)Data;
|
||||
D[0]=(byte)(Field);
|
||||
D[1]=(byte)(Field>>8);
|
||||
}
|
||||
|
||||
|
||||
inline void RawPut4(uint32 Field,void *Data)
|
||||
{
|
||||
#if defined(BIG_ENDIAN) || !defined(ALLOW_MISALIGNED)
|
||||
byte *D=(byte *)Data;
|
||||
D[0]=(byte)(Field);
|
||||
D[1]=(byte)(Field>>8);
|
||||
D[2]=(byte)(Field>>16);
|
||||
D[3]=(byte)(Field>>24);
|
||||
#else
|
||||
*(uint32 *)Data=Field;
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
inline void RawPut8(uint64 Field,void *Data)
|
||||
{
|
||||
#if defined(BIG_ENDIAN) || !defined(ALLOW_MISALIGNED)
|
||||
byte *D=(byte *)Data;
|
||||
D[0]=(byte)(Field);
|
||||
D[1]=(byte)(Field>>8);
|
||||
D[2]=(byte)(Field>>16);
|
||||
D[3]=(byte)(Field>>24);
|
||||
D[4]=(byte)(Field>>32);
|
||||
D[5]=(byte)(Field>>40);
|
||||
D[6]=(byte)(Field>>48);
|
||||
D[7]=(byte)(Field>>56);
|
||||
#else
|
||||
*(uint64 *)Data=Field;
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
#if defined(LITTLE_ENDIAN) && defined(ALLOW_MISALIGNED)
|
||||
#define USE_MEM_BYTESWAP
|
||||
#endif
|
||||
|
||||
// Load 4 big endian bytes from memory and return uint32.
|
||||
inline uint32 RawGetBE4(const byte *m)
|
||||
{
|
||||
#if defined(USE_MEM_BYTESWAP) && defined(_MSC_VER)
|
||||
return _byteswap_ulong(*(uint32 *)m);
|
||||
#elif defined(USE_MEM_BYTESWAP) && (__GNUC__ > 3) && (__GNUC_MINOR__ > 2)
|
||||
return __builtin_bswap32(*(uint32 *)m);
|
||||
#else
|
||||
return uint32(m[0]<<24) | uint32(m[1]<<16) | uint32(m[2]<<8) | m[3];
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
// Save integer to memory as big endian.
|
||||
inline void RawPutBE4(uint32 i,byte *mem)
|
||||
{
|
||||
#if defined(USE_MEM_BYTESWAP) && defined(_MSC_VER)
|
||||
*(uint32*)mem = _byteswap_ulong(i);
|
||||
#elif defined(USE_MEM_BYTESWAP) && (__GNUC__ > 3) && (__GNUC_MINOR__ > 2)
|
||||
*(uint32*)mem = __builtin_bswap32(i);
|
||||
#else
|
||||
mem[0]=byte(i>>24);
|
||||
mem[1]=byte(i>>16);
|
||||
mem[2]=byte(i>>8);
|
||||
mem[3]=byte(i);
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
inline uint32 ByteSwap32(uint32 i)
|
||||
{
|
||||
#ifdef _MSC_VER
|
||||
return _byteswap_ulong(i);
|
||||
#elif (__GNUC__ > 3) && (__GNUC_MINOR__ > 2)
|
||||
return __builtin_bswap32(i);
|
||||
#else
|
||||
return (rotl32(i,24)&0xFF00FF00)|(rotl32(i,8)&0x00FF00FF);
|
||||
#endif
|
||||
}
|
||||
|
||||
#endif
|
Loading…
Add table
Add a link
Reference in a new issue