mirror of
https://github.com/nzp-team/vhlt.git
synced 2024-11-22 20:01:50 +00:00
186 lines
4.7 KiB
C
186 lines
4.7 KiB
C
|
// 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__
|