From abf9ca40b1f649d65ea827a4d9c9f7a876a3b976 Mon Sep 17 00:00:00 2001 From: Allen Webster Date: Wed, 25 Aug 2021 09:17:00 -0700 Subject: [PATCH] memset/memmove overrides --- source/md.c | 46 +++++++++++++++++++++++++--------------------- source/md.h | 22 +++++++++++++++------- 2 files changed, 40 insertions(+), 28 deletions(-) diff --git a/source/md.c b/source/md.c index 4a65442..8d393f7 100644 --- a/source/md.c +++ b/source/md.c @@ -1,5 +1,26 @@ // LICENSE AT END OF FILE (MIT). +//~///////////////////////////////////////////////////////////////////////////// +/////////////////////////// CRT Implementation ///////////////////////////////// +//////////////////////////////////////////////////////////////////////////////// + +#if MD_DEFAULT_MEMSET + +#include +#include + +#if !defined(MD_IMPL_Memset) +# define MD_IMPL_Memset MD_CRT_Memset +#endif +#if !defined(MD_IMPL_Memmove) +# define MD_IMPL_Memmove MD_CRT_Memmove +#endif + +#define MD_CRT_Memset memset +#define MD_CRT_Memmove memmove + +#endif + //~///////////////////////////////////////////////////////////////////////////// /////////////////////////// Win32 Implementation /////////////////////////////// //////////////////////////////////////////////////////////////////////////////// @@ -458,22 +479,6 @@ static MD_Node _md_nil_node = &_md_nil_node, // ref_target }; -//~ Memory Operations - -MD_FUNCTION_IMPL void* -MD_MemoryZero(void *memory, MD_u64 size) -{ - memset(memory, 0, size); - return(memory); -} - -MD_FUNCTION_IMPL void* -MD_MemoryCopy(void *dest, void *src, MD_u64 size) -{ - memcpy(dest, src, size); - return(dest); -} - //~ Arena Functions MD_FUNCTION_IMPL MD_Arena* @@ -803,7 +808,7 @@ MD_S8ListConcat(MD_String8List *list, MD_String8List *to_push) list->last = to_push->last; } } - MD_MemoryZero(to_push, sizeof(*to_push)); + MD_MemoryZeroStruct(to_push); } MD_FUNCTION_IMPL MD_String8List @@ -1978,7 +1983,7 @@ MD_MessageListConcat(MD_MessageList *list, MD_MessageList *to_push) { *list = *to_push; } - MD_MemoryZero(to_push, sizeof(*to_push)); + MD_MemoryZeroStruct(to_push); } MD_FUNCTION_IMPL MD_ParseResult @@ -2331,7 +2336,7 @@ MD_ParseOneNode(MD_Arena *arena, MD_String8 string, MD_u64 offset) } else if(next_token.kind == MD_TokenKind_Newline) { - MD_MemoryZero(&comment_token, sizeof(comment_token)); + MD_MemoryZeroStruct(&comment_token); } } else if((token.kind & MD_TokenGroup_Whitespace) != 0) @@ -3391,8 +3396,7 @@ MD_MakeCmdLineFromOptions(MD_Arena *arena, MD_String8List options) //- rjf: insert the fully parsed option { - MD_CmdLineOption *opt = MD_PushArray(arena, MD_CmdLineOption, 1); - MD_MemoryZero(opt, sizeof(*opt)); + MD_CmdLineOption *opt = MD_PushArrayZero(arena, MD_CmdLineOption, 1); opt->name = option_name; opt->values = option_values; if(cmdln.last_option == 0) diff --git a/source/md.h b/source/md.h index dd5deed..8c91b4b 100644 --- a/source/md.h +++ b/source/md.h @@ -5,9 +5,16 @@ #ifndef MD_H #define MD_H +// TODO(rjf): implicitly-delimited sets are not having their separator flags +// appropriately set + /* NOTE(allen): Notes on overrides/macro options: ** ** Overridable : +** "memset" ** REQUIRED (default crt-based implementation available) +** #define MD_IMPL_Memset (void*, int, MD_u64) -> void* +** #define MD_IMPL_Memmove (void*, void*, MD_u64) -> void* +** ** "file iteration" ** OPTIONAL ** #define MD_IMPL_FileIterBegin (MD_FileIter*, MD_String8) -> MD_b32 ** #define MD_IMPL_FileIterNext (MD_Arena*, MD_FileIter*) -> MD_FileInfo @@ -37,6 +44,7 @@ ** ** Default Implementation Controls ** These controls default to '1' i.e. 'enabled' +** #define MD_DEFAULT_MEMSET -> construct "memset" from CRT ** #define MD_DEFAULT_FILE_ITER -> construct "file iteration" from OS headers ** #define MD_DEFAULT_MEMORY -> construct "low level memory" from OS headers ** #define MD_DEFAULT_ARENA -> construct "arena" from "low level memory" @@ -44,10 +52,10 @@ ** */ -// TODO(rjf): implicitly-delimited sets are not having their separator flags -// appropriately set - //~ Set default values for controls +#if !defined(MD_DEFAULT_MEMSET) +# define MD_DEFAULT_MEMSET 1 +#endif #if !defined(MD_DEFAULT_FILE_ITER) # define MD_DEFAULT_FILE_ITER 1 #endif @@ -293,10 +301,8 @@ #define MD_GLOBAL static #include -#include #include #include -#include #define STB_SPRINTF_DECORATE(name) md_stbsp_##name #include "md_stb_sprintf.h" @@ -774,8 +780,10 @@ struct MD_FileIter //~ Memory Operations -MD_FUNCTION void* MD_MemoryZero(void *memory, MD_u64 size); -MD_FUNCTION void* MD_MemoryCopy(void *dst, void *src, MD_u64 size); +#define MD_MemorySet(p,v,z) (MD_IMPL_Memset(p,v,z)) +#define MD_MemoryZero(p,z) (MD_IMPL_Memset(p,0,z)) +#define MD_MemoryZeroStruct(p) (MD_IMPL_Memset(p,0,sizeof(*(p)))) +#define MD_MemoryCopy(d,s,z) (MD_IMPL_Memmove(d,s,z)) //~ Arena Functions