Simplify Jbig2Image.decodeInteger()

This commit is contained in:
fkaelberer 2014-05-10 18:03:54 +02:00
parent e359f0694f
commit 8c38c2cbe3

View File

@ -28,7 +28,7 @@ var Jbig2Image = (function Jbig2ImageClosure() {
if (id in this) { if (id in this) {
return this[id]; return this[id];
} }
return (this[id] = new Int8Array(1<<16)); return (this[id] = new Int8Array(1 << 16));
} }
}; };
@ -53,69 +53,32 @@ var Jbig2Image = (function Jbig2ImageClosure() {
// A.2 Procedure for decoding values // A.2 Procedure for decoding values
function decodeInteger(contextCache, procedure, decoder) { function decodeInteger(contextCache, procedure, decoder) {
var contexts = contextCache.getContexts(procedure); var contexts = contextCache.getContexts(procedure);
var prev = 1; var prev = 1;
var state = 1, v = 0, s;
var toRead = 32, offset = 4436; // defaults for state 7 function readBits(length) {
while (state) { var v = 0;
for (var i = 0; i < length; i++) {
var bit = decoder.readBit(contexts, prev); var bit = decoder.readBit(contexts, prev);
prev = (prev < 256 ? (prev << 1) | bit : prev = (prev < 256 ? (prev << 1) | bit :
(((prev << 1) | bit) & 511) | 256); (((prev << 1) | bit) & 511) | 256);
switch (state) { v = (v << 1) | bit;
case 1:
s = !!bit;
break;
case 2:
if (bit) {
break;
} }
state = 7; return v >>> 0;
toRead = 2;
offset = 0;
break;
case 3:
if (bit) {
break;
} }
state = 7;
toRead = 4; var sign = readBits(1);
offset = 4; var value = readBits(1) ?
break; (readBits(1) ?
case 4: (readBits(1) ?
if (bit) { (readBits(1) ?
break; (readBits(1) ?
} (readBits(32) + 4436) :
state = 7; readBits(12) + 340) :
toRead = 6; readBits(8) + 84) :
offset = 20; readBits(6) + 20) :
break; readBits(4) + 4) :
case 5: readBits(2);
if (bit) { return (sign === 0 ? value : (value > 0 ? -value : null));
break;
}
state = 7;
toRead = 8;
offset = 84;
break;
case 6:
if (bit) {
break;
}
state = 7;
toRead = 12;
offset = 340;
break;
default:
v = ((v << 1) | bit) >>> 0;
if (--toRead === 0) {
state = 0;
}
continue;
}
state++;
}
v += offset;
return (!s ? v : (v > 0 ? -v : null));
} }
// A.3 The IAID decoding procedure // A.3 The IAID decoding procedure