Browse Source

[hl] improved String.lastIndexOf performance when looking into large strings (see #7746)

Nicolas Cannasse 6 years ago
parent
commit
15f7d89479
1 changed files with 6 additions and 7 deletions
  1. 6 7
      std/hl/_std/String.hx

+ 6 - 7
std/hl/_std/String.hx

@@ -80,19 +80,18 @@ class String {
 	}
 
 	public function lastIndexOf( str : String, ?startIndex : Int ) : Int {
-		var last = 0;
 		var max = this.length;
 		if( startIndex != null ) {
 			max = startIndex + str.length;
 			if( max < 0 ) max = 0;
 			if( max > this.length ) max = this.length;
 		}
-		max <<= 1;
-		while( true ) {
-			var p = findChar(last, max, str.bytes, str.length << 1);
-			if( p < 0 )
-				return (last >> 1) - 1;
-			last = p + 2;
+		var pos = max - str.length;
+		var slen = str.length << 1;
+		while( pos >= 0 ) {
+			if( bytes.compare(pos << 1, str.bytes, 0, slen) == 0 )
+				return pos;
+			pos--;
 		}
 		return -1;
 	}