123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185 |
- // Copyright (C) 2000 Sean Cavanaugh
- // This file is licensed under the terms of the Lesser GNU Public License
- // (see LPGL.txt, or http://www.gnu.org/copyleft/lesser.txt)
- #ifndef ENDIAN_H__
- #define ENDIAN_H__
- #if _MSC_VER > 1000
- #pragma once
- #endif // _MSC_VER > 1000
- #include "basictypes.h"
- #include "BaseMath.h"
- class Endian
- {
- public:
- inline static INT16 FASTCALL Flip(const INT16 x)
- {
- INT16 a = (x >> 8) & 0x000FF;
- INT16 b = (x << 8) & 0x0FF00;
- INT16 rval = (a | b);
- return rval;
- }
- inline static UINT16 FASTCALL Flip(const UINT16 x)
- {
- UINT16 a = (x >> 8) & 0x000FF;
- UINT16 b = (x << 8) & 0x0FF00;
- UINT16 rval = (a | b);
- return rval;
- }
- inline static INT32 FASTCALL Flip(const INT32 x)
- {
- INT32 a = (x >> 24) & 0x0000000FF;
- INT32 b = (x >> 8) & 0x00000FF00;
- INT32 c = (x << 8) & 0x000FF0000;
- INT32 d = (x << 24) & 0x0FF000000;
- INT32 rval = (a | b | c | d);
- return rval;
- }
- inline static UINT32 FASTCALL Flip(const UINT32 x)
- {
- INT32 a = (x >> 24) & 0x0000000FF;
- INT32 b = (x >> 8) & 0x00000FF00;
- INT32 c = (x << 8) & 0x000FF0000;
- INT32 d = (x << 24) & 0x0FF000000;
- INT32 rval = (a | b | c | d);
- return rval;
- }
- #if 0
- inline static INT64 FASTCALL Flip(const INT64 x)
- {
- INT64 a = (x >> 56) & 0x000000000000000FF;
- INT64 b = (x >> 40) & 0x0000000000000FF00;
- INT64 c = (x >> 24) & 0x00000000000FF0000;
- INT64 d = (x >> 8 ) & 0x000000000FF000000;
- INT64 e = (x << 8 ) & 0x0000000FF00000000;
- INT64 f = (x << 24) & 0x00000FF0000000000;
- INT64 g = (x << 40) & 0x000FF000000000000;
- INT64 h = (x << 56) & 0x0FF00000000000000;
- INT64 rval = (a | b | c | d | e | f | g | h);
- return rval;
- }
- inline static UINT64 FASTCALL Flip(const UINT64 x)
- {
- UINT64 a = (x >> 56) & 0x000000000000000FF;
- UINT64 b = (x >> 40) & 0x0000000000000FF00;
- UINT64 c = (x >> 24) & 0x00000000000FF0000;
- UINT64 d = (x >> 8 ) & 0x000000000FF000000;
- UINT64 e = (x << 8 ) & 0x0000000FF00000000;
- UINT64 f = (x << 24) & 0x00000FF0000000000;
- UINT64 g = (x << 40) & 0x000FF000000000000;
- UINT64 h = (x << 56) & 0x0FF00000000000000;
- UINT64 rval = (a | b | c | d | e | f | g | h);
- return rval;
- }
- #endif
- inline static float FASTCALL Flip(const float x)
- {
- union floatflipper
- {
- struct _x_t
- {
- BYTE _v[4];
- } _x;
- float _f;
- };
- floatflipper tmp;
- tmp._f = x;
- SWAP(tmp._x._v[0], tmp._x._v[3]);
- SWAP(tmp._x._v[1], tmp._x._v[2]);
- return tmp._f;
- }
- inline static double FASTCALL Flip(const double x)
- {
- union floatflipper
- {
- struct _x_t
- {
- BYTE _v[8];
- } _x;
- double _d;
- };
- floatflipper tmp;
- tmp._d = x;
- SWAP(tmp._x._v[0], tmp._x._v[7]);
- SWAP(tmp._x._v[1], tmp._x._v[6]);
- SWAP(tmp._x._v[2], tmp._x._v[5]);
- SWAP(tmp._x._v[3], tmp._x._v[4]);
- return tmp._d;
- }
- inline static void FlipArray(unsigned size, INT16* x)
- {
- for (unsigned i=0 ; i<size ; i++, x++)
- {
- *x = Flip(*x);
- }
- }
- inline static void FlipArray(unsigned size, UINT16* x)
- {
- for (unsigned i=0 ; i<size ; i++, x++)
- {
- *x = Flip(*x);
- }
- }
- inline static void FlipArray(unsigned size, INT32* x)
- {
- for (unsigned i=0 ; i<size ; i++, x++)
- {
- *x = Flip(*x);
- }
- }
- inline static void FlipArray(unsigned size, UINT32* x)
- {
- for (unsigned i=0 ; i<size ; i++, x++)
- {
- *x = Flip(*x);
- }
- }
- #if 0
- inline static void FlipArray(unsigned size, INT64* x)
- {
- for (unsigned i=0 ; i<size ; i++, x++)
- {
- *x = Flip(*x);
- }
- }
- inline static void FlipArray(unsigned size, UINT64* x)
- {
- for (unsigned i=0 ; i<size ; i++, x++)
- {
- *x = Flip(*x);
- }
- }
- #endif
- inline static void FlipArray(unsigned size, float* x)
- {
- for (unsigned i=0 ; i<size ; i++, x++)
- {
- *x = Flip(*x);
- }
- }
- inline static void FlipArray(unsigned size, double* x)
- {
- for (unsigned i=0 ; i<size ; i++, x++)
- {
- *x = Flip(*x);
- }
- }
- };
- #endif // ENDIAN_H__
|