[ create a new paste ] login | about

Link: http://codepad.org/uDwCnEqW    [ raw code | fork ]

k06a - C++, pasted on Nov 8:
#ifndef NETTYPES_H
#define NETTYPES_H

namespace netheader
{
    #pragma pack(push,1)

    //

    template<typename T> struct le16;
    template<typename T> struct be32;
    template<typename T> struct le16;
    template<typename T> struct be32;

    typedef le16<  signed short>  le_int16;
    typedef le16<unsigned short> le_uint16;
    typedef be16<  signed short>  be_int16;
    typedef be16<unsigned short> be_uint16;
    
    typedef le32<  signed int>  le_int32;
    typedef le32<unsigned int> le_uint32;
    typedef be32<  signed int>  be_int32;
    typedef be32<unsigned int> be_uint32;
    
    typedef   signed  char   int8;
    typedef unsigned  char  uint8;
    
    //

    template<typename T>
    struct le16
    {
    private:
        unsigned char lsb;
        unsigned char msb;

    public:
        T value()
        {
            return (msb << 8) | (lsb << 0);
        }

        void setValue(T value)
        {
            lsb = (value >> 0);
            msb = (value >> 8);
        }
    };

    //
    
    template<typename T>
    struct be16
    {
    private:
        unsigned char msb;
        unsigned char lsb;

    public:
        T value()
        {
            return (msb << 8) | (lsb << 0);
        }

        void setValue(T value)
        {
            lsb = (value >> 0);
            msb = (value >> 8);
        }
    };

    //
    
    template<typename T>
    struct le32
    {
    private:
        unsigned char llsb;
        unsigned char lmsb;
        unsigned char mlsb;
        unsigned char mmsb;

    public:
        T value()
        {
            return (mmsb << 24) | (mlsb << 16)
                 | (lmsb <<  8) | (llsb <<  0);
        }

        void setValue(T value)
        {
            llsb = (value >>  0);
            lmsb = (value >>  8);
            mlsb = (value >> 16);
            mmsb = (value >> 24);
        }
    };

    //
    
    template<typename T>
    struct be32
    {
    private:
        unsigned char mmsb;
        unsigned char mlsb;
        unsigned char lmsb;
        unsigned char llsb;

    public:
        T value()
        {
            return (mmsb << 24) | (mlsb << 16)
                 | (lmsb <<  8) | (llsb <<  0);
        }

        void setValue(T value)
        {
            llsb = (value >>  0);
            lmsb = (value >>  8);
            mlsb = (value >> 16);
            mmsb = (value >> 24);
        }
    };

    //

    #pragma pack(pop)
}
//namespace netheader

#endif // NETTYPES_H


Create a new paste based on this one


Comments: