VirtualArray.hx 3.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. package cpp;
  2. @:native("cpp::VirtualArray")
  3. @:coreType extern class NativeVirtualArray implements ArrayAccess<Dynamic>
  4. {
  5. public function new() : Void;
  6. public var length(get,null) : Int;
  7. // concat<T>( a:Array<T> ) : Array<T> ?
  8. public function concat( a : VirtualArray ) : VirtualArray;
  9. public function join( sep : String ) : String;
  10. public function pop() : Dynamic;
  11. public function push(x : Dynamic) : Int;
  12. public function reverse() : Void;
  13. public function shift() : Dynamic;
  14. public function slice( pos : Int, ?end : Int ) : VirtualArray;
  15. public function sort( f : Dynamic -> Dynamic -> Int ) : Void;
  16. public function splice( pos : Int, len : Int ) : VirtualArray;
  17. public function toString() : String;
  18. public function unshift( x : Dynamic ) : Void;
  19. public function insert( pos : Int, x : Dynamic ) : Void;
  20. public function remove( x : Dynamic ) : Bool;
  21. public function indexOf( x : Dynamic, ?fromIndex:Int ) : Int;
  22. public function lastIndexOf( x : Dynamic, ?fromIndex:Int ) : Int;
  23. public function copy() : VirtualArray;
  24. public function iterator() : Iterator<Dynamic>;
  25. public function map<S>( f : Dynamic -> S ) : VirtualArray;
  26. public function filter( f : Dynamic -> Bool ) : VirtualArray;
  27. }
  28. abstract VirtualArray(NativeVirtualArray)
  29. {
  30. // Add these two functions...
  31. @:from @:extern inline static public function fromArray<T>(a:Array<T>) : VirtualArray
  32. return untyped a;
  33. @:to @:extern inline public function toArray<T>() : Array<T>
  34. return untyped this;
  35. // The rest is just boiler-plate
  36. inline public function new() this=new NativeVirtualArray();
  37. @:extern @:arrayAccess inline function get(idx:Int) : Dynamic
  38. return untyped this[idx];
  39. @:extern @:arrayAccess inline function set<T>(pos:Int, value:T ) : T
  40. return untyped this[idx] = value;
  41. public var length(get,never) : Int;
  42. @:extern inline public function get_length() : Int return this.length;
  43. // concat<T>( a:Array<T> ) : Array<T> ?
  44. @:extern inline public function concat( a : VirtualArray ) : VirtualArray return this.concat(a);
  45. @:extern inline public function join( sep : String ) : String return this.join(sep);
  46. @:extern inline public function pop() : Dynamic return this.pop();
  47. @:extern inline public function push(x : Dynamic) : Int return this.push(x);
  48. @:extern inline public function reverse() : Void this.reverse();
  49. @:extern inline public function shift() : Dynamic return this.shift();
  50. @:extern inline public function slice( pos : Int, ?end : Int ) : VirtualArray return this.slice(pos,end);
  51. @:extern inline public function sort( f : Dynamic -> Dynamic -> Int ) : Void this.sort(f);
  52. @:extern inline public function splice( pos : Int, len : Int ) : VirtualArray return this.slice(pos,len);
  53. @:extern inline public function unshift( x : Dynamic ) : Void this.unshift(x);
  54. @:extern inline public function insert( pos : Int, x : Dynamic ) : Void this.insert(pos,x);
  55. @:extern inline public function remove( x : Dynamic ) : Bool return this.remove(x);
  56. @:extern inline public function indexOf( x : Dynamic, ?fromIndex:Int ) : Int return this.indexOf(x,fromIndex);
  57. @:extern inline public function lastIndexOf( x : Dynamic, ?fromIndex:Int ) : Int return this.lastIndexOf(x,fromIndex);
  58. @:extern inline public function copy() : VirtualArray return this.copy();
  59. @:extern inline public function iterator() : Iterator<Dynamic> return this.iterator();
  60. @:extern inline public function map<S>( f : Dynamic -> S ) : VirtualArray return this.map(f);
  61. @:extern inline public function filter( f : Dynamic -> Bool ) : VirtualArray return this.filter(f);
  62. }