// Copyright 2014 PDFium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com

#ifndef _JBIG2_HUFFMAN_TABLE_H_
#define _JBIG2_HUFFMAN_TABLE_H_

#include "JBig2_HuffmanTable_Standard.h"
#include "JBig2_BitStream.h"

class CJBig2_HuffmanTable {
 public:
  CJBig2_HuffmanTable(const JBig2TableLine* pTable, int nLines, FX_BOOL bHTOOB);

  explicit CJBig2_HuffmanTable(CJBig2_BitStream* pStream);

  ~CJBig2_HuffmanTable();

  int parseFromStandardTable(const JBig2TableLine* pTable,
                             int nLines,
                             FX_BOOL bHTOOB);

  int parseFromCodedBuffer(CJBig2_BitStream* pStream);

  FX_BOOL isOK() const { return m_bOK; }

 private:
  void init();

  FX_BOOL HTOOB;
  FX_DWORD NTEMP;
  int* CODES;
  int* PREFLEN;
  int* RANGELEN;
  int* RANGELOW;
  FX_BOOL m_bOK;
  friend class CJBig2_HuffmanDecoder;
};
#endif
