String Merge(Allocator allocator, Array 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; }