1
0
Fork 0

Fixed: Arena allocator not using arena->current

Browse Source
This commit is contained in:
rhuibertsjr 2024-06-04 12:58:41 +02:00
parent f10b74763e
commit c0a1682042
5 changed files with 69 additions and 18 deletions

View File

@ -46,7 +46,7 @@ arena_allocate(Arena *arena, u64 size)
if (current->size < pos_new && current->growable)
{
Arena *new_memory_bock;
Arena *new_memory_block;
if (size > ARENA_DEFAULT_RESERVE_SIZE)
{
@ -56,17 +56,15 @@ arena_allocate(Arena *arena, u64 size)
}
else
{
new_memory_bock = arena_initialize_default();
new_memory_block = arena_initialize_default();
if (new_memory_bock)
if (new_memory_block)
{
stack_push(arena->current, new_memory_bock, prev);
new_memory_block->prev = current;
*current = *new_memory_block;
current = new_memory_bock;
pos_mem =
memory_align(current->offset, ARENA_DEFAULT_ALIGNMENT);
pos_new = current->offset + size;
pos_mem = memory_align(current->offset, ARENA_DEFAULT_ALIGNMENT);
pos_new = pos_mem + size;
}
}
@ -74,7 +72,7 @@ arena_allocate(Arena *arena, u64 size)
}
void *memory = (void*)((u64) current->backing_buffer + pos_mem);
arena->offset = pos_new;
current->offset = pos_new;
platform_memory_commit(memory, size);
memset(memory, 0, size);

View File

@ -32,6 +32,8 @@ typedef uint64_t b64;
#define MIN(A,B) (((A)<(B))?(A):(B))
#define array_count(a) (sizeof(a) / sizeof((a)[0]))
//= rhjr: linked-list
#define check_null(p) ((p)==0)

View File

@ -41,7 +41,8 @@ hash_store_string8_to_key(Table *table, String8 data)
node->data.length = data.length;
node->key = result;
memory_copy(&node->data.content, &data.content, data.length);
u8 *ptr = node->data.content;
memory_copy(ptr, data.content, data.length);
TableSlot *slot = &table->slots[slot_idx];
queue_push(slot->first, slot->last, node);

45
src/keywords.h Normal file
View File

@ -0,0 +1,45 @@
#ifndef KEYWORDS_H
#define KEYWORDS_H
internal String8 keywords[] = {
//- rhjr: testcase header
str8_lit_comp("testcase"),
str8_lit_comp("identificatiecode"),
str8_lit_comp("titel"),
str8_lit_comp("beschrijving"),
//- rhjr: testcase precond.
str8_lit_comp("precondities"),
str8_lit_comp("product configuratie"),
str8_lit_comp("toestand"),
//...
//- rhjr: testcase procedure
str8_lit_comp("testprocedure"),
//- rhjr: expected results
str8_lit_comp("luchtwasser ventilator"),
str8_lit_comp("luchtwasser waterklep"),
str8_lit_comp("luchtwasser toestand"),
str8_lit_comp("luchtwasser vultijd"),
str8_lit_comp("luchtwasser sproeiklep"),
str8_lit_comp("luchtwasser wasserpomp"),
//- rhjr: acties
str8_lit_comp("luchtwasser"),
str8_lit_comp("maximale-vlotter"),
str8_lit_comp("minimale-vlotter"),
//- rhjr: values
str8_lit_comp("wassen"),
str8_lit_comp("vullen"),
str8_lit_comp("open"),
str8_lit_comp("dicht"),
str8_lit_comp("aan"),
str8_lit_comp("uit")
};
#endif

View File

@ -3,6 +3,7 @@
#include "arena.h"
#include "string.h"
#include "hash_store.h"
#include "keywords.h"
#include "win32_platform.c"
#include "arena.c"
@ -13,16 +14,20 @@ int
main(void)
{
Table *table = hash_store_initialize();
u64 list_size = array_count(keywords);
String8 str8_1 = str8_lit("Hello world");
String8 str8_2 = str8_lit("ayenooo");
for (u64 idx = 0; idx < list_size; idx += 1)
{
if (string8_match(keywords[idx], str8_lit("luchtwasser toestand"))){
int x = 0;
}
Key key1 = hash_store_string8_to_key(table, str8_1);
Key key2 = hash_store_string8_to_key(table, str8_2);
Key key3 = hash_store_string8_to_key(table, str8_1);
Key key = hash_store_string8_to_key(table, keywords[idx]);
String8 string = hash_store_string8_from_key(table, key);
String8 string = hash_store_string8_from_key(table, key2);
printf("%.*s\n", (i32) string.length, string.content);
printf("str8 arena: %lld - arena %lld\n", table->str8_arena->current->offset, table->arena->current->offset);
}
return 0;
};