Initial commit
This commit is contained in:
85
Torque/SDK/lib/dtsSDK/DTSEndian.h
Normal file
85
Torque/SDK/lib/dtsSDK/DTSEndian.h
Normal file
@@ -0,0 +1,85 @@
|
||||
#ifndef __DTSENDIAN_H
|
||||
#define __DTSENDIAN_H
|
||||
|
||||
// Big endian support. Note that one should not hold onto the
|
||||
// returned reference in the FIX_ENDIAN methods. Return reference
|
||||
// to a static variable so that one can use & operator on return value.
|
||||
|
||||
namespace DTS
|
||||
{
|
||||
|
||||
inline bool isLittleEndian()
|
||||
{
|
||||
int test = 1;
|
||||
char * t0 = (char*)&test;
|
||||
++*t0;
|
||||
return (test==2);
|
||||
}
|
||||
inline void FIX_ENDIAN2(void * val)
|
||||
{
|
||||
char * ptr = (char*)val;
|
||||
char tmp = ptr[0];
|
||||
ptr[0] = ptr[1];
|
||||
ptr[1] = tmp;
|
||||
}
|
||||
|
||||
inline void FIX_ENDIAN4(void * val)
|
||||
{
|
||||
char * ptr = (char*)val;
|
||||
char tmp = ptr[0];
|
||||
ptr[0] = ptr[3];
|
||||
ptr[3] = tmp;
|
||||
tmp = ptr[1];
|
||||
ptr[1] = ptr[2];
|
||||
ptr[2] = tmp;
|
||||
}
|
||||
|
||||
inline short & FIX_ENDIAN(short val)
|
||||
{
|
||||
if (!isLittleEndian())
|
||||
FIX_ENDIAN2(&val);
|
||||
static short out;
|
||||
out = val;
|
||||
return out;
|
||||
}
|
||||
|
||||
inline unsigned short & FIX_ENDIAN(unsigned short val)
|
||||
{
|
||||
return (unsigned short&)FIX_ENDIAN(short(val));
|
||||
}
|
||||
|
||||
inline int & FIX_ENDIAN(int val)
|
||||
{
|
||||
if (!isLittleEndian())
|
||||
FIX_ENDIAN4(&val);
|
||||
static int out;
|
||||
out = val;
|
||||
return out;
|
||||
}
|
||||
|
||||
inline unsigned int & FIX_ENDIAN(unsigned int val)
|
||||
{
|
||||
return (unsigned int&)FIX_ENDIAN( int(val));
|
||||
}
|
||||
|
||||
inline float & FIX_ENDIAN(float val)
|
||||
{
|
||||
if (!isLittleEndian())
|
||||
FIX_ENDIAN4(&val);
|
||||
static float out;
|
||||
out = val;
|
||||
return out;
|
||||
}
|
||||
|
||||
#ifdef __APPLE__
|
||||
inline int & FIX_ENDIAN(size_t val)
|
||||
{
|
||||
static int out;
|
||||
out = val;
|
||||
if (!isLittleEndian())
|
||||
FIX_ENDIAN4(&out);
|
||||
return out;
|
||||
}
|
||||
#endif
|
||||
}
|
||||
#endif
|
||||
Reference in New Issue
Block a user