dqn: Put the arena label into the base arena class

This commit is contained in:
doyle 2023-04-25 16:55:44 +10:00
parent b3de9e268a
commit e6e4b8a79e

30
dqn.h
View File

@ -1430,6 +1430,7 @@ struct Dqn_ArenaStatString
struct Dqn_Arena struct Dqn_Arena
{ {
Dqn_String8 label; ///< Optional label to describe the arena
Dqn_usize min_block_size; Dqn_usize min_block_size;
Dqn_ArenaBlock *curr; ///< The current memory block of the arena Dqn_ArenaBlock *curr; ///< The current memory block of the arena
Dqn_ArenaBlock *tail; ///< The tail memory block of the arena Dqn_ArenaBlock *tail; ///< The tail memory block of the arena
@ -1504,7 +1505,6 @@ DQN_API void Dqn_Arena_EndTempMemory_ (DQN_LEAK_TRACE_FUNCTION
struct Dqn_ArenaCatalogItem struct Dqn_ArenaCatalogItem
{ {
Dqn_Arena *arena; Dqn_Arena *arena;
Dqn_String8 label;
Dqn_ArenaCatalogItem *next; Dqn_ArenaCatalogItem *next;
Dqn_ArenaCatalogItem *prev; Dqn_ArenaCatalogItem *prev;
}; };
@ -1518,8 +1518,8 @@ struct Dqn_ArenaCatalog
}; };
DQN_API void Dqn_ArenaCatalog_Init (Dqn_ArenaCatalog *catalog, Dqn_Arena *arena); DQN_API void Dqn_ArenaCatalog_Init (Dqn_ArenaCatalog *catalog, Dqn_Arena *arena);
DQN_API void Dqn_ArenaCatalog_AddFV (Dqn_ArenaCatalog *catalog, Dqn_Arena *arena, char const *fmt, va_list args); DQN_API void Dqn_ArenaCatalog_Add (Dqn_ArenaCatalog *catalog, Dqn_Arena *arena);
DQN_API void Dqn_ArenaCatalog_AddF (Dqn_ArenaCatalog *catalog, Dqn_Arena *arena, char const *fmt, ...); DQN_API Dqn_Arena *Dqn_ArenaCatalog_Alloc (Dqn_ArenaCatalog *catalog, Dqn_usize byte_size, Dqn_usize commit);
DQN_API Dqn_Arena *Dqn_ArenaCatalog_AllocFV(Dqn_ArenaCatalog *catalog, Dqn_usize byte_size, Dqn_usize commit, char const *fmt, va_list args); DQN_API Dqn_Arena *Dqn_ArenaCatalog_AllocFV(Dqn_ArenaCatalog *catalog, Dqn_usize byte_size, Dqn_usize commit, char const *fmt, va_list args);
DQN_API Dqn_Arena *Dqn_ArenaCatalog_AllocF (Dqn_ArenaCatalog *catalog, Dqn_usize byte_size, Dqn_usize commit, char const *fmt, ...); DQN_API Dqn_Arena *Dqn_ArenaCatalog_AllocF (Dqn_ArenaCatalog *catalog, Dqn_usize byte_size, Dqn_usize commit, char const *fmt, ...);
@ -6187,7 +6187,7 @@ DQN_API void Dqn_ArenaCatalog_Init(Dqn_ArenaCatalog *catalog, Dqn_Arena *arena)
catalog->sentinel.prev = &catalog->sentinel; catalog->sentinel.prev = &catalog->sentinel;
} }
DQN_API void Dqn_ArenaCatalog_AddFV(Dqn_ArenaCatalog *catalog, Dqn_Arena *arena, char const *fmt, va_list args) DQN_API void Dqn_ArenaCatalog_Add(Dqn_ArenaCatalog *catalog, Dqn_Arena *arena)
{ {
// NOTE: We could use an atomic for appending to the sentinel but it is such // NOTE: We could use an atomic for appending to the sentinel but it is such
// a rare operation to append to the catalog that we don't bother. // a rare operation to append to the catalog that we don't bother.
@ -6197,9 +6197,6 @@ DQN_API void Dqn_ArenaCatalog_AddFV(Dqn_ArenaCatalog *catalog, Dqn_Arena *arena,
Dqn_ArenaCatalogItem *result = Dqn_Arena_New(catalog->arena, Dqn_ArenaCatalogItem, Dqn_ZeroMem_Yes); Dqn_ArenaCatalogItem *result = Dqn_Arena_New(catalog->arena, Dqn_ArenaCatalogItem, Dqn_ZeroMem_Yes);
result->arena = arena; result->arena = arena;
// NOTE: Create arena label
result->label = Dqn_String8_InitFV(Dqn_Arena_Allocator(catalog->arena), fmt, args);
// NOTE: Add to the catalog (linked list) // NOTE: Add to the catalog (linked list)
Dqn_ArenaCatalogItem *sentinel = &catalog->sentinel; Dqn_ArenaCatalogItem *sentinel = &catalog->sentinel;
result->next = sentinel; result->next = sentinel;
@ -6211,22 +6208,21 @@ DQN_API void Dqn_ArenaCatalog_AddFV(Dqn_ArenaCatalog *catalog, Dqn_Arena *arena,
Dqn_Atomic_AddU32(&catalog->arena_count, 1); Dqn_Atomic_AddU32(&catalog->arena_count, 1);
} }
DQN_API void Dqn_ArenaCatalog_AddF(Dqn_ArenaCatalog *catalog, Dqn_Arena *arena, char const *fmt, ...) DQN_API Dqn_Arena *Dqn_ArenaCatalog_Alloc(Dqn_ArenaCatalog *catalog, Dqn_usize byte_size, Dqn_usize commit)
{
va_list args;
va_start(args, fmt);
Dqn_ArenaCatalog_AddFV(catalog, arena, fmt, args);
va_end(args);
}
DQN_API Dqn_Arena *Dqn_ArenaCatalog_AllocFV(Dqn_ArenaCatalog *catalog, Dqn_usize byte_size, Dqn_usize commit, char const *fmt, va_list args)
{ {
Dqn_TicketMutex_Begin(&catalog->ticket_mutex); Dqn_TicketMutex_Begin(&catalog->ticket_mutex);
Dqn_Arena *result = Dqn_Arena_New(catalog->arena, Dqn_Arena, Dqn_ZeroMem_Yes); Dqn_Arena *result = Dqn_Arena_New(catalog->arena, Dqn_Arena, Dqn_ZeroMem_Yes);
Dqn_TicketMutex_End(&catalog->ticket_mutex); Dqn_TicketMutex_End(&catalog->ticket_mutex);
Dqn_Arena_Grow(result, byte_size, commit, 0 /*flags*/); Dqn_Arena_Grow(result, byte_size, commit, 0 /*flags*/);
Dqn_ArenaCatalog_AddFV(catalog, result, fmt, args); Dqn_ArenaCatalog_Add(catalog, result);
return result;
}
DQN_API Dqn_Arena *Dqn_ArenaCatalog_AllocFV(Dqn_ArenaCatalog *catalog, Dqn_usize byte_size, Dqn_usize commit, char const *fmt, va_list args)
{
Dqn_Arena *result = Dqn_ArenaCatalog_Alloc(catalog, byte_size, commit);
result->label = Dqn_String8_InitFV(Dqn_Arena_Allocator(result), fmt, args);
return result; return result;
} }