Files
ed 3e064f6443 progress on sanity_tests.c, adding back md_str8_styllize
Eventually a heavy reduction of base & OS should be provided via libgen or done here to reduce the overall surface area of the library for the user.
Base and os were dragged from raddbg and the original metadesk didn't need as many definitions.
2025-02-13 09:53:46 -05:00

90 lines
2.1 KiB
C

#ifdef INTELLISENSE_DIRECTIVES
# include "logger.h"
# include "thread_context.h"
#endif
// Copyright (c) 2024 Epic Games Tools
// Licensed under the MIT license (https://opensource.org/license/mit/)
////////////////////////////////
//~ rjf: Globals/Thread-Locals
MD_API_C md_thread_static MD_Log* md_log_active;
#if !MD_BUILD_SUPPLEMENTARY_UNIT
MD_API_C md_thread_static MD_Log* md_log_active = 0;
#endif
////////////////////////////////
//~ rjf: MD_Log Creation/Selection
void
md_log_select(MD_Log* log) {
md_log_active = log;
}
////////////////////////////////
//~ rjf: MD_Log Building
void
md_log_msg(MD_LogMsgKind kind, MD_String8 string) {
if(md_log_active != 0 && md_log_active->top_scope != 0) {
MD_String8 md_string_copy = md_str8_copy(md_log_active->arena, string);
md_str8_list_push(md_log_active->arena, &md_log_active->top_scope->strings[kind], md_string_copy);
}
}
void
md_log_msgf(MD_LogMsgKind kind, char *fmt, ...) {
if(md_log_active != 0)
{
MD_TempArena scratch = md_scratch_begin(0, 0);
va_list args;
va_start(args, fmt);
MD_String8 string = md_str8fv(scratch.arena, fmt, args);
md_log_msg(kind, string);
va_end(args);
scratch_end(scratch);
}
}
////////////////////////////////
//~ rjf: MD_Log Scopes
void
md_log_scope_begin(void) {
if (md_log_active != 0) {
MD_U64 pos = md_arena_pos(md_log_active->arena);
MD_LogScope* scope = md_push_array(md_log_active->arena, MD_LogScope, 1);
scope->pos = pos;
md_sll_stack_push(md_log_active->top_scope, scope);
}
}
MD_LogScopeResult
md_log_scope_end(MD_Arena *arena)
{
MD_LogScopeResult result = {0};
if(md_log_active != 0)
{
MD_LogScope* scope = md_log_active->top_scope;
if(scope != 0)
{
md_sll_stack_pop(md_log_active->top_scope);
if(arena != 0)
{
for (md_each_enum_val(MD_LogMsgKind, kind)) {
MD_TempArena scratch = md_scratch_begin(&arena, 1);
MD_String8
result_unindented = md_str8_list_join(scratch.arena, &scope->strings[kind], 0);
result.strings[kind] = md_indented_from_string(arena, result_unindented);
scratch_end(scratch);
}
}
md_arena_pop_to(md_log_active->arena, scope->pos);
}
}
return result;
}