Advertisement
snake5

sgs-mp - the easy part

Nov 30th, 2014
471
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.24 KB | None | 0 0
  1. struct mp_newmsg
  2. {
  3.     char msg[ MP_MAX_MSG_SIZE ];
  4.     int size, err;
  5.    
  6.     mp_newmsg() : size(0), err(MP_NO_ERROR) {}
  7.    
  8.     template< typename T >
  9.     mp_newmsg& byte( T b )
  10.     {
  11.         if( !err )
  12.         {
  13.             if( size + 1 > MP_MAX_MSG_SIZE )
  14.                 err = MP_ERR_OVERFLOW;
  15.             else
  16.                 msg[ size++ ] = (char) b;
  17.         }
  18.         return *this;
  19.     }
  20.     template< typename T >
  21.     mp_newmsg& item( T val )
  22.     {
  23.         if( !err )
  24.         {
  25.             if( size + sizeof(T) > MP_MAX_MSG_SIZE )
  26.                 err = MP_ERR_OVERFLOW;
  27.             else
  28.             {
  29.                 memcpy( msg + size, &val, sizeof(T) );
  30.                 size += sizeof(T);
  31.             }
  32.         }
  33.         return *this;
  34.     }
  35.     template< typename T >
  36.     mp_newmsg& smallbuf( const char* str, T bufsize, T maxlen = 255 )
  37.     {
  38.         if( !err )
  39.         {
  40.             if( bufsize > maxlen )
  41.                 bufsize = maxlen;
  42.             if( size + 1 + (int) bufsize > MP_MAX_MSG_SIZE )
  43.                 err = MP_ERR_OVERFLOW;
  44.             else
  45.             {
  46.                 msg[ size++ ] = (char) bufsize;
  47.                 memcpy( msg + size, str, bufsize );
  48.                 size += bufsize;
  49.             }
  50.         }
  51.         return *this;
  52.     }
  53.     template< typename T >
  54.     mp_newmsg& raw( const char* buf, T bufsize )
  55.     {
  56.         if( !err )
  57.         {
  58.             if( size + (int) bufsize > MP_MAX_MSG_SIZE )
  59.                 err = MP_ERR_OVERFLOW;
  60.             else
  61.             {
  62.                 memcpy( msg + size, buf, bufsize );
  63.                 size += bufsize;
  64.             }
  65.         }
  66.         return *this;
  67.     }
  68. };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement