浏览代码

grow Array by +50% instead of doubling it on each resize

Nicolas Cannasse 12 年之前
父节点
当前提交
6ab6587536
共有 1 个文件被更改,包括 6 次插入6 次删除
  1. 6 6
      std/neko/_std/Array.hx

+ 6 - 6
std/neko/_std/Array.hx

@@ -73,7 +73,7 @@
 			if( pos < 0 ) pos = 0;
 			if( pos < 0 ) pos = 0;
 		}
 		}
 		if( pos > l ) pos = l;
 		if( pos > l ) pos = l;
-		this.__double(l+1);
+		this.__grow(l+1);
 		var a = this.__a;
 		var a = this.__a;
 		neko.NativeArray.blit(a,pos+1,a,pos,l-pos);
 		neko.NativeArray.blit(a,pos+1,a,pos,l-pos);
 		a[pos] = x;
 		a[pos] = x;
@@ -115,14 +115,14 @@
 
 
 	public function push(x:T) : Int {
 	public function push(x:T) : Int {
 		var l = this.length;
 		var l = this.length;
-		this.__double(l + 1);
+		this.__grow(l + 1);
 		this.__a[l] = x;
 		this.__a[l] = x;
 		return l + 1;
 		return l + 1;
 	}
 	}
 
 
 	public function unshift(x : T) : Void {
 	public function unshift(x : T) : Void {
 		var l = this.length;
 		var l = this.length;
-		this.__double(l + 1);
+		this.__grow(l + 1);
 		var a = this.__a;
 		var a = this.__a;
 		neko.NativeArray.blit(a,1,a,0,l);
 		neko.NativeArray.blit(a,1,a,0,l);
 		a[0] = x;
 		a[0] = x;
@@ -264,7 +264,7 @@
 			var dlen = l - neko.NativeArray.length(a);
 			var dlen = l - neko.NativeArray.length(a);
 			if( dlen > 0 ) {
 			if( dlen > 0 ) {
 				if( dlen == 1 ) {
 				if( dlen == 1 ) {
-					this.__double(l);
+					this.__grow(l);
 					a = this.__a;
 					a = this.__a;
 				} else {
 				} else {
 					a = neko.NativeArray.alloc(l);
 					a = neko.NativeArray.alloc(l);
@@ -278,14 +278,14 @@
 		return v;
 		return v;
 	}
 	}
 
 
-	private function __double(l:Int) : Void {
+	private function __grow(l:Int) : Void {
 		var a = this.__a;
 		var a = this.__a;
 		var sz = neko.NativeArray.length(a);
 		var sz = neko.NativeArray.length(a);
 		if( sz >= l ) {
 		if( sz >= l ) {
 			this.length = l;
 			this.length = l;
 			return;
 			return;
 		}
 		}
-		var big = sz * 2;
+		var big = (sz * 3) >> 1;
 		if( big < l ) big = l;
 		if( big < l ) big = l;
 		var a2 = neko.NativeArray.alloc(big);
 		var a2 = neko.NativeArray.alloc(big);
 		neko.NativeArray.blit(a2,0,a,0,this.length);
 		neko.NativeArray.blit(a2,0,a,0,this.length);