// ╒═════════════════════ RTTI interpretation ═════════════════════╕ // 3 2 1 // 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 bits // ├─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┤ ◄─ RTTI_BASE // │ count │ // ├ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ┤ // │ reserved │ // ╞═══════════════════════════════════════════════════════════════╡ ┐ // │ RTTIData#flags [id=1] │ id=1..count // ├ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ┤ // │ RTTIData#base [id=1] │ // ├───────────────────────────────────────────────────────────────┤ // │ ... │ /** Runtime type information data structure. */ @unmanaged export class RTTIData { flags: RTTIFlags; base: u32; } /** Runtime type information flags. */ export const enum RTTIFlags { /** No specific flags. */ NONE = 0, /** Type is an `Array`. */ ARRAY = 1 << 0, /** Type is a `Set`. */ SET = 1 << 1, /** Type is a `Map`. */ MAP = 1 << 2, /** Type is inherently acyclic. */ ACYCLIC = 1 << 3, /** Value alignment of 1 byte. */ VALUE_ALIGN_0 = 1 << 4, /** Value alignment of 2 bytes. */ VALUE_ALIGN_1 = 1 << 5, /** Value alignment of 4 bytes. */ VALUE_ALIGN_2 = 1 << 6, /** Value alignment of 8 bytes. */ VALUE_ALIGN_3 = 1 << 7, /** Value alignment of 16 bytes. */ VALUE_ALIGN_4 = 1 << 8, /** Value type is nullable. */ VALUE_NULLABLE = 1 << 9, /** Value type is managed. */ VALUE_MANAGED = 1 << 10, /** Key alignment of 1 byte. */ KEY_ALIGN_0 = 1 << 11, /** Key alignment of 2 bytes. */ KEY_ALIGN_1 = 1 << 12, /** Key alignment of 4 bytes. */ KEY_ALIGN_2 = 1 << 13, /** Key alignment of 8 bytes. */ KEY_ALIGN_3 = 1 << 14, /** Key alignment of 16 bytes. */ KEY_ALIGN_4 = 1 << 15, /** Key type is nullable. */ KEY_NULLABLE = 1 << 16, /** Key type is managed. */ KEY_MANAGED = 1 << 17 }