#include "IO/PackData.h" #include /******************************************************** * Concrete implimentations for packing/unpacking * ********************************************************/ // unsigned char template<> size_t packsize( const unsigned char &rhs ) { return sizeof( unsigned char ); } template<> void pack( const unsigned char &rhs, char *buffer ) { memcpy( buffer, &rhs, sizeof( unsigned char ) ); } template<> void unpack( unsigned char &data, const char *buffer ) { memcpy( &data, buffer, sizeof( unsigned char ) ); } // char template<> size_t packsize( const char &rhs ) { return sizeof( char ); } template<> void pack( const char &rhs, char *buffer ) { memcpy( buffer, &rhs, sizeof( char ) ); } template<> void unpack( char &data, const char *buffer ) { memcpy( &data, buffer, sizeof( char ) ); } // int template<> size_t packsize( const int &rhs ) { return sizeof( int ); } template<> void pack( const int &rhs, char *buffer ) { memcpy( buffer, &rhs, sizeof( int ) ); } template<> void unpack( int &data, const char *buffer ) { memcpy( &data, buffer, sizeof( int ) ); } // unsigned int template<> size_t packsize( const unsigned int &rhs ) { return sizeof( unsigned int ); } template<> void pack( const unsigned int &rhs, char *buffer ) { memcpy( buffer, &rhs, sizeof( int ) ); } template<> void unpack( unsigned int &data, const char *buffer ) { memcpy( &data, buffer, sizeof( int ) ); } // size_t template<> size_t packsize( const size_t &rhs ) { return sizeof( size_t ); } template<> void pack( const size_t &rhs, char *buffer ) { memcpy( buffer, &rhs, sizeof( size_t ) ); } template<> void unpack( size_t &data, const char *buffer ) { memcpy( &data, buffer, sizeof( size_t ) ); } // std::string template<> size_t packsize( const std::string &rhs ) { return rhs.size() + 1; } template<> void pack( const std::string &rhs, char *buffer ) { memcpy( buffer, rhs.c_str(), rhs.size() + 1 ); } template<> void unpack( std::string &data, const char *buffer ) { data = std::string( buffer ); }