#ifndef NETTYPES_H
#define NETTYPES_H
namespace netheader
{
#pragma pack(push,1)
//
template<typename T> struct le16;
template<typename T> struct be32;
template<typename T> struct le16;
template<typename T> struct be32;
typedef le16< signed short> le_int16;
typedef le16<unsigned short> le_uint16;
typedef be16< signed short> be_int16;
typedef be16<unsigned short> be_uint16;
typedef le32< signed int> le_int32;
typedef le32<unsigned int> le_uint32;
typedef be32< signed int> be_int32;
typedef be32<unsigned int> be_uint32;
typedef signed char int8;
typedef unsigned char uint8;
//
template<typename T>
struct le16
{
private:
unsigned char lsb;
unsigned char msb;
public:
T value()
{
return (msb << 8) | (lsb << 0);
}
void setValue(T value)
{
lsb = (value >> 0);
msb = (value >> 8);
}
};
//
template<typename T>
struct be16
{
private:
unsigned char msb;
unsigned char lsb;
public:
T value()
{
return (msb << 8) | (lsb << 0);
}
void setValue(T value)
{
lsb = (value >> 0);
msb = (value >> 8);
}
};
//
template<typename T>
struct le32
{
private:
unsigned char llsb;
unsigned char lmsb;
unsigned char mlsb;
unsigned char mmsb;
public:
T value()
{
return (mmsb << 24) | (mlsb << 16)
| (lmsb << 8) | (llsb << 0);
}
void setValue(T value)
{
llsb = (value >> 0);
lmsb = (value >> 8);
mlsb = (value >> 16);
mmsb = (value >> 24);
}
};
//
template<typename T>
struct be32
{
private:
unsigned char mmsb;
unsigned char mlsb;
unsigned char lmsb;
unsigned char llsb;
public:
T value()
{
return (mmsb << 24) | (mlsb << 16)
| (lmsb << 8) | (llsb << 0);
}
void setValue(T value)
{
llsb = (value >> 0);
lmsb = (value >> 8);
mlsb = (value >> 16);
mmsb = (value >> 24);
}
};
//
#pragma pack(pop)
}
//namespace netheader
#endif // NETTYPES_H