// 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_PtrArray* 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_
