Simplify Jbig2Image.decodeInteger()

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

View File

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