1
0
mirror of https://github.com/godotengine/godot.git synced 2025-11-04 12:00:25 +00:00

Merge pull request #100314 from Ivorforce/use-string-chr

Optimize `String::chr` to avoid calling `strlen`. Use `String::chr` instead of `String(&chr, 1)` where appropriate.
This commit is contained in:
Thaddeus Crews
2025-03-13 08:57:20 -05:00
4 changed files with 8 additions and 11 deletions

View File

@@ -1603,11 +1603,6 @@ String String::to_lower() const {
return lower;
}
String String::chr(char32_t p_char) {
char32_t c[2] = { p_char, 0 };
return String(c);
}
String String::num(double p_num, int p_decimals) {
if (Math::is_nan(p_num)) {
return "nan";

View File

@@ -434,7 +434,11 @@ public:
static String num_real(float p_num, bool p_trailing = true);
static String num_int64(int64_t p_num, int base = 10, bool capitalize_hex = false);
static String num_uint64(uint64_t p_num, int base = 10, bool capitalize_hex = false);
static String chr(char32_t p_char);
static String chr(char32_t p_char) {
String string;
string.parse_utf32(p_char);
return string;
}
static String md5(const uint8_t *p_md5);
static String hex_encode_buffer(const uint8_t *p_buffer, int p_len);
Vector<uint8_t> hex_decode() const;

View File

@@ -768,8 +768,7 @@ struct VariantIndexedSetGet_String {
*oob = true;
return;
}
char32_t result = (*VariantGetInternalPtr<String>::get_ptr(base))[index];
*value = String(&result, 1);
*value = String::chr((*VariantGetInternalPtr<String>::get_ptr(base))[index]);
*oob = false;
}
static void ptr_get(const void *base, int64_t index, void *member) {
@@ -779,8 +778,7 @@ struct VariantIndexedSetGet_String {
index += v.length();
}
OOB_TEST(index, v.length());
char32_t c = v[index];
PtrToArg<String>::encode(String(&c, 1), member);
PtrToArg<String>::encode(String::chr(v[index]), member);
}
static void set(Variant *base, int64_t index, const Variant *value, bool *valid, bool *oob) {
if (value->get_type() != Variant::STRING) {

View File

@@ -1337,7 +1337,7 @@ void GDScriptTokenizerText::check_indent() {
}
String GDScriptTokenizerText::_get_indent_char_name(char32_t ch) {
ERR_FAIL_COND_V(ch != ' ' && ch != '\t', String(&ch, 1).c_escape());
ERR_FAIL_COND_V(ch != ' ' && ch != '\t', String::chr(ch).c_escape());
return ch == ' ' ? "space" : "tab";
}