// 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);

  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() { return m_bOK; }

 private:
  void init();

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