avoid constantly calling ensureBuffer
This commit is contained in:
parent
51b9659f55
commit
00e2ff5a60
48
pdf.js
48
pdf.js
@ -314,7 +314,7 @@ var FlateStream = (function() {
|
|||||||
},
|
},
|
||||||
ensureBuffer: function(requested) {
|
ensureBuffer: function(requested) {
|
||||||
var buffer = this.buffer;
|
var buffer = this.buffer;
|
||||||
var current = buffer ? buffer.byteLength : 0;
|
var current = buffer ? buffer.length : 0;
|
||||||
if (requested < current)
|
if (requested < current)
|
||||||
return buffer;
|
return buffer;
|
||||||
var size = 512;
|
var size = 512;
|
||||||
@ -494,32 +494,40 @@ var FlateStream = (function() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
var pos = this.bufferLength;
|
var pos = this.bufferLength;
|
||||||
|
var buffer = this.buffer;
|
||||||
|
var limit = buffer ? buffer.length : 0;
|
||||||
while (true) {
|
while (true) {
|
||||||
var code1 = this.getCode(litCodeTable);
|
var code1 = this.getCode(litCodeTable);
|
||||||
|
if (code1 < 256) {
|
||||||
|
if (pos + 1 >= limit) {
|
||||||
|
buffer = this.ensureBuffer(pos + 1);
|
||||||
|
limit = buffer.length;
|
||||||
|
}
|
||||||
|
buffer[pos++] = code1;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
if (code1 == 256) {
|
if (code1 == 256) {
|
||||||
this.bufferLength = pos;
|
this.bufferLength = pos;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (code1 < 256) {
|
code1 -= 257;
|
||||||
var buffer = this.ensureBuffer(pos + 1);
|
code1 = lengthDecode[code1];
|
||||||
buffer[pos++] = code1;
|
var code2 = code1 >> 16;
|
||||||
} else {
|
if (code2 > 0)
|
||||||
code1 -= 257;
|
code2 = this.getBits(code2);
|
||||||
code1 = lengthDecode[code1];
|
var len = (code1 & 0xffff) + code2;
|
||||||
var code2 = code1 >> 16;
|
code1 = this.getCode(distCodeTable);
|
||||||
if (code2 > 0)
|
code1 = distDecode[code1];
|
||||||
code2 = this.getBits(code2);
|
code2 = code1 >> 16;
|
||||||
var len = (code1 & 0xffff) + code2;
|
if (code2 > 0)
|
||||||
code1 = this.getCode(distCodeTable);
|
code2 = this.getBits(code2);
|
||||||
code1 = distDecode[code1];
|
var dist = (code1 & 0xffff) + code2;
|
||||||
code2 = code1 >> 16;
|
if (pos + len >= limit) {
|
||||||
if (code2 > 0)
|
buffer = this.ensureBuffer(pos + len);
|
||||||
code2 = this.getBits(code2);
|
limit = buffer.length;
|
||||||
var dist = (code1 & 0xffff) + code2;
|
|
||||||
var buffer = this.ensureBuffer(pos + len);
|
|
||||||
for (var k = 0; k < len; ++k, ++pos)
|
|
||||||
buffer[pos] = buffer[pos - dist];
|
|
||||||
}
|
}
|
||||||
|
for (var k = 0; k < len; ++k, ++pos)
|
||||||
|
buffer[pos] = buffer[pos - dist];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
Loading…
Reference in New Issue
Block a user