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,
};