mirror of
https://github.com/godotengine/godot.git
synced 2025-01-22 18:43:29 -05:00
Optimize StringBuilder append for static strings, and as_string().
This commit is contained in:
parent
f128f383e8
commit
8df2dbe2f6
2 changed files with 10 additions and 8 deletions
|
@ -68,8 +68,10 @@ String StringBuilder::as_string() const {
|
||||||
int godot_string_elem = 0;
|
int godot_string_elem = 0;
|
||||||
int c_string_elem = 0;
|
int c_string_elem = 0;
|
||||||
|
|
||||||
for (int i = 0; i < appended_strings.size(); i++) {
|
for (uint32_t i = 0; i < appended_strings.size(); i++) {
|
||||||
if (appended_strings[i] == -1) {
|
const int32_t str_len = appended_strings[i];
|
||||||
|
|
||||||
|
if (str_len == -1) {
|
||||||
// Godot string
|
// Godot string
|
||||||
const String &s = strings[godot_string_elem];
|
const String &s = strings[godot_string_elem];
|
||||||
|
|
||||||
|
@ -81,11 +83,11 @@ String StringBuilder::as_string() const {
|
||||||
} else {
|
} else {
|
||||||
const char *s = c_strings[c_string_elem];
|
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];
|
buffer[current_position + j] = s[j];
|
||||||
}
|
}
|
||||||
|
|
||||||
current_position += appended_strings[i];
|
current_position += str_len;
|
||||||
|
|
||||||
c_string_elem++;
|
c_string_elem++;
|
||||||
}
|
}
|
||||||
|
|
|
@ -32,17 +32,17 @@
|
||||||
#define STRING_BUILDER_H
|
#define STRING_BUILDER_H
|
||||||
|
|
||||||
#include "core/string/ustring.h"
|
#include "core/string/ustring.h"
|
||||||
#include "core/templates/vector.h"
|
#include "core/templates/local_vector.h"
|
||||||
|
|
||||||
class StringBuilder {
|
class StringBuilder {
|
||||||
uint32_t string_length = 0;
|
uint32_t string_length = 0;
|
||||||
|
|
||||||
Vector<String> strings;
|
LocalVector<String> strings;
|
||||||
Vector<const char *> c_strings;
|
LocalVector<const char *> c_strings;
|
||||||
|
|
||||||
// -1 means it's a Godot String
|
// -1 means it's a Godot String
|
||||||
// a natural number means C string.
|
// a natural number means C string.
|
||||||
Vector<int32_t> appended_strings;
|
LocalVector<int32_t> appended_strings;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
StringBuilder &append(const String &p_string);
|
StringBuilder &append(const String &p_string);
|
||||||
|
|
Loading…
Reference in a new issue