Prechádzať zdrojové kódy

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

kleonc 4 rokov pred
rodič
commit
ad0943e3d3
1 zmenil súbory, kde vykonal 20 pridanie a 13 odobranie
  1. 20 13
      core/string/ustring.cpp

+ 20 - 13
core/string/ustring.cpp

@@ -3072,39 +3072,46 @@ 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 = rfind(p_string);
-	if (pos == -1) {
-		return false;
+	const char32_t *p = &p_string[0];
+	const char32_t *s = &operator[](length() - l);
+
+	for (int i = 0; i < l; i++) {
+		if (p[i] != s[i]) {
+			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()) {
+	int l = p_string.length();
+	if (l > length()) {
 		return false;
 		return false;
 	}
 	}
 
 
-	int l = p_string.length();
 	if (l == 0) {
 	if (l == 0) {
 		return true;
 		return true;
 	}
 	}
 
 
-	const char32_t *src = &p_string[0];
-	const char32_t *str = &operator[](0);
+	const char32_t *p = &p_string[0];
+	const char32_t *s = &operator[](0);
 
 
-	int i = 0;
-	for (; i < l; i++) {
-		if (src[i] != str[i]) {
+	for (int i = 0; i < l; i++) {
+		if (p[i] != s[i]) {
 			return false;
 			return false;
 		}
 		}
 	}
 	}
 
 
-	// only if i == l the p_string matches the beginning
-	return i == l;
+	return true;
 }
 }
 
 
 bool String::begins_with(const char *p_string) const {
 bool String::begins_with(const char *p_string) const {