Make String::ends_with don't use String::rfind

(cherry picked from commit ad0943e3d3)
This commit is contained in:
kleonc 2021-02-05 20:12:25 +01:00 committed by Rémi Verschelde
parent fb0d0ad018
commit e900ca1f76
No known key found for this signature in database
GPG Key ID: C3336907360768E1

View File

@ -2710,40 +2710,49 @@ int String::rfindn(const String &p_str, int p_from) const {
} }
bool String::ends_with(const String &p_string) const { bool String::ends_with(const String &p_string) const {
int l = p_string.length(); int l = p_string.length();
if (l > length()) {
return false;
}
if (l == 0) { if (l == 0) {
return true; return true;
} }
int pos = find_last(p_string); const CharType *p = &p_string[0];
if (pos == -1) const CharType *s = &operator[](length() - l);
for (int i = 0; i < l; i++) {
if (p[i] != s[i]) {
return false; return false;
return pos + l == length(); }
}
return true;
} }
bool String::begins_with(const String &p_string) const { bool String::begins_with(const String &p_string) const {
if (p_string.length() > length())
return false;
int l = p_string.length(); int l = p_string.length();
if (l == 0) if (l > length()) {
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; return false;
} }
// only if i == l the p_string matches the beginning if (l == 0) {
return i == l; 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 { bool String::begins_with(const char *p_string) const {
int l = length(); int l = length();