diff options
Diffstat (limited to 'docs/application/type.md')
| -rw-r--r-- | docs/application/type.md | 40 |
1 files changed, 38 insertions, 2 deletions
diff --git a/docs/application/type.md b/docs/application/type.md index eae1425..52b28de 100644 --- a/docs/application/type.md +++ b/docs/application/type.md @@ -2,6 +2,42 @@ --- -## Allocation - ## 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 __attribute__((packed)) { + // ... +} kpl_type_template; + +typedef enum __attribute__((packed)) { + // .. +} kpl_type_flags; + +typedef union { + // ... +} kpl_type_body; + +typedef struct { + kpl_type_template template; + uint16_t flags; + kpl_type_ptr self, prev, next, parent; + _Atomic int32_t ref_count; + 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; +``` |
