// 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 _BC_DATAMATRIXBITMATRIXPARSER_H_
#define _BC_DATAMATRIXBITMATRIXPARSER_H_
class CBC_CommonBitMatrix;
class CBC_DataMatrixVersion;
class CBC_DataMatrixBitMatrixParser {
 public:
  CBC_DataMatrixBitMatrixParser();
  virtual ~CBC_DataMatrixBitMatrixParser();
  CBC_DataMatrixVersion* GetVersion();
  CFX_ByteArray* ReadCodewords(int32_t& e);
  FX_BOOL ReadModule(int32_t row,
                     int32_t column,
                     int32_t numRows,
                     int32_t numColumns);
  int32_t ReadUtah(int32_t row,
                   int32_t column,
                   int32_t numRows,
                   int32_t numColumns);
  int32_t ReadCorner1(int32_t numRows, int32_t numColumns);
  int32_t ReadCorner2(int32_t numRows, int32_t numColumns);
  int32_t ReadCorner3(int32_t numRows, int32_t numColumns);
  int32_t ReadCorner4(int32_t numRows, int32_t numColumns);
  CBC_CommonBitMatrix* ExtractDataRegion(CBC_CommonBitMatrix* bitMatrix,
                                         int32_t& e);
  virtual void Init(CBC_CommonBitMatrix* bitMatrix, int32_t& e);

 private:
  static CBC_DataMatrixVersion* ReadVersion(CBC_CommonBitMatrix* bitMatrix,
                                            int32_t& e);
  CBC_CommonBitMatrix* m_mappingBitMatrix;
  CBC_CommonBitMatrix* m_readMappingMatrix;
  CBC_DataMatrixVersion* m_version;
};
#endif
