# Type --- ## Object Definitions ```c #define KPL_TYPE_BLOCK_ARRAY_SIZE UINT16_MAX #define KPL_TYPE_BLOCKS_SIZE UINT16_MAX typedef struct { uint16_t block_index, array_index; } kpl_type_ptr; static const kpl_type_ptr kpl_type_ptr_null = { UINT16_MAX, UINT16_MAX }; typedef enum : uint8_t { // ... } kpl_type_template; typedef enum : uint8_t { CONST = 1 << 0, EMPTY = 1 << 1, REF = 1 << 2, SHARED = 1 << 3, LOCK = 1 << 4 } kpl_type_qualifiers; typedef union { // ... } kpl_type_body; typedef struct { kpl_type_template template; kpl_type_qualifiers qualifiers; uint16_t modifiers; _Atomic int32_t ref_count; kpl_type_ptr self, prev, next, parent; kpl_type_body body; } kpl_type; static size_t type_array_block_index; static kpl_type *type_array_blocks[KPL_TYPE_BLOCKS_SIZE]; static kpl_type_ptr type_pool_head; ```