You've already forked godot
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:
@@ -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";
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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";
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user