2025-01-22 16:18:30 +01:00

50 lines
1.2 KiB
Haxe

package haxe;
import php.*;
import haxe.iterators.RestIterator;
import haxe.iterators.RestKeyValueIterator;
private typedef NativeRest<T> = NativeIndexedArray<T>;
@:coreApi
@:semantics(value)
abstract Rest<T>(NativeRest<T>) {
public var length(get,never):Int;
inline function get_length():Int
return Global.count(this);
@:from
static public inline function of<T>(array:Array<T>):Rest<T>
return new Rest(@:privateAccess array.arr);
inline function new(a:NativeIndexedArray<T>):Void
this = a;
@:arrayAccess inline function get(index:Int):T
return this[index];
@:to public inline function toArray():Array<T>
return @:privateAccess Array.wrap(this);
public inline function iterator():RestIterator<T>
return new RestIterator<T>(this);
public inline function keyValueIterator():RestKeyValueIterator<T>
return new RestKeyValueIterator<T>(this);
public inline function append(item:T):Rest<T> {
var result = this;
result.push(item);
return new Rest(result);
}
public inline function prepend(item:T):Rest<T> {
var result = this;
Global.array_unshift(result, item);
return new Rest(result);
}
public function toString():String {
return inline Boot.stringifyNativeIndexedArray(this);
}
}