// 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 FXBARCODE_COMMON_REEDSOLOMON_BC_REEDSOLOMONGF256_H_ #define FXBARCODE_COMMON_REEDSOLOMON_BC_REEDSOLOMONGF256_H_ #include #include "third_party/base/optional.h" class CBC_ReedSolomonGF256Poly; class CBC_ReedSolomonGF256 { public: explicit CBC_ReedSolomonGF256(int32_t primitive); ~CBC_ReedSolomonGF256(); CBC_ReedSolomonGF256Poly* GetZero() const { return m_zero.get(); } CBC_ReedSolomonGF256Poly* GetOne() const { return m_one.get(); } std::unique_ptr BuildMonomial(int32_t degree, int32_t coefficient); static int32_t AddOrSubtract(int32_t a, int32_t b); int32_t Exp(int32_t a); Optional Inverse(int32_t a); int32_t Multiply(int32_t a, int32_t b); void Init(); private: std::unique_ptr m_zero; std::unique_ptr m_one; int32_t m_expTable[256]; int32_t m_logTable[256]; }; #endif // FXBARCODE_COMMON_REEDSOLOMON_BC_REEDSOLOMONGF256_H_