Przeglądaj źródła

[cpp] Convert VirtualArrays to Object arrays when unserializing if possible

Hugh 8 lat temu
rodzic
commit
e1e949d3db
2 zmienionych plików z 8 dodań i 0 usunięć
  1. 3 0
      std/cpp/NativeArray.hx
  2. 5 0
      std/haxe/Unserializer.hx

+ 3 - 0
std/cpp/NativeArray.hx

@@ -72,6 +72,9 @@ extern class NativeArray {
    @:nativeStaticExtension
 	public static function memcmp<T>( inArrayA:Array<T>, inArrayB:Array<T>) : Int { }
 
+   @:native("_hx_reslove_virtual_array")
+	public static function resolveVirtualArray( inArray:Array<Dynamic>) : Dynamic { }
+
 
    #if cppia
 	public static inline function unsafeGet<T>( inDestArray:Array<T>, inIndex:Int) : T {

+ 5 - 0
std/haxe/Unserializer.hx

@@ -262,6 +262,7 @@ class Unserializer {
  		case "a".code:
 			var buf = buf;
  			var a = new Array<Dynamic>();
+ 			#if cpp var cachePos = cache.length; #end
  			cache.push(a);
  			while( true ) {
  				var c = get(pos);
@@ -276,7 +277,11 @@ class Unserializer {
  				} else
  					a.push(unserialize());
  			}
+ 			#if cpp
+ 			return cache[cachePos] = cpp.NativeArray.resolveVirtualArray(a);
+ 			#else
  			return a;
+ 			#end
  		case "o".code:
 	 		var o = {};
 	 		cache.push(o);