123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136 |
- /*
- * Copyright (C)2005-2019 Haxe Foundation
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- * DEALINGS IN THE SOFTWARE.
- */
- package cpp;
- @:native("cpp::VirtualArray")
- @:coreType extern class NativeVirtualArray implements ArrayAccess<Dynamic> {
- function new():Void;
- var length(get, null):Int;
- // concat<T>( a:Array<T> ) : Array<T> ?
- function concat(a:VirtualArray):VirtualArray;
- function join(sep:String):String;
- function pop():Dynamic;
- function push(x:Dynamic):Int;
- function reverse():Void;
- function shift():Dynamic;
- function slice(pos:Int, ?end:Int):VirtualArray;
- function sort(f:Dynamic->Dynamic->Int):Void;
- function splice(pos:Int, len:Int):VirtualArray;
- function toString():String;
- function unshift(x:Dynamic):Void;
- function insert(pos:Int, x:Dynamic):Void;
- function remove(x:Dynamic):Bool;
- function indexOf(x:Dynamic, ?fromIndex:Int):Int;
- function lastIndexOf(x:Dynamic, ?fromIndex:Int):Int;
- function copy():VirtualArray;
- function iterator():Iterator<Dynamic>;
- function keyValueIterator():KeyValueIterator<Int, Dynamic>;
- function map<S>(f:Dynamic->S):VirtualArray;
- function filter(f:Dynamic->Bool):VirtualArray;
- function resize(len:Int):Void;
- }
- abstract VirtualArray(NativeVirtualArray) {
- // Add these two functions...
- @:from extern inline static public function fromArray<T>(a:Array<T>):VirtualArray
- return untyped a;
- @:to extern inline public function toArray<T>():Array<T>
- return untyped this;
- // The rest is just boiler-plate
- inline public function new()
- this = new NativeVirtualArray();
- @:arrayAccess extern inline function get(idx:Int):Dynamic
- return untyped this[idx];
- @:arrayAccess extern inline function set<T>(pos:Int, value:T):T
- return untyped this[idx] = value;
- public var length(get, never):Int;
- extern inline public function get_length():Int
- return this.length;
- // concat<T>( a:Array<T> ) : Array<T> ?
- extern inline public function concat(a:VirtualArray):VirtualArray
- return this.concat(a);
- extern inline public function join(sep:String):String
- return this.join(sep);
- extern inline public function pop():Dynamic
- return this.pop();
- extern inline public function push(x:Dynamic):Int
- return this.push(x);
- extern inline public function reverse():Void
- this.reverse();
- extern inline public function shift():Dynamic
- return this.shift();
- extern inline public function slice(pos:Int, ?end:Int):VirtualArray
- return this.slice(pos, end);
- extern inline public function sort(f:Dynamic->Dynamic->Int):Void
- this.sort(f);
- extern inline public function splice(pos:Int, len:Int):VirtualArray
- return this.slice(pos, len);
- extern inline public function unshift(x:Dynamic):Void
- this.unshift(x);
- extern inline public function insert(pos:Int, x:Dynamic):Void
- this.insert(pos, x);
- extern inline public function remove(x:Dynamic):Bool
- return this.remove(x);
- extern inline public function indexOf(x:Dynamic, ?fromIndex:Int):Int
- return this.indexOf(x, fromIndex);
- extern inline public function lastIndexOf(x:Dynamic, ?fromIndex:Int):Int
- return this.lastIndexOf(x, fromIndex);
- extern inline public function copy():VirtualArray
- return this.copy();
- extern inline public function iterator():Iterator<Dynamic>
- return this.iterator();
- extern inline public function keyValueIterator():KeyValueIterator<Int, Dynamic>
- return this.keyValueIterator();
- extern inline public function map<S>(f:Dynamic->S):VirtualArray
- return this.map(f);
- extern inline public function filter(f:Dynamic->Bool):VirtualArray
- return this.filter(f);
- extern inline public function resize(len:Int):Void
- return this.resize(len);
- }
|