Kaynağa Gözat

Use Vectors in haxe.zip (#11034)

RblSb 5 ay önce
ebeveyn
işleme
b5ed39b11c
2 değiştirilmiş dosya ile 16 ekleme ve 23 silme
  1. 8 12
      std/haxe/zip/Huffman.hx
  2. 8 11
      std/haxe/zip/InflateImpl.hx

+ 8 - 12
std/haxe/zip/Huffman.hx

@@ -22,10 +22,12 @@
 
 package haxe.zip;
 
+import haxe.ds.Vector;
+
 enum Huffman {
 	Found(i:Int);
 	NeedBit(left:Huffman, right:Huffman);
-	NeedBits(n:Int, table:Array<Huffman>);
+	NeedBits(n:Int, table:Vector<Huffman>);
 }
 
 class HuffTools {
@@ -52,14 +54,12 @@ class HuffTools {
 				default: throw "assert";
 			}
 		var size = 1 << d;
-		var table = new Array();
-		for (i in 0...size)
-			table.push(Found(-1));
+		var table = new Vector(size, Found(-1));
 		treeWalk(table, 0, 0, d, t);
 		return NeedBits(d, table);
 	}
 
-	function treeWalk(table, p, cd, d, t) {
+	function treeWalk(table:Vector<Huffman>, p, cd, d, t) {
 		switch (t) {
 			case NeedBit(a, b):
 				if (d > 0) {
@@ -83,18 +83,14 @@ class HuffTools {
 		return NeedBit(treeMake(bits, maxbits, v, len), treeMake(bits, maxbits, v | 1, len));
 	}
 
-	public function make(lengths, pos, nlengths, maxbits) {
+	public function make(lengths:Vector<Int>, pos, nlengths, maxbits) {
 		if (nlengths == 1) {
 			return NeedBit(Found(0), Found(0));
 		}
-		var counts = new Array();
-		var tmp = new Array();
 		if (maxbits > 32)
 			throw "Invalid huffman";
-		for (i in 0...maxbits) {
-			counts.push(0);
-			tmp.push(0);
-		}
+		var counts = new Vector(maxbits, 0);
+		var tmp = new Vector(maxbits, 0);
 		for (i in 0...nlengths) {
 			var p = lengths[i + pos];
 			if (p >= maxbits)

+ 8 - 11
std/haxe/zip/InflateImpl.hx

@@ -22,8 +22,9 @@
 
 package haxe.zip;
 
-import haxe.zip.Huffman;
 import haxe.crypto.Adler32;
+import haxe.ds.Vector;
+import haxe.zip.Huffman;
 
 private class Window {
 	public static inline var SIZE = 1 << 15;
@@ -121,7 +122,7 @@ class InflateImpl {
 	var output:haxe.io.Bytes;
 	var outpos:Int;
 	var input:haxe.io.Input;
-	var lengths:Array<Int>;
+	var lengths:Vector<Int>;
 	var window:Window;
 
 	static var FIXED_HUFFMAN = null;
@@ -140,18 +141,16 @@ class InflateImpl {
 		needed = 0;
 		output = null;
 		outpos = 0;
-		lengths = new Array();
-		for (i in 0...19)
-			lengths.push(-1);
+		lengths = new Vector(19, -1);
 		window = new Window(crc);
 	}
 
 	function buildFixedHuffman() {
 		if (FIXED_HUFFMAN != null)
 			return FIXED_HUFFMAN;
-		var a = new Array();
+		var a = new Vector(288);
 		for (n in 0...288)
-			a.push(if (n <= 143) 8 else if (n <= 255) 9 else if (n <= 279) 7 else 8);
+			a[n] = (if (n <= 143) 8 else if (n <= 255) 9 else if (n <= 279) 7 else 8);
 		FIXED_HUFFMAN = htools.make(a, 0, 288, 10);
 		return FIXED_HUFFMAN;
 	}
@@ -233,7 +232,7 @@ class InflateImpl {
 		}
 	}
 
-	function inflateLengths(a, max) {
+	function inflateLengths(a:Vector<Int>, max) {
 		var i = 0;
 		var prev = 0;
 		while (i < max) {
@@ -322,9 +321,7 @@ class InflateImpl {
 						for (i in hclen...19)
 							lengths[CODE_LENGTHS_POS[i]] = 0;
 						huffman = htools.make(lengths, 0, 19, 8);
-						var lengths = new Array();
-						for (i in 0...hlit + hdist)
-							lengths.push(0);
+						var lengths = new Vector(hlit + hdist, 0);
 						inflateLengths(lengths, hlit + hdist);
 						huffdist = htools.make(lengths, hlit, hdist, 16);
 						huffman = htools.make(lengths, 0, hlit, 16);