// 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_ARITH_INT_DECODER_H_
#define _JBIG2_ARITH_INT_DECODER_H_
#include "JBig2_Module.h"
#include "JBig2_ArithDecoder.h"
class CJBig2_ArithIntDecoder : public CJBig2_Object
{
public:

    CJBig2_ArithIntDecoder();

    ~CJBig2_ArithIntDecoder();

    int decode(CJBig2_ArithDecoder *pArithDecoder, int *nResult);
private:

    JBig2ArithCtx *IAx;
};
class CJBig2_ArithIaidDecoder : public CJBig2_Object
{
public:

    CJBig2_ArithIaidDecoder(unsigned char SBSYMCODELENA);

    ~CJBig2_ArithIaidDecoder();

    int decode(CJBig2_ArithDecoder *pArithDecoder, int *nResult);
private:

    JBig2ArithCtx *IAID;

    unsigned char SBSYMCODELEN;
};
#endif
