diff --git a/docs/metadesk_reference.mdesk b/docs/metadesk_reference.mdesk index 962443e..3e925b1 100644 --- a/docs/metadesk_reference.mdesk +++ b/docs/metadesk_reference.mdesk @@ -1086,6 +1086,7 @@ main: @send(Strings) @func MD_S8FromS16: { + arena: *MD_Arena, str: MD_String16, return: MD_String8, }; diff --git a/source/md.c b/source/md.c index 8848c54..20cd227 100644 --- a/source/md.c +++ b/source/md.c @@ -859,7 +859,7 @@ MD_S8Stylize(MD_Arena *arena, MD_String8 string, MD_IdentifierStyle word_style, { result.size += separator.size*(words.node_count-1); } - result.str = MD_PushArray(MD_u8, result.size); + result.str = MD_PushArrayAr(arena, MD_u8, result.size); { MD_u64 write_pos = 0; @@ -1081,11 +1081,13 @@ MD_Utf16FromCodepoint(MD_u16 *out, MD_u32 codepoint) return(advance); } +// TODO(allen): arena "put back" operation to optimize these a bit more + MD_FUNCTION MD_String8 -MD_S8FromS16(MD_String16 in) +MD_S8FromS16(MD_Arena *arena, MD_String16 in) { MD_u64 cap = in.size*3; - MD_u8 *str = MD_PushArray(MD_u8, cap + 1); + MD_u8 *str = MD_PushArrayAr(arena, MD_u8, cap + 1); MD_u16 *ptr = in.str; MD_u16 *opl = ptr + in.size; MD_u64 size = 0; @@ -1101,10 +1103,10 @@ MD_S8FromS16(MD_String16 in) } MD_FUNCTION MD_String16 -MD_S16FromS8(MD_String8 in) +MD_S16FromS8(MD_Arena *arena, MD_String8 in) { MD_u64 cap = in.size*2; - MD_u16 *str = MD_PushArray(MD_u16, (cap + 1)); + MD_u16 *str = MD_PushArrayAr(arena, MD_u16, (cap + 1)); MD_u8 *ptr = in.str; MD_u8 *opl = ptr + in.size; MD_u64 size = 0; @@ -1121,10 +1123,10 @@ MD_S16FromS8(MD_String8 in) } MD_FUNCTION MD_String8 -MD_S8FromS32(MD_String32 in) +MD_S8FromS32(MD_Arena *arena, MD_String32 in) { MD_u64 cap = in.size*4; - MD_u8 *str = MD_PushArray(MD_u8, cap + 1); + MD_u8 *str = MD_PushArrayAr(arena, MD_u8, cap + 1); MD_u32 *ptr = in.str; MD_u32 *opl = ptr + in.size; MD_u64 size = 0; @@ -1138,10 +1140,10 @@ MD_S8FromS32(MD_String32 in) } MD_FUNCTION MD_String32 -MD_S32FromS8(MD_String8 in) +MD_S32FromS8(MD_Arena *arena, MD_String8 in) { MD_u64 cap = in.size; - MD_u32 *str = MD_PushArray(MD_u32, (cap + 1)); + MD_u32 *str = MD_PushArrayAr(arena, MD_u32, (cap + 1)); MD_u8 *ptr = in.str; MD_u8 *opl = ptr + in.size; MD_u64 size = 0; diff --git a/source/md.h b/source/md.h index df190f5..756ac2c 100644 --- a/source/md.h +++ b/source/md.h @@ -778,10 +778,10 @@ MD_FUNCTION MD_DecodedCodepoint MD_DecodeCodepointFromUtf8(MD_u8 *str, MD_u64 ma MD_FUNCTION MD_DecodedCodepoint MD_DecodeCodepointFromUtf16(MD_u16 *str, MD_u64 max); MD_FUNCTION MD_u32 MD_Utf8FromCodepoint(MD_u8 *out, MD_u32 codepoint); MD_FUNCTION MD_u32 MD_Utf16FromCodepoint(MD_u16 *out, MD_u32 codepoint); -MD_FUNCTION MD_String8 MD_S8FromS16(MD_String16 str); -MD_FUNCTION MD_String16 MD_S16FromS8(MD_String8 str); -MD_FUNCTION MD_String8 MD_S8FromS32(MD_String32 str); -MD_FUNCTION MD_String32 MD_S32FromS8(MD_String8 str); +MD_FUNCTION MD_String8 MD_S8FromS16(MD_Arena *arena, MD_String16 str); +MD_FUNCTION MD_String16 MD_S16FromS8(MD_Arena *arena, MD_String8 str); +MD_FUNCTION MD_String8 MD_S8FromS32(MD_Arena *arena, MD_String32 str); +MD_FUNCTION MD_String32 MD_S32FromS8(MD_Arena *arena, MD_String8 str); //~ File Name Strings diff --git a/tests/unicode_test.c b/tests/unicode_test.c index b504737..36fb310 100644 --- a/tests/unicode_test.c +++ b/tests/unicode_test.c @@ -1,19 +1,23 @@ #include "md.h" #include "md.c" +static MD_Arena *arena = 0; + void run_test_on_string(MD_String8 string) { - MD_String16 s16 = MD_S16FromS8(string); - MD_String8 s8_ts16 = MD_S8FromS16(s16); + MD_String16 s16 = MD_S16FromS8(arena, string); + MD_String8 s8_ts16 = MD_S8FromS16(arena, s16); MD_Assert(MD_S8Match(s8_ts16, string, 0)); - MD_String32 s32 = MD_S32FromS8(string); - MD_String8 s8_ts32 = MD_S8FromS32(s32); + MD_String32 s32 = MD_S32FromS8(arena, string); + MD_String8 s8_ts32 = MD_S8FromS32(arena, s32); MD_Assert(MD_S8Match(s8_ts32, string, 0)); } int main(void) { + arena = MD_ArenaNew(1ull << 40); + // TODO(allen): throw more at this. char test_string_c[] = "Foo bar; test the unicode\n\t\0Etc";