From e900ca1f76ff4a7b7e70da4868a5100a8b7bef6d Mon Sep 17 00:00:00 2001 From: kleonc <9283098+kleonc@users.noreply.github.com> Date: Fri, 5 Feb 2021 20:12:25 +0100 Subject: [PATCH] Make String::ends_with don't use String::rfind (cherry picked from commit ad0943e3d32d00d131a2364483dfdda9ed38319b) --- core/ustring.cpp | 53 ++++++++++++++++++++++++++++-------------------- 1 file changed, 31 insertions(+), 22 deletions(-) diff --git a/core/ustring.cpp b/core/ustring.cpp index 5dc72219764..c3676e9c68c 100644 --- a/core/ustring.cpp +++ b/core/ustring.cpp @@ -2710,40 +2710,49 @@ int String::rfindn(const String &p_str, int p_from) const { } bool String::ends_with(const String &p_string) const { - int l = p_string.length(); + if (l > length()) { + return false; + } + if (l == 0) { return true; } - int pos = find_last(p_string); - if (pos == -1) - return false; - return pos + l == length(); + const CharType *p = &p_string[0]; + const CharType *s = &operator[](length() - l); + + for (int i = 0; i < l; i++) { + if (p[i] != s[i]) { + return false; + } + } + + return true; } bool String::begins_with(const String &p_string) const { - - if (p_string.length() > length()) - return false; - int l = p_string.length(); - if (l == 0) - return true; - - const CharType *src = &p_string[0]; - const CharType *str = &operator[](0); - - int i = 0; - for (; i < l; i++) { - - if (src[i] != str[i]) - return false; + if (l > length()) { + return false; } - // only if i == l the p_string matches the beginning - return i == l; + if (l == 0) { + return true; + } + + const CharType *p = &p_string[0]; + const CharType *s = &operator[](0); + + for (int i = 0; i < l; i++) { + if (p[i] != s[i]) { + return false; + } + } + + return true; } + bool String::begins_with(const char *p_string) const { int l = length();