mirror of
https://github.com/Ed94/metadesk.git
synced 2026-06-13 07:52:22 -07:00
progress on collaping arena->allocator info code paths for strings.h/c, at string arrays
This commit is contained in:
+26
-30
@@ -242,16 +242,16 @@ String8
|
||||
str8_from_memory_size__ainfo(AllocatorInfo ainfo, U64 z) {
|
||||
String8 result = {0};
|
||||
if (z < KB(1)) {
|
||||
result = alloc_str8f(ainfo, "%llu b", z);
|
||||
result = str8f(ainfo, "%llu b", z);
|
||||
}
|
||||
else if (z < MB(1)) {
|
||||
result = alloc_str8f(ainfo, "%llu.%02llu Kb", z/KB(1), ((100*z)/KB(1))%100);
|
||||
result = str8f(ainfo, "%llu.%02llu Kb", z/KB(1), ((100*z)/KB(1))%100);
|
||||
}
|
||||
else if (z < GB(1)) {
|
||||
result = alloc_str8f(ainfo, "%llu.%02llu Mb", z/MB(1), ((100*z)/MB(1))%100);
|
||||
result = str8f(ainfo, "%llu.%02llu Mb", z/MB(1), ((100*z)/MB(1))%100);
|
||||
}
|
||||
else{
|
||||
result = alloc_str8f(ainfo, "%llu.%02llu Gb", z/GB(1), ((100*z)/GB(1))%100);
|
||||
result = str8f(ainfo, "%llu.%02llu Gb", z/GB(1), ((100*z)/GB(1))%100);
|
||||
}
|
||||
return(result);
|
||||
}
|
||||
@@ -350,13 +350,13 @@ str8_from_s64__ainfo(AllocatorInfo ainfo, S64 s64, U32 radix, U8 min_digits, U8
|
||||
{
|
||||
String8 result = {0};
|
||||
if(s64 < 0) {
|
||||
U8 bytes[KB(8)];
|
||||
U8 bytes[KB(1)];
|
||||
FArena scratch = farena_from_memory(bytes, size_of(bytes));
|
||||
String8 numeric_part = str8_from_allocator_u64(farena_allocator(scratch), (U64)(-s64), radix, min_digits, digit_group_separator);
|
||||
result = alloc_str8f(ainfo, "-%S", numeric_part);
|
||||
String8 numeric_part = str8_from_u64(farena_allocator(scratch), (U64)(-s64), radix, min_digits, digit_group_separator);
|
||||
result = str8f(ainfo, "-%S", numeric_part);
|
||||
}
|
||||
else {
|
||||
result = str8_from_allocator_u64(ainfo, (U64)s64, radix, min_digits, digit_group_separator);
|
||||
result = str8_from_u64(ainfo, (U64)s64, radix, min_digits, digit_group_separator);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
@@ -427,7 +427,7 @@ str8_list_concat_in_place(String8List* list, String8List* to_push) {
|
||||
}
|
||||
|
||||
String8Node*
|
||||
str8_list_alloc_aligner(AllocatorInfo ainfo, String8List* list, U64 min, U64 align) {
|
||||
str8_list_aligner__ainfo(AllocatorInfo ainfo, String8List* list, U64 min, U64 align) {
|
||||
String8Node* node = alloc_array_no_zero(ainfo, String8Node, 1);
|
||||
U64 new_size = list->total_size + min;
|
||||
U64 increase_size = 0;
|
||||
@@ -453,11 +453,11 @@ str8_list_alloc_aligner(AllocatorInfo ainfo, String8List* list, U64 min, U64 ali
|
||||
}
|
||||
|
||||
String8List
|
||||
str8_list_alloc_copy(AllocatorInfo ainfo, String8List* list) {
|
||||
str8_list_alloc_copy__ainfo(AllocatorInfo ainfo, String8List* list) {
|
||||
String8List result = {0};
|
||||
for (String8Node* node = list->first; node != 0; node = node->next) {
|
||||
String8Node* new_node = alloc_array_no_zero(ainfo, String8Node, 1);
|
||||
String8 new_string = alloc_str8_copy(ainfo, node->string);
|
||||
for (String8Node* node = list->first; node != 0; node = node->next) {
|
||||
String8Node* new_node = alloc_array_no_zero(ainfo, String8Node, 1);
|
||||
String8 new_string = str8_copy(ainfo, node->string);
|
||||
str8_list_push_node_set_string(&result, new_node, new_string);
|
||||
}
|
||||
return(result);
|
||||
@@ -466,11 +466,9 @@ str8_list_alloc_copy(AllocatorInfo ainfo, String8List* list) {
|
||||
////////////////////////////////
|
||||
//~ rjf: String Splitting & Joining
|
||||
|
||||
force_inline String8List str8_split_push (Arena* arena, String8 string, U8* split_chars, U64 split_char_count, StringSplitFlags flags) { return str8_split_alloc (arena_allocator(arena), string, split_chars, split_char_count, flags); }
|
||||
force_inline String8 str8_list_join_push(Arena* arena, String8List* list, StringJoin* optional_params) { return str8_list_join_alloc(arena_allocator(arena), list, optional_params); }
|
||||
|
||||
String8List
|
||||
str8_split_alloc(AllocatorInfo ainfo, String8 string, U8* split_chars, U64 split_char_count, StringSplitFlags flags) {
|
||||
str8_split__ainfo(AllocatorInfo ainfo, String8 string, U8* split_chars, U64 split_char_count, StringSplitFlags flags)
|
||||
{
|
||||
String8List list = {0};
|
||||
|
||||
B32 keep_empties = (flags & StringSplitFlag_KeepEmpties);
|
||||
@@ -505,36 +503,34 @@ str8_split_alloc(AllocatorInfo ainfo, String8 string, U8* split_chars, U64 split
|
||||
}
|
||||
|
||||
String8
|
||||
str8_list_join_alloc(AllocatorInfo ainfo, String8List* list, StringJoin* optional_params)
|
||||
str8_list_join__ainfo(AllocatorInfo ainfo, String8List* list, StringJoin optional_params)
|
||||
{
|
||||
StringJoin join = {0};
|
||||
if (optional_params != 0){
|
||||
memory_copy_struct(&join, optional_params);
|
||||
}
|
||||
|
||||
U64 sep_count = 0;
|
||||
StringJoin join = optional_params;
|
||||
U64 sep_count = 0;
|
||||
if (list->node_count > 0){
|
||||
sep_count = list->node_count - 1;
|
||||
}
|
||||
|
||||
String8 result;
|
||||
result.size = join.pre.size + join.post.size + sep_count*join.sep.size + list->total_size;
|
||||
result.size = join.pre.size + join.post.size + sep_count * join.sep.size + list->total_size;
|
||||
|
||||
U8* ptr = result.str = alloc_array_no_zero(ainfo, U8, result.size + 1);
|
||||
|
||||
memory_copy(ptr, join.pre.str, join.pre.size);
|
||||
ptr += join.pre.size;
|
||||
for (String8Node *node = list->first; node != 0; node = node->next)
|
||||
{
|
||||
|
||||
for (String8Node *node = list->first; node != 0; node = node->next) {
|
||||
memory_copy(ptr, node->string.str, node->string.size);
|
||||
ptr += node->string.size;
|
||||
|
||||
if (node->next != 0) {
|
||||
memory_copy(ptr, join.sep.str, join.sep.size);
|
||||
ptr += join.sep.size;
|
||||
}
|
||||
}
|
||||
|
||||
memory_copy(ptr, join.post.str, join.post.size);
|
||||
ptr += join.post.size;
|
||||
*ptr = 0;
|
||||
ptr += join.post.size;
|
||||
*ptr = 0;
|
||||
return(result);
|
||||
}
|
||||
|
||||
|
||||
+59
-54
@@ -461,9 +461,9 @@ MD_API String8 str8_from_s64__ainfo (AllocatorInfo ainfo, S64 u64, U32 ra
|
||||
String8 str8_from_bits_u32__ainfo(AllocatorInfo ainfo, U32 x);
|
||||
String8 str8_from_bits_u64__ainfo(AllocatorInfo ainfo, U64 x);
|
||||
|
||||
#define str8_from_memory_size(allocator, z) _Generic(allocator, Arena*: str8_from_memory_size__arena, AllocatorInfo: str8_from_memory_size__ainfo, default: MD_generic_selection_fail) MD_RESOLVED_FUNCTION_CALL(allocator, z)
|
||||
#define str8_from_u64(allocator, radix, min_digits, digit_group_separator) _Generic(allocator, Arena*: str8_from_u64__arena, AllocatorInfo: str8_from_u64__ainfo, default: MD_generic_selection_fail) MD_RESOLVED_FUNCTION_CALL(allocator, radix, min_digits, digit_group_separator)
|
||||
#define str8_from_s64(allocator, radix, min_digits, digit_group_separator) _Generic(allocator, Arena*: str8_from_s64__arena, AllocatorInfo: str8_from_s64__ainfo , default: MD_generic_selection_fail) MD_RESOLVED_FUNCTION_CALL(allocator, radix, min_digits, digit_group_separator)
|
||||
#define str8_from_memory_size(allocator, z) _Generic(allocator, Arena*: str8_from_memory_size__arena, AllocatorInfo: str8_from_memory_size__ainfo, default: MD_generic_selection_fail) MD_RESOLVED_FUNCTION_CALL(allocator, z)
|
||||
#define str8_from_u64(allocator, u64, radix, min_digits, digit_group_separator) _Generic(allocator, Arena*: str8_from_u64__arena, AllocatorInfo: str8_from_u64__ainfo, default: MD_generic_selection_fail) MD_RESOLVED_FUNCTION_CALL(allocator, u64, radix, min_digits, digit_group_separator)
|
||||
#define str8_from_s64(allocator, s64, radix, min_digits, digit_group_separator) _Generic(allocator, Arena*: str8_from_s64__arena, AllocatorInfo: str8_from_s64__ainfo , default: MD_generic_selection_fail) MD_RESOLVED_FUNCTION_CALL(allocator, s64, radix, min_digits, digit_group_separator)
|
||||
|
||||
force_inline String8 str8_from_memory_size__arena(Arena* arena, U64 z) { return str8_from_memory_size__ainfo(arena_allocator(arena), z); }
|
||||
force_inline String8 str8_from_u64__arena (Arena* arena, U64 u64, U32 radix, U8 min_digits, U8 digit_group_separator) { return str8_from_u64__ainfo (arena_allocator(arena), u64, radix, min_digits, digit_group_separator); }
|
||||
@@ -644,46 +644,46 @@ str8_list_push_node_front_set_string(String8List* list, String8Node* node, Strin
|
||||
return(node);
|
||||
}
|
||||
|
||||
MD_API String8Node* str8_list_push_aligner(Arena* arena, String8List* list, U64 min, U64 align);
|
||||
MD_API String8List str8_list_push_copy (Arena* arena, String8List* list);
|
||||
MD_API String8Node* str8_list_aligner__arena(Arena* arena, String8List* list, U64 min, U64 align);
|
||||
MD_API String8List str8_list_copy__arena (Arena* arena, String8List* list);
|
||||
|
||||
String8Node* str8_list_push (Arena* arena, String8List* list, String8 string);
|
||||
String8Node* str8_list_push_front (Arena* arena, String8List* list, String8 string);
|
||||
String8Node* str8_list_pushf (Arena* arena, String8List* list, char* fmt, ...);
|
||||
String8Node* str8_list_push_frontf (Arena* arena, String8List* list, char* fmt, ...);
|
||||
String8Node* str8_list_push__arena (Arena* arena, String8List* list, String8 string);
|
||||
String8Node* str8_list_push_front__arena (Arena* arena, String8List* list, String8 string);
|
||||
String8Node* str8_list_pushf__arena (Arena* arena, String8List* list, char* fmt, ...);
|
||||
String8Node* str8_list_push_frontf__arena(Arena* arena, String8List* list, char* fmt, ...);
|
||||
|
||||
MD_API String8Node* str8_list_alloc_aligner(AllocatorInfo ainfo, String8List* list, U64 min, U64 align);
|
||||
MD_API String8List str8_list_alloc_copy (AllocatorInfo ainfo, String8List* list);
|
||||
MD_API String8Node* str8_list_aligner__ainfo(AllocatorInfo ainfo, String8List* list, U64 min, U64 align);
|
||||
MD_API String8List str8_list_copy__ainfo (AllocatorInfo ainfo, String8List* list);
|
||||
|
||||
String8Node* str8_list_alloc (AllocatorInfo ainfo, String8List* list, String8 string);
|
||||
String8Node* str8_list_alloc_front (AllocatorInfo ainfo, String8List* list, String8 string);
|
||||
String8Node* str8_list_allocf (AllocatorInfo ainfo, String8List* list, char* fmt, ...);
|
||||
String8Node* str8_list_alloc_frontf(AllocatorInfo ainfo, String8List* list, char* fmt, ...);
|
||||
String8Node* str8_list_push__ainfo (AllocatorInfo ainfo, String8List* list, String8 string);
|
||||
String8Node* str8_list_push_front__ainfo (AllocatorInfo ainfo, String8List* list, String8 string);
|
||||
String8Node* str8_list_pushf__ainfo (AllocatorInfo ainfo, String8List* list, char* fmt, ...);
|
||||
String8Node* str8_list_push_frontf__ainfo(AllocatorInfo ainfo, String8List* list, char* fmt, ...);
|
||||
|
||||
#define str8_list_aligner(allocator, list, min, align) _Generic(allocator, Arena*: str8_list_push_aligner, AllocatorInfo: str8_list_alloc_aligner, default: MD_generic_selection_fail) MD_RESOLVED_FUNCTION_CALL(allocator, list, min, align)
|
||||
#define str8_list_copy(allocator, list) _Generic(allocator, Arena*: str8_list_push_copy, AllocatorInfo: str8_list_alloc_copy, default: MD_generic_selection_fail) MD_RESOLVED_FUNCTION_CALL(allocator, list)
|
||||
#define str8_list(allocator, list, string) _Generic(allocator, Arena*: str8_list_push, AllocatorInfo: str8_list_alloc, default: MD_generic_selection_fail) MD_RESOLVED_FUNCTION_CALL(allocator, list, string)
|
||||
#define str8_list_front(allocator, list, string) _Generic(allocator, Arena*: str8_list_push_front, AllocatorInfo: str8_list_alloc_front, default: MD_generic_selection_fail) MD_RESOLVED_FUNCTION_CALL(allocator, list, string)
|
||||
#define str8_listf(allocaotr, list, fmt, ...) _Generic(allocator, Arena*: str8_list_pushf, AllocatorInfo: str8_list_allocf, default: MD_generic_selection_fail) MD_RESOLVED_FUNCTION_CALL(allocator, list, fmt, __VA_ARGS__)
|
||||
#define str8_list_frontf(allocaotr, list, fmt, ...) _Generic(allocator, Arena*: str8_list_push_frontf, AllocatorInfo: str8_list_alloc_frontf, default: MD_generic_selection_fail) MD_RESOLVED_FUNCTION_CALL(allocator, list, fmt, __VA_ARGS__)
|
||||
#define str8_list_aligner(allocator, list, min, align) _Generic(allocator, Arena*: str8_list_aligner__arena, AllocatorInfo: str8_list_aligner__ainfo, default: MD_generic_selection_fail) MD_RESOLVED_FUNCTION_CALL(allocator, list, min, align)
|
||||
#define str8_list_copy(allocator, list) _Generic(allocator, Arena*: str8_list_copy__arena, AllocatorInfo: str8_list_copy__ainfo, default: MD_generic_selection_fail) MD_RESOLVED_FUNCTION_CALL(allocator, list)
|
||||
#define str8_list_push(allocator, list, string) _Generic(allocator, Arena*: str8_list_push__arena, AllocatorInfo: str8_list_push__ainfo, default: MD_generic_selection_fail) MD_RESOLVED_FUNCTION_CALL(allocator, list, string)
|
||||
#define str8_list_push_front(allocator, list, string) _Generic(allocator, Arena*: str8_list_push_front__arena, AllocatorInfo: str8_list_push_front__ainfo, default: MD_generic_selection_fail) MD_RESOLVED_FUNCTION_CALL(allocator, list, string)
|
||||
#define str8_list_pushf(allocaotr, list, fmt, ...) _Generic(allocator, Arena*: str8_list_pushf__arena, AllocatorInfo: str8_list_pushf__ainfo, default: MD_generic_selection_fail) MD_RESOLVED_FUNCTION_CALL(allocator, list, fmt, __VA_ARGS__)
|
||||
#define str8_list_push_frontf(allocaotr, list, fmt, ...) _Generic(allocator, Arena*: str8_list_push_frontf__arena, AllocatorInfo: str8_list_push_frontf__ainfo, default: MD_generic_selection_fail) MD_RESOLVED_FUNCTION_CALL(allocator, list, fmt, __VA_ARGS__)
|
||||
|
||||
force_inline String8Node* str8_list_push_aligner(Arena* arena, String8List* list, U64 min, U64 align) { return str8_list_alloc_aligner(arena_allocator(arena), list, min, align); }
|
||||
force_inline String8List str8_list_push_copy (Arena *arena, String8List* list) { return str8_list_alloc_copy (arena_allocator(arena), list); }
|
||||
force_inline String8Node* str8_list_push (Arena* arena, String8List* list, String8 string) { return str8_list_alloc (arena_allocator(arena), list, string); }
|
||||
force_inline String8Node* str8_list_push_front (Arena* arena, String8List* list, String8 string) { return str8_list_alloc_front (arena_allocator(arena), list, string); }
|
||||
force_inline String8Node* str8_list_ligner__arena (Arena* arena, String8List* list, U64 min, U64 align) { return str8_list_aligner__ainfo (arena_allocator(arena), list, min, align); }
|
||||
force_inline String8List str8_list_copy__arena (Arena* arena, String8List* list) { return str8_list_copy__ainfo (arena_allocator(arena), list); }
|
||||
force_inline String8Node* str8_list_push__arena (Arena* arena, String8List* list, String8 string) { return str8_list_push__ainfo (arena_allocator(arena), list, string); }
|
||||
force_inline String8Node* str8_list_push_front__arena(Arena* arena, String8List* list, String8 string) { return str8_list_push_front__ainfo(arena_allocator(arena), list, string); }
|
||||
|
||||
inline String8Node*
|
||||
str8_list_pushf(Arena *arena, String8List *list, char *fmt, ...) {
|
||||
str8_list_pushf__arena(Arena *arena, String8List *list, char *fmt, ...) {
|
||||
va_list args;
|
||||
va_start(args, fmt);
|
||||
String8 string = push_str8fv(arena, fmt, args);
|
||||
String8 string = str8fv(arena, fmt, args);
|
||||
String8Node* result = str8_list_push(arena, list, string);
|
||||
va_end(args);
|
||||
return(result);
|
||||
}
|
||||
|
||||
inline String8Node*
|
||||
str8_list_push_frontf(Arena *arena, String8List *list, char *fmt, ...) {
|
||||
str8_list_push_frontf__arena(Arena *arena, String8List *list, char *fmt, ...) {
|
||||
va_list args;
|
||||
va_start(args, fmt);
|
||||
String8 string = str8fv(arena, fmt, args);
|
||||
@@ -693,21 +693,21 @@ str8_list_push_frontf(Arena *arena, String8List *list, char *fmt, ...) {
|
||||
}
|
||||
|
||||
inline String8Node*
|
||||
str8_list_alloc(AllocatorInfo ainfo, String8List* list, String8 string) {
|
||||
str8_list_push__ainfo(AllocatorInfo ainfo, String8List* list, String8 string) {
|
||||
String8Node* node = alloc_array_no_zero(ainfo, String8Node, 1);
|
||||
str8_list_push_node_front_set_string(list, node, string);
|
||||
return(node);
|
||||
}
|
||||
|
||||
inline String8Node*
|
||||
str8_list_alloc_front(AllocatorInfo ainfo, String8List* list, String8 string) {
|
||||
str8_list_push_front__ainfo(AllocatorInfo ainfo, String8List* list, String8 string) {
|
||||
String8Node *node = alloc_array_no_zero(ainfo, String8Node, 1);
|
||||
str8_list_push_node_front_set_string(list, node, string);
|
||||
return(node);
|
||||
}
|
||||
|
||||
inline String8Node*
|
||||
str8_list_allocf(AllocatorInfo ainfo, String8List* list, char* fmt, ...) {
|
||||
str8_list_pushf__ainfo(AllocatorInfo ainfo, String8List* list, char* fmt, ...) {
|
||||
va_list args;
|
||||
va_start(args, fmt);
|
||||
String8 string = str8fv(ainfo, fmt, args);
|
||||
@@ -717,10 +717,10 @@ str8_list_allocf(AllocatorInfo ainfo, String8List* list, char* fmt, ...) {
|
||||
}
|
||||
|
||||
inline String8Node*
|
||||
str8_list_alloc_frontf(AllocatorInfo ainfo, String8List* list, char* fmt, ...) {
|
||||
str8_list_push_frontf__ainfo(AllocatorInfo ainfo, String8List* list, char* fmt, ...) {
|
||||
va_list args;
|
||||
va_start(args, fmt);
|
||||
String8 string = alloc_str8fv(ainfo, fmt, args);
|
||||
String8 string = str8fv(ainfo, fmt, args);
|
||||
String8Node* result = str8_list_alloc_front(ainfo, list, string);
|
||||
va_end(args);
|
||||
return(result);
|
||||
@@ -729,47 +729,52 @@ str8_list_alloc_frontf(AllocatorInfo ainfo, String8List* list, char* fmt, ...) {
|
||||
////////////////////////////////
|
||||
//~ rjf: String Splitting & Joining
|
||||
|
||||
MD_API String8List str8_split (Arena* arena, String8 string, U8* split_chars, U64 split_char_count, StringSplitFlags flags);
|
||||
MD_API String8List str8_split_alloc(AllocatorInfo ainfo, String8 string, U8* split_chars, U64 split_char_count, StringSplitFlags flags);
|
||||
MD_API String8List str8_split__arena(Arena* arena, String8 string, U8* split_chars, U64 split_char_count, StringSplitFlags flags);
|
||||
MD_API String8List str8_split__ainfo(AllocatorInfo ainfo, String8 string, U8* split_chars, U64 split_char_count, StringSplitFlags flags);
|
||||
|
||||
String8List str8_split_by_string_chars (Arena* arena, String8 string, String8 split_chars, StringSplitFlags flags);
|
||||
String8List str8_split_by_string_chars_alloc (AllocatorInfo ainfo, String8 string, String8 split_chars, StringSplitFlags flags);
|
||||
String8List str8_list_split_by_string_chars (Arena* arena, String8List list, String8 split_chars, StringSplitFlags flags);
|
||||
String8List str8_list_split_by_string_chars_alloc(AllocatorInfo ainfo, String8List list, String8 split_chars, StringSplitFlags flags);
|
||||
String8List str8_split_by_string_chars__arena (Arena* arena, String8 string, String8 split_chars, StringSplitFlags flags);
|
||||
String8List str8_split_by_string_chars__ainfo (AllocatorInfo ainfo, String8 string, String8 split_chars, StringSplitFlags flags);
|
||||
String8List str8_list_split_by_string_chars__arena(Arena* arena, String8List list, String8 split_chars, StringSplitFlags flags);
|
||||
String8List str8_list_split_by_string_chars__ainfo(AllocatorInfo ainfo, String8List list, String8 split_chars, StringSplitFlags flags);
|
||||
|
||||
MD_API String8 str8_list_join (Arena* arena, String8List* list, StringJoin* optional_params);
|
||||
MD_API String8 str8_list_join_alloc (AllocatorInfo ainfo, String8List* list, StringJoin* optional_params);
|
||||
void str8_list_from_flags (Arena* arena, String8List* list, U32 flags, String8* flag_string_table, U32 flag_string_count);
|
||||
void str8_list_from_flags_alloc(AllocatorInfo ainfo, String8List* list, U32 flags, String8* flag_string_table, U32 flag_string_count);
|
||||
MD_API String8 str8_list_join__arena (Arena* arena, String8List* list, StringJoin optional_params);
|
||||
MD_API String8 str8_list_join__ainfo (AllocatorInfo ainfo, String8List* list, StringJoin optional_params);
|
||||
void str8_list_from_flags__arena(Arena* arena, String8List* list, U32 flags, String8* flag_string_table, U32 flag_string_count);
|
||||
void str8_list_from_flags__ainfo(AllocatorInfo ainfo, String8List* list, U32 flags, String8* flag_string_table, U32 flag_string_count);
|
||||
|
||||
inline String8List str8_split_by_string_chars(Arena *arena, String8 string, String8 split_chars, StringSplitFlags flags) { return str8_split_by_string_chars_alloc(arena_allocator(arena), string, split_chars, flags); }
|
||||
#define str8_split(allocator, string, split_chars, split_char_count, flags) _Generic(allocator, Arena*: str8_split__arena, AllocatorInfo: str8_split__ainfo, default: MD_generic_selection_fail) MD_RESOLVED_FUNCTION_CALL(allocator, string, split_chars, split_char_count, flags)
|
||||
#define str8_split_by_string_chars(allocator, string, split_chars, flags) _Generic(allocator, Arena*: str8_split_by_string_chars__arena, AllocatorInfo: str8_split_by_string_chars__ainfo, default: MD_generic_selection_fail) MD_RESOLVED_FUNCTION_CALL(allocator, string, split_chars, flags)
|
||||
#define str8_list_split_by_string_chars(allocator, list, split_chars, flags) _Generic(allocator, Arena*: str8_list_split_by_string_chars__arena, AllocatorInfo: str8_list_split_by_string_chars__ainfo, default: MD_generic_selection_fail) MD_RESOLVED_FUNCTION_CALL(allocator, list, split_chars, flags)
|
||||
#define str8_list_join(allocator, list, ...) _Generic(allocator, Arena*: str8_list_join__arena, AllocatorInfo: str8_list_join__ainfo, default: MD_generic_selection_fail) MD_RESOLVED_FUNCTION_CALL(allocator, list, (StringJoin){ __VA_ARGS__ })
|
||||
|
||||
force_inline String8List str8_split__arena (Arena* arena, String8 string, U8* split_chars, U64 split_char_count, StringSplitFlags flags) { return str8_split__ainfo (arena_allocator(arena), string, split_chars, split_char_count, flags); }
|
||||
force_inline String8List str8_split_by_string_chars__arena (Arena* arena, String8 string, String8 split_chars, StringSplitFlags flags) { return str8_split_by_string_chars__ainfo (arena_allocator(arena), string, split_chars, flags); }
|
||||
force_inline String8List str8_list_split_by_string_chars__arena(Arena* arena, String8List list, String8 split_chars, StringSplitFlags flags) { return str8_list_split_by_string_chars__ainfo (arena_allocator(arena), list, split_chars, flags); }
|
||||
force_inline void str8_list_from_flags__arena (Arena* arena, String8List* list, U32 flags, String8* flag_string_table, U32 flag_string_count) { str8_list_from_flags__ainfo (arena_allocator(arena), list, flags, flag_string_table, flag_string_count); }
|
||||
force_inline String8 str8_list_join__arena (Arena* arena, String8List* list, StringJoin optional_params) { return str8_list_join__ainfo (arena_allocator(arena), list, optional_params); }
|
||||
|
||||
inline String8List
|
||||
str8_split_by_string_chars_alloc(AllocatorInfo ainfo, String8 string, String8 split_chars, StringSplitFlags flags) {
|
||||
String8List list = str8_split_alloc(ainfo, string, split_chars.str, split_chars.size, flags);
|
||||
str8_split_by_string_chars__ainfo(AllocatorInfo ainfo, String8 string, String8 split_chars, StringSplitFlags flags) {
|
||||
String8List list = str8_split(ainfo, string, split_chars.str, split_chars.size, flags);
|
||||
return list;
|
||||
}
|
||||
|
||||
inline String8List str8_list_split_by_string_chars(Arena* arena, String8List list, String8 split_chars, StringSplitFlags flags) { return str8_list_split_by_string_chars_alloc(arena_allocator(arena), list, split_chars, flags); }
|
||||
|
||||
inline String8List
|
||||
str8_list_split_by_string_chars_alloc(AllocatorInfo ainfo, String8List list, String8 split_chars, StringSplitFlags flags) {
|
||||
str8_list_split_by_string_chars__ainfo(AllocatorInfo ainfo, String8List list, String8 split_chars, StringSplitFlags flags) {
|
||||
String8List result = {0};
|
||||
for (String8Node *node = list.first; node != 0; node = node->next){
|
||||
String8List split = str8_split_by_string_chars_alloc(ainfo, node->string, split_chars, flags);
|
||||
String8List split = str8_split_by_string_chars(ainfo, node->string, split_chars, flags);
|
||||
str8_list_concat_in_place(&result, &split);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
void str8_list_from_flags(Arena* arena, String8List* list, U32 flags, String8* flag_string_table, U32 flag_string_count) { str8_list_from_flags_alloc(arena_allocator(arena), list, flags, flag_string_table, flag_string_count); }
|
||||
|
||||
void
|
||||
str8_list_from_flags_alloc(AllocatorInfo ainfo, String8List* list, U32 flags, String8* flag_string_table, U32 flag_string_count) {
|
||||
str8_list_from_flags__ainfo(AllocatorInfo ainfo, String8List* list, U32 flags, String8* flag_string_table, U32 flag_string_count) {
|
||||
for (U32 i = 0; i < flag_string_count; i += 1) {
|
||||
U32 flag = (1 << i);
|
||||
if (flags & flag) {
|
||||
str8_list_alloc(ainfo, list, flag_string_table[i]);
|
||||
str8_list_push(ainfo, list, flag_string_table[i]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user