snake5 icon

sgs-mp - the easy part

snake5 | PRO | 11/30/14 04:05:26 PM UTC | 0 ⭐ | 876 👁️ | Never ⏰ | []
C++ |

1.24 KB

|

None

|

0 👍

/

0 👎

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