// 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_COMMON_REEDSOLOMON_BC_REEDSOLOMON_H_
#define XFA_FXBARCODE_COMMON_REEDSOLOMON_BC_REEDSOLOMON_H_

#include "core/fxcrt/fx_basic.h"

class CBC_ReedSolomonGF256;
class CBC_ReedSolomonGF256Poly;

class CBC_ReedSolomonEncoder {
 public:
  explicit CBC_ReedSolomonEncoder(CBC_ReedSolomonGF256* field);
  virtual ~CBC_ReedSolomonEncoder();

  void Encode(CFX_ArrayTemplate<int32_t>* toEncode,
              int32_t ecBytes,
              int32_t& e);
  virtual void Init();

 private:
  CBC_ReedSolomonGF256Poly* BuildGenerator(int32_t degree, int32_t& e);

  CBC_ReedSolomonGF256* m_field;
  CFX_ArrayTemplate<CBC_ReedSolomonGF256Poly*> m_cachedGenerators;
};

#endif  // XFA_FXBARCODE_COMMON_REEDSOLOMON_BC_REEDSOLOMON_H_
