mirror of
https://github.com/Ed94/raddebugger.git
synced 2026-10-14 21:09:41 -07:00
string list sub range helper
This commit is contained in:
1 parent
d7cfd5f55a
commit
acce76aa4c
5 files changed
+126
-15
No files matched your search
@@ -1143,6 +1143,42 @@ str8_list_copy(Arena *arena, String8List *list)
|
||||
return result;
|
||||
}
|
||||
|
||||
internal String8List
|
||||
str8_list_substr(Arena *arena, String8List list, Rng1U64 range)
|
||||
{
|
||||
String8List result = {0};
|
||||
|
||||
String8Node *n = list.first;
|
||||
|
||||
U64 front_min = 0;
|
||||
{
|
||||
U64 cursor = 0;
|
||||
for (; n != 0; cursor += n->string.size, n = n->next) {
|
||||
if (cursor + n->string.size > range.min) {
|
||||
front_min = range.min - cursor;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (front_min > 0) {
|
||||
U64 front_max = front_min + Min(dim_1u64(range), n->string.size);
|
||||
str8_list_push(arena, &result, str8_substr(n->string, r1u64(front_max, front_max)));
|
||||
n = n->next;
|
||||
}
|
||||
|
||||
for (; n != 0; n = n->next) {
|
||||
if (result.total_size >= dim_1u64(range)) {
|
||||
break;
|
||||
}
|
||||
U64 copy_max = dim_1u64(range) - result.total_size;
|
||||
U64 copy_size = Min(copy_max, n->string.size);
|
||||
str8_list_push(arena, &result, str8_substr(n->string, r1u64(0, copy_size)));
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
////////////////////////////////
|
||||
//~ rjf: String Splitting & Joining
|
||||
|
||||
|
||||
@@ -269,6 +269,7 @@ internal String8Node* str8_list_pushf(Arena *arena, String8List *list, char *fmt
|
||||
internal String8Node* str8_list_push_frontf(Arena *arena, String8List *list, char *fmt, ...);
|
||||
internal String8Node* str8_list_pop_front(String8List *list);
|
||||
internal String8List str8_list_copy(Arena *arena, String8List *list);
|
||||
internal String8List str8_list_substr(Arena *arena, String8List list, Rng1U64 range);
|
||||
#define str8_list_first(list) ((list)->first ? (list)->first->string : str8_zero())
|
||||
|
||||
////////////////////////////////
|
||||
|
||||
Reference in new issue
Block a user