Browse Source

enable inline array key value iterator (close #10575) (#10586)

* enable inline array key value iterator (close #10575)

* don't use array specific versions for hl (inline)
Nicolas Cannasse 3 years ago
parent
commit
5c5714743f

+ 3 - 6
std/haxe/iterators/ArrayKeyValueIterator.hx

@@ -27,18 +27,15 @@ class ArrayKeyValueIterator<T> {
 	var current:Int = 0;
 	var current:Int = 0;
 	var array:Array<T>;
 	var array:Array<T>;
 
 
-	#if !hl inline #end
-	public function new(array:Array<T>) {
+	public inline function new(array:Array<T>) {
 		this.array = array;
 		this.array = array;
 	}
 	}
 
 
-	#if !hl inline #end
-	public function hasNext():Bool {
+	public inline function hasNext():Bool {
 		return current < array.length;
 		return current < array.length;
 	}
 	}
 
 
-	#if !hl inline #end
-	public function next():{key:Int,value:T} {
+	public inline function next():{key:Int,value:T} {
 		return {value:array[current], key:current++};
 		return {value:array[current], key:current++};
 	}
 	}
 }
 }

+ 1 - 21
std/hl/types/ArrayBytes.hx

@@ -44,26 +44,6 @@ class BytesIterator<T> extends ArrayIterator<T> {
 	}
 	}
 }
 }
 
 
-@:keep
-@:generic
-class BytesKeyValueIterator<T> extends ArrayKeyValueIterator<T> {
-	var a : ArrayBytes<T>;
-
-	public function new(a) {
-		super((null:Dynamic));
-		this.a = a;
-	}
-
-	override public function hasNext():Bool {
-		return current < a.length;
-	}
-
-	override public function next():{key:Int, value:T} {
-		var v = @:privateAccess a.bytes.get(current);
-		return {key:current++, value:v};
-	}
-}
-
 @:keep
 @:keep
 @:generic class ArrayBytes<T> extends ArrayBase {
 @:generic class ArrayBytes<T> extends ArrayBase {
 	var bytes:hl.BytesAccess<T>;
 	var bytes:hl.BytesAccess<T>;
@@ -285,7 +265,7 @@ class BytesKeyValueIterator<T> extends ArrayKeyValueIterator<T> {
 	}
 	}
 
 
 	public function keyValueIterator() : ArrayKeyValueIterator<T> {
 	public function keyValueIterator() : ArrayKeyValueIterator<T> {
-		return new BytesKeyValueIterator<T>(this);
+		return new ArrayKeyValueIterator<T>(cast this);
 	}
 	}
 
 
 	public function map<S>(f:T->S):ArrayDyn@:privateAccess {
 	public function map<S>(f:T->S):ArrayDyn@:privateAccess {

+ 1 - 19
std/hl/types/ArrayDyn.hx

@@ -43,24 +43,6 @@ class ArrayDynIterator extends ArrayIterator<Dynamic> {
 	}
 	}
 }
 }
 
 
-class ArrayDynKeyValueIterator extends ArrayKeyValueIterator<Dynamic> {
-	var a : ArrayBase;
-
-	public function new(a) {
-		super((null:Dynamic));
-		this.a = a;
-	}
-
-	override public function hasNext() {
-		return current < a.length;
-	}
-
-	override public function next() {
-		var v = a.getDyn(current);
-		return {key:current++, value:v};
-	}
-}
-
 @:keep
 @:keep
 class ArrayDyn extends ArrayAccess {
 class ArrayDyn extends ArrayAccess {
 	public var length(get, never):Int;
 	public var length(get, never):Int;
@@ -195,7 +177,7 @@ class ArrayDyn extends ArrayAccess {
 	}
 	}
 
 
 	public function keyValueIterator() : ArrayKeyValueIterator<Dynamic> {
 	public function keyValueIterator() : ArrayKeyValueIterator<Dynamic> {
-		return new ArrayDynKeyValueIterator(array);
+		return new ArrayKeyValueIterator(cast array);
 	}
 	}
 
 
 	public function map(f:Dynamic->Dynamic):ArrayDyn {
 	public function map(f:Dynamic->Dynamic):ArrayDyn {

+ 1 - 19
std/hl/types/ArrayObj.hx

@@ -42,24 +42,6 @@ class ArrayObjIterator<T> extends ArrayIterator<T> {
 	}
 	}
 }
 }
 
 
-class ArrayObjKeyValueIterator<T> extends ArrayKeyValueIterator<T> {
-	var arr:ArrayObj<T>;
-
-	public inline function new(arr:ArrayObj<T>) {
-		super((null:Dynamic));
-		this.arr = arr;
-	}
-
-	override public function hasNext():Bool {
-		return current < arr.length;
-	}
-
-	override public function next():{key:Int, value:T} {
-		var v = @:privateAccess arr.array[current];
-		return {key:current++, value:v};
-	}
-}
-
 @:keep
 @:keep
 class ArrayObj<T> extends ArrayBase {
 class ArrayObj<T> extends ArrayBase {
 	var array:hl.NativeArray<Dynamic>;
 	var array:hl.NativeArray<Dynamic>;
@@ -291,7 +273,7 @@ class ArrayObj<T> extends ArrayBase {
 	}
 	}
 
 
 	public function keyValueIterator():ArrayKeyValueIterator<T> {
 	public function keyValueIterator():ArrayKeyValueIterator<T> {
-		return new ArrayObjKeyValueIterator<T>(this);
+		return new ArrayKeyValueIterator<T>(cast this);
 	}
 	}
 
 
 	public function map<S>(f:T->S):ArrayDyn {
 	public function map<S>(f:T->S):ArrayDyn {