From d76385fde33d28d1016696bbc258f5d84d739242 Mon Sep 17 00:00:00 2001 From: Allen Webster Date: Wed, 6 Nov 2019 16:48:37 -0800 Subject: [PATCH] Trying to simplify the dynamic variables implementation a little --- 4ed_dynamic_variables.cpp | 46 ++++++++++++--------------------------- 4ed_dynamic_variables.h | 16 ++------------ 2 files changed, 16 insertions(+), 46 deletions(-) diff --git a/4ed_dynamic_variables.cpp b/4ed_dynamic_variables.cpp index 48779479..0b66b9db 100644 --- a/4ed_dynamic_variables.cpp +++ b/4ed_dynamic_variables.cpp @@ -189,7 +189,7 @@ lifetime__free_key(Lifetime_Allocator *lifetime_allocator, Lifetime_Key *key, Li if ((object->key_count % lifetime_key_reference_per_node) == 0){ zdll_remove(object->key_node_first, object->key_node_last, last_node); - zdll_push_back(lifetime_allocator->free_key_references.first, lifetime_allocator->free_key_references.last, last_node); + sll_stack_push(lifetime_allocator->free_key_references, last_node); } } @@ -198,28 +198,19 @@ lifetime__free_key(Lifetime_Allocator *lifetime_allocator, Lifetime_Key *key, Li table_erase(&lifetime_allocator->key_table, key_data); table_erase(&lifetime_allocator->key_check_table, (u64)PtrAsInt(key)); base_free(lifetime_allocator->allocator, key->members); - zdll_push_back(lifetime_allocator->free_keys.first, lifetime_allocator->free_keys.last, key); + sll_stack_push(lifetime_allocator->free_keys, key); } internal Lifetime_Key_Ref_Node* lifetime__alloc_key_reference_node(Lifetime_Allocator *lifetime_allocator){ Assert(lifetime_allocator != 0); - Lifetime_Key_Ref_Node *result = lifetime_allocator->free_key_references.first; + Lifetime_Key_Ref_Node *result = lifetime_allocator->free_key_references; if (result == 0){ - i32 new_node_count = 32; - umem new_memory_size = new_node_count*sizeof(Lifetime_Key_Ref_Node); - Data new_memory = base_allocate(lifetime_allocator->allocator, new_memory_size); - Lifetime_Key_Ref_Node *new_nodes = (Lifetime_Key_Ref_Node*)new_memory.data; - Lifetime_Key_Ref_Node *new_node_ptr = new_nodes; - for (i32 i = 0; i < new_node_count; i += 1, new_node_ptr += 1){ - zdll_push_back(lifetime_allocator->free_key_references.first, - lifetime_allocator->free_key_references.last, - new_node_ptr); - } - lifetime_allocator->free_key_references.count += new_node_count; - result = lifetime_allocator->free_key_references.first; + result = push_array(&lifetime_allocator->node_arena, Lifetime_Key_Ref_Node, 1); + } + else{ + sll_stack_pop(lifetime_allocator->free_key_references); } - zdll_remove(lifetime_allocator->free_key_references.first, lifetime_allocator->free_key_references.last, result); return(result); } @@ -277,10 +268,8 @@ lifetime__object_free_all_keys(Lifetime_Allocator *lifetime_allocator, Lifetime_ } if (lifetime_object->key_count > 0){ - lifetime_object->key_node_last->next = lifetime_allocator->free_key_references.first; - lifetime_allocator->free_key_references.first = lifetime_object->key_node_first; - i32 node_count = (lifetime_object->key_count + (lifetime_key_reference_per_node - 1))/lifetime_key_reference_per_node; - lifetime_allocator->free_key_references.count += node_count; + lifetime_object->key_node_last->next = lifetime_allocator->free_key_references; + lifetime_allocator->free_key_references = lifetime_object->key_node_first; } } @@ -364,20 +353,13 @@ lifetime_get_or_create_intersection_key(Lifetime_Allocator *lifetime_allocator, } // Allocate - Lifetime_Key *new_key = lifetime_allocator->free_keys.first; + Lifetime_Key *new_key = lifetime_allocator->free_keys; if (new_key == 0){ - i32 new_key_count = 256; - umem new_memory_size = new_key_count*sizeof(Lifetime_Key); - Data new_memory = base_allocate(lifetime_allocator->allocator, new_memory_size); - Lifetime_Key *new_keys = (Lifetime_Key*)new_memory.data; - Lifetime_Key *new_key_ptr = new_keys; - for (i32 i = 0; i < new_key_count; i += 1, new_key_ptr += 1){ - zdll_push_back(lifetime_allocator->free_keys.first, lifetime_allocator->free_keys.last, new_key_ptr); - } - lifetime_allocator->free_keys.count += new_key_count; - new_key = lifetime_allocator->free_keys.first; + new_key = push_array(&lifetime_allocator->node_arena, Lifetime_Key, 1); + } + else{ + sll_stack_pop(lifetime_allocator->free_keys); } - zdll_remove(lifetime_allocator->free_keys.first, lifetime_allocator->free_keys.last, new_key); block_zero_struct(new_key); // Add to Objects diff --git a/4ed_dynamic_variables.h b/4ed_dynamic_variables.h index 1f8352ae..519358ac 100644 --- a/4ed_dynamic_variables.h +++ b/4ed_dynamic_variables.h @@ -125,24 +125,12 @@ struct Lifetime_Key{ global_const u64 LifetimeKeyHash_Empty = 0&(~bit_63); global_const u64 LifetimeKeyHash_Deleted = max_u64&(~bit_63); -struct Lifetime_Key_Ref_Node_List{ - Lifetime_Key_Ref_Node *first; - Lifetime_Key_Ref_Node *last; - i32 count; -}; - -struct Lifetime_Key_List{ - Lifetime_Key *first; - Lifetime_Key *last; - i32 count; -}; - struct Lifetime_Allocator{ Base_Allocator *allocator; Arena node_arena; - Lifetime_Key_Ref_Node_List free_key_references; + Lifetime_Key_Ref_Node *free_key_references; + Lifetime_Key* free_keys; Lifetime_Object *free_objects; - Lifetime_Key_List free_keys; Table_Data_u64 key_table; Table_u64_u64 key_check_table; Table_u64_u64 scope_id_to_scope_ptr_table;