From 8c38c2cbe32f2a824973e5acb3e3f85fd27d9e3a Mon Sep 17 00:00:00 2001 From: fkaelberer Date: Sat, 10 May 2014 18:03:54 +0200 Subject: [PATCH] Simplify Jbig2Image.decodeInteger() --- src/core/jbig2.js | 85 +++++++++++++---------------------------------- 1 file changed, 24 insertions(+), 61 deletions(-) diff --git a/src/core/jbig2.js b/src/core/jbig2.js index cf297bcc6..e4ae7c751 100755 --- a/src/core/jbig2.js +++ b/src/core/jbig2.js @@ -28,7 +28,7 @@ var Jbig2Image = (function Jbig2ImageClosure() { if (id in this) { 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 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) { - 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; - } - state = 7; - toRead = 2; - offset = 0; - break; - case 3: - if (bit) { - break; - } - 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; + + 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); + v = (v << 1) | bit; } - state++; + return v >>> 0; } - 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