adding arena (p5)

This commit is contained in:
Allen Webster
2021-07-20 22:04:37 -07:00
parent a2524640ad
commit 2953d97c53
4 changed files with 24 additions and 17 deletions
+1
View File
@@ -1086,6 +1086,7 @@ main:
@send(Strings) @send(Strings)
@func MD_S8FromS16: { @func MD_S8FromS16: {
arena: *MD_Arena,
str: MD_String16, str: MD_String16,
return: MD_String8, return: MD_String8,
}; };
+11 -9
View File
@@ -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.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; MD_u64 write_pos = 0;
@@ -1081,11 +1081,13 @@ MD_Utf16FromCodepoint(MD_u16 *out, MD_u32 codepoint)
return(advance); return(advance);
} }
// TODO(allen): arena "put back" operation to optimize these a bit more
MD_FUNCTION MD_String8 MD_FUNCTION MD_String8
MD_S8FromS16(MD_String16 in) MD_S8FromS16(MD_Arena *arena, MD_String16 in)
{ {
MD_u64 cap = in.size*3; 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 *ptr = in.str;
MD_u16 *opl = ptr + in.size; MD_u16 *opl = ptr + in.size;
MD_u64 size = 0; MD_u64 size = 0;
@@ -1101,10 +1103,10 @@ MD_S8FromS16(MD_String16 in)
} }
MD_FUNCTION MD_String16 MD_FUNCTION MD_String16
MD_S16FromS8(MD_String8 in) MD_S16FromS8(MD_Arena *arena, MD_String8 in)
{ {
MD_u64 cap = in.size*2; 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 *ptr = in.str;
MD_u8 *opl = ptr + in.size; MD_u8 *opl = ptr + in.size;
MD_u64 size = 0; MD_u64 size = 0;
@@ -1121,10 +1123,10 @@ MD_S16FromS8(MD_String8 in)
} }
MD_FUNCTION MD_String8 MD_FUNCTION MD_String8
MD_S8FromS32(MD_String32 in) MD_S8FromS32(MD_Arena *arena, MD_String32 in)
{ {
MD_u64 cap = in.size*4; 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 *ptr = in.str;
MD_u32 *opl = ptr + in.size; MD_u32 *opl = ptr + in.size;
MD_u64 size = 0; MD_u64 size = 0;
@@ -1138,10 +1140,10 @@ MD_S8FromS32(MD_String32 in)
} }
MD_FUNCTION MD_String32 MD_FUNCTION MD_String32
MD_S32FromS8(MD_String8 in) MD_S32FromS8(MD_Arena *arena, MD_String8 in)
{ {
MD_u64 cap = in.size; 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 *ptr = in.str;
MD_u8 *opl = ptr + in.size; MD_u8 *opl = ptr + in.size;
MD_u64 size = 0; MD_u64 size = 0;
+4 -4
View File
@@ -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_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_Utf8FromCodepoint(MD_u8 *out, MD_u32 codepoint);
MD_FUNCTION MD_u32 MD_Utf16FromCodepoint(MD_u16 *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_String8 MD_S8FromS16(MD_Arena *arena, MD_String16 str);
MD_FUNCTION MD_String16 MD_S16FromS8(MD_String8 str); MD_FUNCTION MD_String16 MD_S16FromS8(MD_Arena *arena, MD_String8 str);
MD_FUNCTION MD_String8 MD_S8FromS32(MD_String32 str); MD_FUNCTION MD_String8 MD_S8FromS32(MD_Arena *arena, MD_String32 str);
MD_FUNCTION MD_String32 MD_S32FromS8(MD_String8 str); MD_FUNCTION MD_String32 MD_S32FromS8(MD_Arena *arena, MD_String8 str);
//~ File Name Strings //~ File Name Strings
+8 -4
View File
@@ -1,19 +1,23 @@
#include "md.h" #include "md.h"
#include "md.c" #include "md.c"
static MD_Arena *arena = 0;
void run_test_on_string(MD_String8 string) void run_test_on_string(MD_String8 string)
{ {
MD_String16 s16 = MD_S16FromS8(string); MD_String16 s16 = MD_S16FromS8(arena, string);
MD_String8 s8_ts16 = MD_S8FromS16(s16); MD_String8 s8_ts16 = MD_S8FromS16(arena, s16);
MD_Assert(MD_S8Match(s8_ts16, string, 0)); MD_Assert(MD_S8Match(s8_ts16, string, 0));
MD_String32 s32 = MD_S32FromS8(string); MD_String32 s32 = MD_S32FromS8(arena, string);
MD_String8 s8_ts32 = MD_S8FromS32(s32); MD_String8 s8_ts32 = MD_S8FromS32(arena, s32);
MD_Assert(MD_S8Match(s8_ts32, string, 0)); MD_Assert(MD_S8Match(s8_ts32, string, 0));
} }
int main(void) int main(void)
{ {
arena = MD_ArenaNew(1ull << 40);
// TODO(allen): throw more at this. // TODO(allen): throw more at this.
char test_string_c[] = "Foo bar; test the unicode\n\t\0Etc"; char test_string_c[] = "Foo bar; test the unicode\n\t\0Etc";