// 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_Module.h"
#include "JBig2_HuffmanTable_Standard.h"
#include "JBig2_BitStream.h"
class CJBig2_HuffmanTable : public CJBig2_Object
{
public:

    CJBig2_HuffmanTable(const JBig2TableLine *pTable, int nLines, FX_BOOL bHTOOB);

    CJBig2_HuffmanTable(CJBig2_BitStream *pStream);

    ~CJBig2_HuffmanTable();

    void init();

    int parseFromStandardTable(const JBig2TableLine *pTable, int nLines, FX_BOOL bHTOOB);

    int parseFromCodedBuffer(CJBig2_BitStream *pStream);

    FX_BOOL isOK()
    {
        return m_bOK;
    }
private:
    FX_BOOL HTOOB;
    int NTEMP;
    int *CODES;
    int *PREFLEN;
    int *RANGELEN;
    int *RANGELOW;
    FX_BOOL m_bOK;
    friend class CJBig2_HuffmanDecoder;
};
#endif
