55 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			Haxe
		
	
	
	
	
	
			
		
		
	
	
			55 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			Haxe
		
	
	
	
	
	
| package haxe;
 | |
| 
 | |
| import lua.Lua.select;
 | |
| import lua.Table;
 | |
| import lua.PairTools.copy;
 | |
| import lua.TableTools.maxn;
 | |
| import lua.TableTools.pack;
 | |
| import lua.TableTools.unpack;
 | |
| import haxe.iterators.RestIterator;
 | |
| import haxe.iterators.RestKeyValueIterator;
 | |
| 
 | |
| private typedef NativeRest<T> = Table<Int,T>;
 | |
| 
 | |
| @:coreApi
 | |
| abstract Rest<T>(NativeRest<T>) {
 | |
| 	public var length(get, never):Int;
 | |
| 	inline function get_length():Int
 | |
| 		return maxn(this);
 | |
| 
 | |
| 	@:from static public function of<T>(array:Array<T>):Rest<T> {
 | |
| 		return new Rest(Table.fromArray(array));
 | |
| 	}
 | |
| 
 | |
| 	inline function new(table:Table<Int,T>):Void
 | |
| 		this = table;
 | |
| 
 | |
| 	@:arrayAccess inline function get(index:Int):T
 | |
| 		return this[index + 1];
 | |
| 
 | |
| 	@:to public function toArray():Array<T> {
 | |
| 		return Table.toArray(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 = copy(this);
 | |
| 		Table.insert(result, item);
 | |
| 		return new Rest(result);
 | |
| 	}
 | |
| 
 | |
| 	public inline function prepend(item:T):Rest<T> {
 | |
| 		var result = copy(this);
 | |
| 		Table.insert(result, 1, item);
 | |
| 		return new Rest(result);
 | |
| 	}
 | |
| 
 | |
| 	public function toString():String {
 | |
| 		return toArray().toString();
 | |
| 	}
 | |
| } |