From 8df2dbe2f6e95852c858d6831fa8e8ef04455f4a Mon Sep 17 00:00:00 2001 From: Lukas Tenbrink Date: Thu, 28 Nov 2024 01:20:58 +0100 Subject: [PATCH] Optimize StringBuilder append for static strings, and as_string(). --- core/string/string_builder.cpp | 10 ++++++---- core/string/string_builder.h | 8 ++++---- 2 files changed, 10 insertions(+), 8 deletions(-) diff --git a/core/string/string_builder.cpp b/core/string/string_builder.cpp index 4f74a2e42dc..7f0a6abc04f 100644 --- a/core/string/string_builder.cpp +++ b/core/string/string_builder.cpp @@ -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++; } diff --git a/core/string/string_builder.h b/core/string/string_builder.h index 1a989e8422c..3ba279b4fdd 100644 --- a/core/string/string_builder.h +++ b/core/string/string_builder.h @@ -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 strings; - Vector c_strings; + LocalVector strings; + LocalVector c_strings; // -1 means it's a Godot String // a natural number means C string. - Vector appended_strings; + LocalVector appended_strings; public: StringBuilder &append(const String &p_string);