Browse Source

[php] made Array.filter() inlined

Alexander Kuzmenko 8 years ago
parent
commit
ed0ae1ae25
2 changed files with 14 additions and 5 deletions
  1. 3 0
      std/php/NativeIndexedArray.hx
  2. 11 5
      std/php/_std/Array.hx

+ 3 - 0
std/php/NativeIndexedArray.hx

@@ -34,6 +34,9 @@ abstract NativeIndexedArray<T>(NativeArray) from NativeArray to NativeArray {
 	inline function set(idx:Int, val:T):T
 		return this[idx] = val;
 
+	public inline function push(val:T)
+		Syntax.code('{0}[] = {1}', this, val);
+
 	@:to
 	inline function toHaxeArray():Array<T>
 		return @:privateAccess Array.wrap(this);

+ 11 - 5
std/php/_std/Array.hx

@@ -42,8 +42,14 @@ class Array<T> implements ArrayAccess<Int,T> {
 		return wrap(arr);
 	}
 
-	public function filter(f:T->Bool):Array<T> {
-		return wrap(Global.array_values(Global.array_filter(arr, f)));
+	public inline function filter(f:T->Bool):Array<T> {
+		var result = Syntax.arrayDecl();
+		Syntax.foreach(arr, function(_, value:T) {
+			if(f(value)) {
+				result.push(value);
+			}
+		});
+		return wrap(result);
 	}
 
 	public function indexOf(x:T, ?fromIndex:Int):Int {
@@ -96,9 +102,9 @@ class Array<T> implements ArrayAccess<Int,T> {
 
 	public inline function map<S>(f:T->S):Array<S> {
 		var result = Syntax.arrayDecl();
-		for(i in 0...length) {
-			result[i] = f(arr[i]);
-		}
+		Syntax.foreach(arr, function(_, value:T) {
+			result.push(f(value));
+		});
 		return wrap(result);
 	}