Просмотр исходного кода

Optimize StringBuilder append for static strings, and as_string().

Lukas Tenbrink 8 месяцев назад
Родитель
Сommit
8df2dbe2f6
2 измененных файлов с 10 добавлено и 8 удалено
  1. 6 4
      core/string/string_builder.cpp
  2. 4 4
      core/string/string_builder.h

+ 6 - 4
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++;
 		}

+ 4 - 4
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<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);