// 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 "../../../core/include/fxcrt/fx_system.h"

class CJBig2_ArithDecoder;
class CJBig2_BitStream;
class CJBig2_HuffmanTable;
class CJBig2_Image;
class CJBig2_SymbolDict;
class IFX_Pause;
struct JBig2ArithCtx;

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

  CJBig2_SymbolDict* decode_Huffman(CJBig2_BitStream* pStream,
                                    JBig2ArithCtx* gbContext,
                                    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_
