struct mp_newmsg
{
char msg[ MP_MAX_MSG_SIZE ];
int size, err;
mp_newmsg() : size(0), err(MP_NO_ERROR) {}
template< typename T >
mp_newmsg& byte( T b )
{
if( !err )
{
if( size + 1 > MP_MAX_MSG_SIZE )
err = MP_ERR_OVERFLOW;
else
msg[ size++ ] = (char) b;
}
return *this;
}
template< typename T >
mp_newmsg& item( T val )
{
if( !err )
{
if( size + sizeof(T) > MP_MAX_MSG_SIZE )
err = MP_ERR_OVERFLOW;
else
{
memcpy( msg + size, &val, sizeof(T) );
size += sizeof(T);
}
}
return *this;
}
template< typename T >
mp_newmsg& smallbuf( const char* str, T bufsize, T maxlen = 255 )
{
if( !err )
{
if( bufsize > maxlen )
bufsize = maxlen;
if( size + 1 + (int) bufsize > MP_MAX_MSG_SIZE )
err = MP_ERR_OVERFLOW;
else
{
msg[ size++ ] = (char) bufsize;
memcpy( msg + size, str, bufsize );
size += bufsize;
}
}
return *this;
}
template< typename T >
mp_newmsg& raw( const char* buf, T bufsize )
{
if( !err )
{
if( size + (int) bufsize > MP_MAX_MSG_SIZE )
err = MP_ERR_OVERFLOW;
else
{
memcpy( msg + size, buf, bufsize );
size += bufsize;
}
}
return *this;
}
};
Comments