// 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 XFA_FXBARCODE_PDF417_BC_PDF417ECERRORCORRECTION_H_
#define XFA_FXBARCODE_PDF417_BC_PDF417ECERRORCORRECTION_H_

class CBC_PDF417ECModulusGF;
class CBC_PDF417ECModulusPoly;
class CBC_PDF417ECErrorCorrection {
 public:
  CBC_PDF417ECErrorCorrection();
  virtual ~CBC_PDF417ECErrorCorrection();
  static void Initialize(int32_t& e);
  static void Finalize();
  static int32_t decode(CFX_Int32Array& received,
                        int32_t numECCodewords,
                        CFX_Int32Array& erasures,
                        int32_t& e);

 private:
  static CBC_PDF417ECModulusGF* m_field;
  static CFX_ArrayTemplate<CBC_PDF417ECModulusPoly*>* runEuclideanAlgorithm(
      CBC_PDF417ECModulusPoly* a,
      CBC_PDF417ECModulusPoly* b,
      int32_t R,
      int32_t& e);
  static CFX_Int32Array* findErrorLocations(
      CBC_PDF417ECModulusPoly* errorLocator,
      int32_t& e);
  static CFX_Int32Array* findErrorMagnitudes(
      CBC_PDF417ECModulusPoly* errorEvaluator,
      CBC_PDF417ECModulusPoly* errorLocator,
      CFX_Int32Array& errorLocations,
      int32_t& e);
};

#endif  // XFA_FXBARCODE_PDF417_BC_PDF417ECERRORCORRECTION_H_
