1// Copyright 2014 PDFium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
6
7#ifndef XFA_FXBARCODE_COMMON_REEDSOLOMON_BC_REEDSOLOMONGF256_H_
8#define XFA_FXBARCODE_COMMON_REEDSOLOMON_BC_REEDSOLOMONGF256_H_
9
10#include <memory>
11
12#include "core/fxcrt/fx_basic.h"
13#include "xfa/fxbarcode/utils.h"
14
15class CBC_ReedSolomonGF256Poly;
16
17class CBC_ReedSolomonGF256 {
18 public:
19  explicit CBC_ReedSolomonGF256(int32_t primitive);
20  virtual ~CBC_ReedSolomonGF256();
21
22  static void Initialize();
23  static void Finalize();
24
25  CBC_ReedSolomonGF256Poly* GetZero() const;
26  CBC_ReedSolomonGF256Poly* GetOne() const;
27  CBC_ReedSolomonGF256Poly* BuildMonomial(int32_t degree,
28                                          int32_t coefficient,
29                                          int32_t& e);
30  static int32_t AddOrSubtract(int32_t a, int32_t b);
31  int32_t Exp(int32_t a);
32  int32_t Log(int32_t a, int32_t& e);
33  int32_t Inverse(int32_t a, int32_t& e);
34  int32_t Multiply(int32_t a, int32_t b);
35  virtual void Init();
36
37  static CBC_ReedSolomonGF256* QRCodeField;
38  static CBC_ReedSolomonGF256* DataMatrixField;
39
40 private:
41  int32_t m_expTable[256];
42  int32_t m_logTable[256];
43  std::unique_ptr<CBC_ReedSolomonGF256Poly> m_zero;
44  std::unique_ptr<CBC_ReedSolomonGF256Poly> m_one;
45};
46
47#endif  // XFA_FXBARCODE_COMMON_REEDSOLOMON_BC_REEDSOLOMONGF256_H_
48