ETypeByteCode

ETypeByteCode is an enumerated type for the byte codes used for a representation of reflected types.


$enum+ ETypeByteCode
{
    // Simple leaf types
    FT_VOID,                    // 0x00
    FT_BOOL,                    // 0x01
    FT_INT8,                    // 0x02
    FT_INT16,                   // 0x03
    FT_INT32,                   // 0x04
    FT_INT64,                   // 0x05
    FT_INT128,                  // 0x06
    FT_UINT8,                   // 0x07
    FT_UINT16,                  // 0x08
    FT_UINT32,                  // 0x09
    FT_UINT64,                  // 0x0a
    FT_UINT128,                 // 0x0b
    FT_FLOAT32,                 // 0x0c
    FT_FLOAT64,                 // 0x0d
    FT_CHAR8,                   // 0x0e
    FT_CHAR16,                  // 0x0f
    FT_STRING8,                 // 0x10
    FT_STRING16,                // 0x11

    // Named leaf types
    FT_CLASS = 0x20,            // 0x20
    FT_INTERFACE,               // 0x21
    FT_TYPEDEF,                 // 0x22
    FT_ENUM,                    // 0x23
    FT_FUNCTOR,                 // 0x24
    FT_VARIANT,                 // 0x25
    FT_FUNCTION_PTR,            // 0x26
    FT_NOT_REFLECTED,           // 0x27

    // Unary qualified types
    FT_VOLATILE=0x30,           // 0x30 volatile T
    FT_CONST,                   // 0x31 const T
    FT_ASSIGNABLE,              // 0x32 causes its argument to have assignment semantics
    FT_MOVABLE,                 // 0x33 causes it pref argument to support move semantics
    FT_OFFSETTABLE,             // 0x34 causes its argument to have offset semantics
    FT_POINTER,                 // 0x35 T*
    FT_REFERENCE,               // 0x36 T&

    FT_INTERFACE_POINTER=0x40,  // 0x40 ptr<T>
    FT_OPEN_VARIANT,            // 0x41 openvariant<T>
    FT_PREF,                    // 0x42 pref<T>
    FT_CREF,                    // 0x43 cref<T>
    FT_VECTOR,                  // 0x44 xvector<T>
    FT_DEQUE,                   // 0x45 xdeque<T>
    FT_LIST,                    // 0x46 xlist<T>
    FT_SET,                     // 0x47 xset<T>
    FT_BAG,                     // 0x48 xbag<T>
    FT_DYNARRAY,                // 0x49 T[]

    FT_ARRAY=0x50,              // 0x50 T[size]
    FT_MAP,                     // 0x51 xmap<K,V>

    // We support 0..63 template parameters
    FT_PARAM_0 = 0x60,
    FT_PARAM_1,
    FT_PARAM_2,
    FT_PARAM_3,
    FT_PARAM_4,
    FT_PARAM_5,

    //////////////////////// Meta data ////////////////////////
    MDT_FLAGS = 0xA0,           // 0xA0

    MDT_BOOL,                   // 0xA1
    MDT_INT32,                  // 0xA2
    MDT_FLOAT64,                // 0xA3
    MDT_STRING,                 // 0xA4

    MDT_BEGIN_FUNCTOR,          // 0xA5
    MDT_END_FUNCTOR,            // 0xA6

    MDT_BEGIN_LIST,             // 0xA7
    MDT_END_LIST,               // 0xA8

    // We support functors with arity 0 to 31
    MDT_FUNCTOR_0 = 0xC0,
    MDT_FUNCTOR_1,
    MDT_FUNCTOR_2,
    MDT_FUNCTOR_3,
    MDT_FUNCTOR_4,
    MDT_FUNCTOR_5,

    // We supports lists with 0-31 elements
    MDT_LIST_0 = 0xE0,
    MDT_LIST_1,
    MDT_LIST_2,
    MDT_LIST_3,
    MDT_LIST_4,
    MDT_LIST_5,
};