Fix include paths for fx_system.h
[pdfium.git] / core / src / fxcodec / jbig2 / JBig2_HuffmanDecoder.cpp
1 // Copyright 2014 PDFium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
6
7 #include "JBig2_HuffmanDecoder.h"
8 CJBig2_HuffmanDecoder::CJBig2_HuffmanDecoder(CJBig2_BitStream* pStream) {
9   m_pStream = pStream;
10 }
11 CJBig2_HuffmanDecoder::~CJBig2_HuffmanDecoder() {}
12 int CJBig2_HuffmanDecoder::decodeAValue(CJBig2_HuffmanTable* pTable,
13                                         int* nResult) {
14   int i;
15   int nVal = 0;
16   int nBits = 0;
17   FX_DWORD nTmp;
18   while (1) {
19     if (m_pStream->read1Bit(&nTmp) == -1) {
20       return -1;
21     }
22     nVal = (nVal << 1) | nTmp;
23     nBits++;
24     for (i = 0; i < pTable->NTEMP; i++) {
25       if ((pTable->PREFLEN[i] == nBits) && (pTable->CODES[i] == nVal)) {
26         if ((pTable->HTOOB == 1) && (i == pTable->NTEMP - 1)) {
27           return JBIG2_OOB;
28         }
29         if (m_pStream->readNBits(pTable->RANGELEN[i], &nTmp) == -1) {
30           return -1;
31         }
32         if (pTable->HTOOB) {
33           if (i == pTable->NTEMP - 3) {
34             *nResult = pTable->RANGELOW[i] - nTmp;
35             return 0;
36           } else {
37             *nResult = pTable->RANGELOW[i] + nTmp;
38             return 0;
39           }
40         } else {
41           if (i == pTable->NTEMP - 2) {
42             *nResult = pTable->RANGELOW[i] - nTmp;
43             return 0;
44           } else {
45             *nResult = pTable->RANGELOW[i] + nTmp;
46             return 0;
47           }
48         }
49       }
50     }
51   }
52   return -2;
53 }