2013-11-21 13:42:38 +01:00
|
|
|
#ifndef PACKING_H
|
|
|
|
#define PACKING_H
|
|
|
|
|
2013-11-25 19:00:33 +01:00
|
|
|
/////////////////////////////////////
|
|
|
|
// Created by Pontus Fransson 2013 //
|
|
|
|
/////////////////////////////////////
|
2013-11-21 13:42:38 +01:00
|
|
|
|
|
|
|
#include <string>
|
|
|
|
|
|
|
|
/******************************
|
|
|
|
Packing
|
|
|
|
******************************/
|
|
|
|
namespace Oyster
|
|
|
|
{
|
|
|
|
namespace Network
|
|
|
|
{
|
|
|
|
namespace Packing
|
|
|
|
{
|
|
|
|
//bool (1-bit)
|
|
|
|
void Pack(unsigned char buffer[], bool i);
|
|
|
|
|
|
|
|
//char (8-bit)
|
|
|
|
void Pack(unsigned char buffer[], char i);
|
|
|
|
void Pack(unsigned char buffer[], unsigned char i); // unsigned
|
|
|
|
|
|
|
|
//short (16-bit)
|
|
|
|
void Pack(unsigned char buffer[], short i);
|
|
|
|
void Pack(unsigned char buffer[], unsigned short i); // unsigned
|
|
|
|
|
|
|
|
//int (32-bit)
|
|
|
|
void Pack(unsigned char buffer[], int i);
|
|
|
|
void Pack(unsigned char buffer[], unsigned int i); // unsigned
|
|
|
|
|
|
|
|
//__int64 (64-bit)
|
|
|
|
void Pack(unsigned char buffer[], __int64 i);
|
|
|
|
void Pack(unsigned char buffer[], unsigned __int64 i); // unsigned
|
|
|
|
|
|
|
|
//floating point (32, 64-bit)
|
|
|
|
void Pack(unsigned char buffer[], float i);
|
|
|
|
void Pack(unsigned char buffer[], double i);
|
|
|
|
|
|
|
|
//string
|
|
|
|
void Pack(unsigned char buffer[], char str[]);
|
|
|
|
void Pack(unsigned char buffer[], std::string& str);
|
|
|
|
|
|
|
|
unsigned __int64 Pack754(long double f, unsigned bits, unsigned expbits);
|
|
|
|
|
|
|
|
/******************************
|
|
|
|
Unpacking
|
|
|
|
******************************/
|
|
|
|
|
|
|
|
//bool (1-bit)
|
|
|
|
bool Unpackb(unsigned char buffer[]);
|
|
|
|
|
|
|
|
//char (8-bit)
|
|
|
|
char Unpackc(unsigned char buffer[]);
|
|
|
|
unsigned char UnpackC(unsigned char buffer[]); // unsigned
|
|
|
|
|
|
|
|
//short (16-bit)
|
|
|
|
short Unpacks(unsigned char buffer[]);
|
|
|
|
unsigned short UnpackS(unsigned char buffer[]); // unsigned
|
|
|
|
|
|
|
|
//int (32-bit)
|
|
|
|
int Unpacki(unsigned char buffer[]);
|
|
|
|
unsigned int UnpackI(unsigned char buffer[]); // unsigned
|
|
|
|
|
|
|
|
//__int64 (64-bit)
|
|
|
|
__int64 Unpacki64(unsigned char buffer[]);
|
|
|
|
unsigned __int64 UnpackI64(unsigned char buffer[]); // unsigned
|
|
|
|
|
|
|
|
//floating point (32, 64-bit)
|
|
|
|
float Unpackf(unsigned char buffer[]);
|
|
|
|
double Unpackd(unsigned char buffer[]);
|
|
|
|
|
|
|
|
//string
|
2013-12-12 12:14:53 +01:00
|
|
|
char* UnpackCStr(unsigned char buffer[]);
|
2013-11-21 13:42:38 +01:00
|
|
|
std::string UnpackStr(unsigned char buffer[]);
|
|
|
|
|
|
|
|
long double Unpack754(unsigned __int64 i, unsigned bits, unsigned expbits);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
//int32_t pack(unsigned char* buffer, char* format, ...);
|
|
|
|
|
|
|
|
//void unpack(unsigned char* buffer, char* format, ...);
|
|
|
|
|
|
|
|
|
|
|
|
/***********************************************
|
|
|
|
* This table is used for naming pack/unpack functions.
|
|
|
|
* It's also used to identify types in the 'format' string in function pack()/unpack()
|
|
|
|
*
|
|
|
|
* bits |signed unsigned float string
|
|
|
|
* -----+----------------------------------
|
|
|
|
* 1 | b
|
|
|
|
* 8 | c C
|
|
|
|
* 16 | s S f
|
|
|
|
* 32 | i I d
|
|
|
|
* 64 | q Q g
|
|
|
|
* - | str
|
|
|
|
*
|
|
|
|
* (16-bit unsigned length is automatically added in front of strings)
|
|
|
|
*
|
|
|
|
*/
|
|
|
|
|
|
|
|
#endif
|