// Common, group Encoding
// Copyright Alexander Liss
// has a dual use
// as a DataCoderVariant and independent,
// when its special functions are needed
#ifndef __WIREPACK_H__
#define __WIREPACK_H__
#include "datacodervar.h"
// WirePacker
// byte packing without encoding
// wire order: big endian
// local order is set through a Porting variable
class WirePacker:public DataCoderVariant
{
WirePacker(const WirePacker&);
WirePacker& operator=(const WirePacker&);
public:
WirePacker(){}
WirePacker(CommBuffer& d):DataCoderVariant(d){}
WirePacker(const CommBuffer& s,ReadControl& c):DataCoderVariant(s,c){}
// disabled
int put(int data){return 1;}
int get(int& data){return 1;}
int put(long data){return 1;}
int get(long& data){return 1;}
int put(short data){return 1;}
int get(short& data){return 1;}
int put(char data){return 1;}
int get(char& data){return 1;}
int put(float data){return 1;}
int get(float& data){return 1;}
int put(double data){return 1;}
int get(double& data){return 1;}
// working
// an array of bytes of fixed size
int put(const void * data,int size);
int get(void * data,int size);
int put(unsigned int data);
int get(unsigned int& data);
int put(unsigned long data);
int get(unsigned long& data);
int put(unsigned short data);
int get(unsigned short& data);
int put(unsigned char data);
int get(unsigned char& data);
// special
// lower bytes in an integer value - 1,2 or 3
int put_tail(int data, int bytes);
// it clears data first
int get_tail(int& data, int bytes);
int put(const CommBuffer& data, int bytes_for_size);
int get(CommBuffer& data, int bytes_for_size);
};
// message header functions
int put_message_size(CommBuffer& buf,unsigned int size);
int prepend_message_size(CommBuffer& buf,unsigned int size);
unsigned int get_message_size(CommBuffer& buf,ReadControl& c);
#endif