Browse Source

slightly optimized lastIndexOf (don't search past startIndex)

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

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

@@ -77,13 +77,16 @@ class String {
 
 	public function lastIndexOf( str : String, ?startIndex : Int ) : Int {
 		var last = 0;
-		var start = this.length;
-		if( startIndex != null )
-			start = startIndex;
-		start <<= 1;
+		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, length << 1, str.bytes, str.length << 1);
-			if( p < 0 || p > start )
+			var p = findChar(last, max, str.bytes, str.length << 1);
+			if( p < 0 )
 				return (last >> 1) - 1;
 			last = p + 2;
 		}