// Common, group Encoding
// Copyright Alexander Liss
#ifndef __DATACODER_H__
#define __DATACODER_H__
#include "datahook.h"
class DataCoderVariant;
class DataCoder
{
DataCoder(const DataCoder&);
DataCoder& operator=(const DataCoder&);
public:
DataCoder():p(0){}
DataCoder(CommBuffer& d):p(0){use(d);}
DataCoder(const CommBuffer& s,ReadControl& c):p(0){use(s,c);}
~DataCoder();
// for packing
int use(CommBuffer& d);
// for unpacking
int use(const CommBuffer& s,ReadControl& c);
// an array of bytes
int put(const unsigned char * data,int size);
int get(unsigned char * data,int size);
// as an array of bytes
int put(const char * data,int size);
int get(char * data,int size);
int put(unsigned int data);
int get(unsigned int& data);
int put(int data);
int get(int& data);
int put(unsigned long data);
int get(unsigned long& data);
int put(long data);
int get(long& data);
int put(unsigned short data);
int get(unsigned short& data);
int put(short data);
int get(short& data);
int put(unsigned char data);
int get(unsigned char& data);
int put(char data);
int get(char& data);
int put(float data);
int get(float& data);
int put(double data);
int get(double& data);
int put(const DataHook& data);
int get(DataHook& data);
int put(const CommBuffer& data);
int get(CommBuffer& data);
private:
DataCoderVariant* p;
};
// basic types
int pack(CommBuffer& d,unsigned int t);
int unpack(unsigned int& t,const CommBuffer& s,ReadControl& c);
int pack(CommBuffer& d,int t);
int unpack(int& t,const CommBuffer& s,ReadControl& c);
int pack(CommBuffer& d,unsigned long t);
int unpack(unsigned long& t,const CommBuffer& s,ReadControl& c);
int pack(CommBuffer& d,long t);
int unpack(long& t,const CommBuffer& s,ReadControl& c);
int pack(CommBuffer& d,unsigned short t);
int unpack(unsigned short& t,const CommBuffer& s,ReadControl& c);
int pack(CommBuffer& d,short t);
int unpack(short& t,const CommBuffer& s,ReadControl& c);
int pack(CommBuffer& d,unsigned char t);
int unpack(unsigned char& t,const CommBuffer& s,ReadControl& c);
int pack(CommBuffer& d,char t);
int unpack(char& t,const CommBuffer& s,ReadControl& c);
int pack(CommBuffer& d,float t);
int unpack(float& t,const CommBuffer& s,ReadControl& c);
int pack(CommBuffer& d,double t);
int unpack(double& t,const CommBuffer& s,ReadControl& c);
int pack(CommBuffer& d,const CommBuffer& t);
int unpack(CommBuffer& t,const CommBuffer& s,ReadControl& c);
#endif