1
0
Fork 0

Merge pull request #99775 from Ivorforce/string-builder-template-append

Optimize StringBuilder by using `LocalVector` instead of `Vector`.
This commit is contained in:
Thaddeus Crews 2024-12-10 14:15:58 -06:00
commit 3ef8e835c2
No known key found for this signature in database
GPG Key ID: 62181B86FE9E5D84
2 changed files with 10 additions and 8 deletions

View File

@ -68,8 +68,10 @@ String StringBuilder::as_string() const {
int godot_string_elem = 0;
int c_string_elem = 0;
for (int i = 0; i < appended_strings.size(); i++) {
if (appended_strings[i] == -1) {
for (uint32_t i = 0; i < appended_strings.size(); i++) {
const int32_t str_len = appended_strings[i];
if (str_len == -1) {
// Godot string
const String &s = strings[godot_string_elem];
@ -81,11 +83,11 @@ String StringBuilder::as_string() const {
} else {
const char *s = c_strings[c_string_elem];
for (int32_t j = 0; j < appended_strings[i]; j++) {
for (int32_t j = 0; j < str_len; j++) {
buffer[current_position + j] = s[j];
}
current_position += appended_strings[i];
current_position += str_len;
c_string_elem++;
}

View File

@ -32,17 +32,17 @@
#define STRING_BUILDER_H
#include "core/string/ustring.h"
#include "core/templates/vector.h"
#include "core/templates/local_vector.h"
class StringBuilder {
uint32_t string_length = 0;
Vector<String> strings;
Vector<const char *> c_strings;
LocalVector<String> strings;
LocalVector<const char *> c_strings;
// -1 means it's a Godot String
// a natural number means C string.
Vector<int32_t> appended_strings;
LocalVector<int32_t> appended_strings;
public:
StringBuilder &append(const String &p_string);