mirror of
https://github.com/Ed94/metadesk.git
synced 2026-06-12 23:51:37 -07:00
3e064f6443
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.
90 lines
2.1 KiB
C
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;
|
|
}
|