diff options
Diffstat (limited to 'docs')
| -rw-r--r-- | docs/application/buffer.md | 4 | ||||
| -rw-r--r-- | docs/application/group.md | 2 | ||||
| -rw-r--r-- | docs/application/interface.md | 6 | ||||
| -rw-r--r-- | docs/application/io.md | 1 | ||||
| -rw-r--r-- | docs/application/map.md | 4 | ||||
| -rw-r--r-- | docs/application/memory.md | 56 | ||||
| -rw-r--r-- | docs/application/name.md | 7 | ||||
| -rw-r--r-- | docs/application/queue.md | 4 | ||||
| -rw-r--r-- | docs/application/type.md | 8 | ||||
| -rw-r--r-- | docs/lifecycle/register.md | 9 |
10 files changed, 71 insertions, 30 deletions
diff --git a/docs/application/buffer.md b/docs/application/buffer.md index 881fb27..ea30458 100644 --- a/docs/application/buffer.md +++ b/docs/application/buffer.md @@ -6,8 +6,8 @@ ```c typedef struct _kpl_buffer { - KPL_POOL_HEADER(struct _kpl_buffer); - uint64_t byte_length; + KPL_ALLOC_HEADER(struct _kpl_buffer); + size_t byte_length; kpl_interface *interface; uint8_t bytes[]; } kpl_buffer; diff --git a/docs/application/group.md b/docs/application/group.md index 286f1ee..65566b7 100644 --- a/docs/application/group.md +++ b/docs/application/group.md @@ -6,7 +6,7 @@ ```c typedef struct _kpl_group { - KPL_POOL_HEADER(struct _kpl_group); + KPL_ALLOC_HEADER(struct _kpl_group); kpl_class items[]; } kpl_group; ``` diff --git a/docs/application/interface.md b/docs/application/interface.md index 8a5dc69..b60da5e 100644 --- a/docs/application/interface.md +++ b/docs/application/interface.md @@ -24,13 +24,11 @@ typedef union { typedef size_t kpl_any_hash_fn(const kpl_any a); -typedef bool kpl_any_eq_fn(const kpl_any a, const kpl_any b); - typedef ssize_t kpl_any_cmp_fn(const kpl_any a, const kpl_any b); -typedef void kpl_any_free_fn(kpl_any a); +typedef int32_t kpl_write(const kpl_ant a, FILE *file, int32_t idnt, uint32_t opts); -// TODO write +typedef void kpl_any_free_fn(kpl_any a); typedef struct { // TODO diff --git a/docs/application/io.md b/docs/application/io.md index d97f5d0..9ab786c 100644 --- a/docs/application/io.md +++ b/docs/application/io.md @@ -3,4 +3,3 @@ --- All Io is done through linux io uring - diff --git a/docs/application/map.md b/docs/application/map.md index 1bc8b40..01ba57f 100644 --- a/docs/application/map.md +++ b/docs/application/map.md @@ -11,8 +11,8 @@ typedef struct _kpl_map_bucket { } kpl_map_bucket; typedef struct _kpl_map { - KPL_POOL_HEADER(strcut _kpl_map); - uint64_t length; + KPL_ALLOC_HEADER(struct _kpl_map); + uint32_t used_buckets, available_buckets; kpl_interface *key_interface, *value_interface; kpl_map_bucket *head, *tail; kpl_map_bucket *buckets[]; diff --git a/docs/application/memory.md b/docs/application/memory.md index fbc6b67..61a59f9 100644 --- a/docs/application/memory.md +++ b/docs/application/memory.md @@ -5,10 +5,30 @@ ## Object Definitions ```c -#define KPL_SLAB_HEADER(STRUCT) STRCUT *next +#define KPL_ALLOC_HEADER(STRCUT) size_t obj_size : 56; int8_t tree_weight; STRCUT *prev + +typedef struct _kpl_alloc_obj { + KPL_ALLOC_HEADER(_kpl_alloc_obj); +} kpl_alloc_obj; + +#define KPL_ALLOC_TREE_HEADER(STRCUT) KPL_ALLOC_TREE_HEADER(STRUCT); STRUCT *next, *parent + +typdef struct _kpl_alloc_tree_obj { + KPL_ALLOC_TREE_HEADER(struct _kpl_alloc_tree_obj); +} kpl_alloc_tree_obj; + +#define KPL_ALLOC_POOL_SIZE 56 + +typedef struct kpl_alloc { + _Atomic size_t bytes_allocated; + kpl_mutex mutex; + kpl_alloc_obj *pool[KPL_ALLOC_POOL_SIZE] +} kpl_alloc; + +#define KPL_SLAB_HEADER(STRUCT) STRCUT *prev typdef strcut _kpl_slab_obj { - KPL_SLAB_LIST_HEADER(strcut _kpl_slab_obj); + KPL_SLAB_HEADER(strcut _kpl_slab_obj); } kpl_slab_obj; #define KPL_SLAB_LIST_HEADER(STRCUT) STRCUT *prev, *next @@ -17,15 +37,35 @@ typdef strcut _kpl_slab_list_obj { KPL_SLAB_LIST_HEADER(strcut _kpl_slab_list_obj); } kpl_slab_list_obj; -#define KPL_SLAB_TREE_HEADER(STRUCT) STRUCT *parent, *left, *right, uint8_t tree_weight +#define KPL_SLAB_TREE_HEADER(STRUCT) STRUCT *prev, *next, *parent; int8_t tree_weight typdef strcut _kpl_slab_tree_obj { KPL_SLAB_TREE_HEADER(struct _kpl_slab_tree_obj); } kpl_slab_tree_obj; -#define KPL_POOL_HEADER(STRCUT) STRCUT *parent, *left, *right, uint8_t tree_weight, uint64_t obj_size : 56 - -typdef struct _kpl_pool_obj { - KPL_POOL_HEADER(struct _kpl_pool_obj); -} kpl_pool_obj; +typedef struct _kpl_slab { + KPL_ALLOC_HEADER(struct _kpl_slab); + uint32_t obj_size, byte_index; + kpl_slab_obj *pool; + kpl_mutex mutex; + uint8_t byte_array[MAX_SIZE]; +} kpl_slab; ``` + +# Alloc + +All allocated objects size must be aligned to the power of two + +## Pooling + +Each bucket in the `kpl_alloc.pool` represents two to the power of the bucket index + +# AVL Tree For Slab And Alloc + +# Slab + +Allocated by `kpl_alloc` + +## Pooling + +Objects for reuse are stored as a list by the `kpl_slab_obj.prev` on `kpl_slab.pool` diff --git a/docs/application/name.md b/docs/application/name.md index afc5880..3db91dc 100644 --- a/docs/application/name.md +++ b/docs/application/name.md @@ -8,7 +8,12 @@ Each word representing a var, symbol or type gets an `NAME_IDENTIFIER` -> `kpl_n ```c typedef struct _kpl_name { - KPL_POOL_HEADER(struct _kpl_name); + KPL_ALLOC_TREE_HEADER(struct _kpl_name); char c_str[]; } kpl_name; + +typedef strcut { + kpl_name *root; + kpl_mutex mutex; +} kpl_name_tree; ``` diff --git a/docs/application/queue.md b/docs/application/queue.md index 5e8ae15..2807ce9 100644 --- a/docs/application/queue.md +++ b/docs/application/queue.md @@ -11,8 +11,8 @@ typedef struct _kpl_queue_item { } kpl_queue_item; typedef struct _kpl_queue { - KPL_POOL_HEADER(strcut _kpl_queue); - uint64_t length; + KPL_ALLOC_HEADER(struct _kpl_queue); + size_t item_length; kpl_interface *interface; kpl_pool_any *head, *tail; } kpl_queue; diff --git a/docs/application/type.md b/docs/application/type.md index 5ca4469..c985b35 100644 --- a/docs/application/type.md +++ b/docs/application/type.md @@ -10,7 +10,7 @@ #define KPL_TYPE_BLOCKS_SIZE UINT16_MAX typedef struct { - uint16_t block_index, array_index; + uint16_t slab_index, slab_array_index; } kpl_type_ptr; static const kpl_type_ptr kpl_type_ptr_null = { UINT16_MAX, UINT16_MAX }; @@ -39,9 +39,5 @@ typedef struct { 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; +// TODO slab store for kpl_type_ptr ``` diff --git a/docs/lifecycle/register.md b/docs/lifecycle/register.md index 7fccb05..3f59469 100644 --- a/docs/lifecycle/register.md +++ b/docs/lifecycle/register.md @@ -2,13 +2,16 @@ --- -# Create Namespace +# Create ## Module 1. Init new module with the filename 2. Add to namespace tree +3. Load -## String +# Load + +## Module -# Load Module +## String |
