Byte code representation of types

A sequence of bytes (octets) is used to represent a type. For example the following byte sequence represents an array of 3 float32s:


// typedef float32 Point[3];
// FT_ARRAY, int32(3), FT_FLOAT32
0x50,0x03,0x00,0x00,0x00,0x0c

// typedef const float32 * const T[3];
// FT_ARRAY, int32(3), FT_CONST, FT_POINTER, FT_CONST, FT_FLOAT32
0x50,0x03,0x00,0x00,0x00,0x31,0x35,0x31,0x0c

// typedef const string8& T;
// FT_REFERENCE, FT_CONST, FT_STRING8
0x36,0x31,0x10

namespace ns
{
    $typedef+ ceda::ptr<const ceda::IObject> T;
}

namespace ns
{
    typedef ceda::ptr<ceda::IObject const> T;
    inline ceda::ConstStringZ GetTypedefName_T()
    {
        return "ns::T";
    }
}

namespace ns
{
    void _Register_T()
    {
        static const ceda::octet_t T_type[] =
        {
            0x40,0x31,0x21,0x00,0x00
        };
        static ceda::ConstStringZ T_stringTable[] =
        {
            "ceda::IObject",
        };
        static const ceda::ReflectedTypedef T_typedef =
        {
            "ns::T",
            T_type,
            T_stringTable
        };
        cxVerify(ceda::RegisterReflectedTypedef(&T_typedef,ceda::Ceda_Core_Object_exObject_GetXTarget()) == ceda::NSE_OK);
    }
} // ns