// Copyright 2015 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 CORE_SRC_FXCODEC_JBIG2_JBIG2_SDDPROC_H_
#define CORE_SRC_FXCODEC_JBIG2_JBIG2_SDDPROC_H_

#include <vector>

#include "../../../include/fxcrt/fx_system.h"
#include "JBig2_ArithDecoder.h"

class CJBig2_BitStream;
class CJBig2_HuffmanTable;
class CJBig2_Image;
class CJBig2_SymbolDict;
class IFX_Pause;

class CJBig2_SDDProc {
 public:
  CJBig2_SymbolDict* decode_Arith(CJBig2_ArithDecoder* pArithDecoder,
                                  std::vector<JBig2ArithCtx>* gbContext,
                                  std::vector<JBig2ArithCtx>* grContext);

  CJBig2_SymbolDict* decode_Huffman(CJBig2_BitStream* pStream,
                                    std::vector<JBig2ArithCtx>* gbContext,
                                    std::vector<JBig2ArithCtx>* grContext,
                                    IFX_Pause* pPause);

 public:
  FX_BOOL SDHUFF;
  FX_BOOL SDREFAGG;
  FX_DWORD SDNUMINSYMS;
  CJBig2_Image** SDINSYMS;
  FX_DWORD SDNUMNEWSYMS;
  FX_DWORD SDNUMEXSYMS;
  CJBig2_HuffmanTable* SDHUFFDH;
  CJBig2_HuffmanTable* SDHUFFDW;
  CJBig2_HuffmanTable* SDHUFFBMSIZE;
  CJBig2_HuffmanTable* SDHUFFAGGINST;
  uint8_t SDTEMPLATE;
  int8_t SDAT[8];
  FX_BOOL SDRTEMPLATE;
  int8_t SDRAT[4];
};

#endif  // CORE_SRC_FXCODEC_JBIG2_JBIG2_SDDPROC_H_
