1*3ac0a46fSAndroid Build Coastguard Worker // Copyright 2014 The PDFium Authors 2*3ac0a46fSAndroid Build Coastguard Worker // Use of this source code is governed by a BSD-style license that can be 3*3ac0a46fSAndroid Build Coastguard Worker // found in the LICENSE file. 4*3ac0a46fSAndroid Build Coastguard Worker 5*3ac0a46fSAndroid Build Coastguard Worker // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com 6*3ac0a46fSAndroid Build Coastguard Worker 7*3ac0a46fSAndroid Build Coastguard Worker #ifndef FXBARCODE_COMMON_REEDSOLOMON_BC_REEDSOLOMONGF256_H_ 8*3ac0a46fSAndroid Build Coastguard Worker #define FXBARCODE_COMMON_REEDSOLOMON_BC_REEDSOLOMONGF256_H_ 9*3ac0a46fSAndroid Build Coastguard Worker 10*3ac0a46fSAndroid Build Coastguard Worker #include <memory> 11*3ac0a46fSAndroid Build Coastguard Worker 12*3ac0a46fSAndroid Build Coastguard Worker #include "third_party/abseil-cpp/absl/types/optional.h" 13*3ac0a46fSAndroid Build Coastguard Worker 14*3ac0a46fSAndroid Build Coastguard Worker class CBC_ReedSolomonGF256Poly; 15*3ac0a46fSAndroid Build Coastguard Worker 16*3ac0a46fSAndroid Build Coastguard Worker class CBC_ReedSolomonGF256 { 17*3ac0a46fSAndroid Build Coastguard Worker public: 18*3ac0a46fSAndroid Build Coastguard Worker explicit CBC_ReedSolomonGF256(int32_t primitive); 19*3ac0a46fSAndroid Build Coastguard Worker ~CBC_ReedSolomonGF256(); 20*3ac0a46fSAndroid Build Coastguard Worker GetZero()21*3ac0a46fSAndroid Build Coastguard Worker CBC_ReedSolomonGF256Poly* GetZero() const { return m_zero.get(); } GetOne()22*3ac0a46fSAndroid Build Coastguard Worker CBC_ReedSolomonGF256Poly* GetOne() const { return m_one.get(); } 23*3ac0a46fSAndroid Build Coastguard Worker 24*3ac0a46fSAndroid Build Coastguard Worker std::unique_ptr<CBC_ReedSolomonGF256Poly> BuildMonomial(int32_t degree, 25*3ac0a46fSAndroid Build Coastguard Worker int32_t coefficient); 26*3ac0a46fSAndroid Build Coastguard Worker static int32_t AddOrSubtract(int32_t a, int32_t b); 27*3ac0a46fSAndroid Build Coastguard Worker int32_t Exp(int32_t a); 28*3ac0a46fSAndroid Build Coastguard Worker absl::optional<int32_t> Inverse(int32_t a); 29*3ac0a46fSAndroid Build Coastguard Worker int32_t Multiply(int32_t a, int32_t b); 30*3ac0a46fSAndroid Build Coastguard Worker void Init(); 31*3ac0a46fSAndroid Build Coastguard Worker 32*3ac0a46fSAndroid Build Coastguard Worker private: 33*3ac0a46fSAndroid Build Coastguard Worker std::unique_ptr<CBC_ReedSolomonGF256Poly> m_zero; 34*3ac0a46fSAndroid Build Coastguard Worker std::unique_ptr<CBC_ReedSolomonGF256Poly> m_one; 35*3ac0a46fSAndroid Build Coastguard Worker int32_t m_expTable[256]; 36*3ac0a46fSAndroid Build Coastguard Worker int32_t m_logTable[256]; 37*3ac0a46fSAndroid Build Coastguard Worker }; 38*3ac0a46fSAndroid Build Coastguard Worker 39*3ac0a46fSAndroid Build Coastguard Worker #endif // FXBARCODE_COMMON_REEDSOLOMON_BC_REEDSOLOMONGF256_H_ 40