Parsing complete mostly, ordering, resolving, C++ tests
This commit is contained in:
35
memory.c
35
memory.c
@@ -1,21 +1,30 @@
|
||||
global const SizeU default_reserve_size = gib(4);
|
||||
global const SizeU default_alignment = 8;
|
||||
global const SizeU additional_commit_size = mib(1);
|
||||
function SizeU align_up(SizeU size, SizeU align);
|
||||
|
||||
function void
|
||||
memory_copy(U8 *dst, U8 *src, SizeU size){
|
||||
memory_copy(void *dst, void *src, SizeU size){
|
||||
U8 *d = (U8*)dst;
|
||||
U8 *s = (U8*)src;
|
||||
for(SizeU i = 0; i < size; i++){
|
||||
dst[i] = src[i];
|
||||
d[i] = s[i];
|
||||
}
|
||||
}
|
||||
|
||||
function void
|
||||
memory_zero(void *p, SizeU size){
|
||||
U8 *pp = p;
|
||||
U8 *pp = (U8 *)p;
|
||||
for(SizeU i = 0; i < size; i++)
|
||||
pp[i] = 0;
|
||||
}
|
||||
|
||||
function int
|
||||
max_int(int a, int b){
|
||||
if(a>b) return a;
|
||||
return b;
|
||||
}
|
||||
|
||||
function void
|
||||
arena_init(Arena *a){
|
||||
a->memory = os_reserve(default_reserve_size);
|
||||
@@ -40,6 +49,19 @@ arena_push_size(Arena *a, SizeU size){
|
||||
return result;
|
||||
}
|
||||
|
||||
function void *
|
||||
arena_push_copy(Arena *a, void *pointer, SizeU size){
|
||||
void *result = arena_push_size(a, size);
|
||||
memory_copy(result, pointer, size);
|
||||
return result;
|
||||
}
|
||||
|
||||
function SizeU
|
||||
clamp_top_sizeu(SizeU val, SizeU max){
|
||||
if(val>max)return max;
|
||||
return val;
|
||||
}
|
||||
|
||||
function void
|
||||
arena_pop_pos(Arena *arena, SizeU pos){
|
||||
pos = clamp_top_sizeu(pos, arena->len);
|
||||
@@ -69,7 +91,7 @@ function String
|
||||
string_fmtv(Arena *arena, const char *str, va_list args1) {
|
||||
va_list args2;
|
||||
va_copy(args2, args1);
|
||||
U64 len = vsnprintf(0, 0, str, args2);
|
||||
S64 len = vsnprintf(0, 0, str, args2);
|
||||
va_end(args2);
|
||||
|
||||
char *result = (char *)arena_push_size(arena, len + 1);
|
||||
@@ -77,7 +99,8 @@ string_fmtv(Arena *arena, const char *str, va_list args1) {
|
||||
if (arena->len > 0)
|
||||
arena->len -= 1;
|
||||
|
||||
return (String){(U8 *)result, len};
|
||||
String res = {(U8 *)result, len};
|
||||
return res;
|
||||
}
|
||||
|
||||
#define STRING_FMT(arena, str, result) \
|
||||
@@ -104,7 +127,7 @@ string_listf(Arena *arena, String_List *list, const char *str, ...){
|
||||
|
||||
function String
|
||||
string_list_flatten(Arena *arena, String_List *list){
|
||||
String result = {arena_push_size(arena, list->char_count + 1)};
|
||||
String result = {(U8 *)arena_push_size(arena, list->char_count + 1)};
|
||||
for(String_Node *node = list->first; node; node=node->next){
|
||||
memory_copy(result.str+result.len, node->str, node->len);
|
||||
result.len += node->len;
|
||||
|
||||
Reference in New Issue
Block a user