25 lines
879 B
C++
25 lines
879 B
C++
String Merge(Allocator allocator, Array<String> list, String separator = " ") {
|
|
int64_t char_count = 0;
|
|
For(list) char_count += it.len;
|
|
if (char_count == 0) return {};
|
|
int64_t node_count = list.len;
|
|
|
|
int64_t base_size = (char_count + 1);
|
|
int64_t sep_size = (node_count - 1) * separator.len;
|
|
int64_t size = base_size + sep_size;
|
|
char *buff = (char *)AllocSize(allocator, sizeof(char) * (size + 1));
|
|
String string = {buff, 0};
|
|
For(list) {
|
|
Assert(string.len + it.len <= size);
|
|
memcpy(string.data + string.len, it.data, it.len);
|
|
string.len += it.len;
|
|
if (!list.is_last(it)) {
|
|
memcpy(string.data + string.len, separator.data, separator.len);
|
|
string.len += separator.len;
|
|
}
|
|
}
|
|
Assert(string.len == size - 1);
|
|
string.data[size] = 0;
|
|
return string;
|
|
}
|