2
0
Nicolas Cannasse 9 жил өмнө
parent
commit
531d09f8cc

+ 22 - 3
std/hl/_std/haxe/ds/Vector.hx

@@ -45,9 +45,28 @@ abstract Vector<T>(VectorData<T>) {
 		return this.length;
 	}
 
-	public static inline function blit<T>(src:Vector<T>, srcPos:Int, dest:Vector<T>, destPos:Int, len:Int):Void	{
-		for (i in 0...len)
-			dest[destPos + i] = src[srcPos + i];
+	public static function blit<T>(src:Vector<T>, srcPos:Int, dest:Vector<T>, destPos:Int, len:Int):Void {
+		if( src == dest ) {
+			if (srcPos < destPos) {
+				var i = srcPos + len;
+				var j = destPos + len;
+				for (k in 0...len) {
+					i--;
+					j--;
+					src[j] = src[i];
+				}
+			} else if (srcPos > destPos) {
+				var i = srcPos;
+				var j = destPos;
+				for (k in 0...len) {
+					src[j] = src[i];
+					i++;
+					j++;
+				}
+			}		
+		} else
+			for (i in 0...len)
+				dest[destPos + i] = src[srcPos + i];
 	}
 
 	public inline function toArray():Array<T> {