diff options
Diffstat (limited to 'xfa/fxbarcode/common/reedsolomon')
-rw-r--r-- | xfa/fxbarcode/common/reedsolomon/BC_ReedSolomonGF256.cpp | 38 | ||||
-rw-r--r-- | xfa/fxbarcode/common/reedsolomon/BC_ReedSolomonGF256.h | 22 |
2 files changed, 37 insertions, 23 deletions
diff --git a/xfa/fxbarcode/common/reedsolomon/BC_ReedSolomonGF256.cpp b/xfa/fxbarcode/common/reedsolomon/BC_ReedSolomonGF256.cpp index da0ad3ff05..c9425dfa19 100644 --- a/xfa/fxbarcode/common/reedsolomon/BC_ReedSolomonGF256.cpp +++ b/xfa/fxbarcode/common/reedsolomon/BC_ReedSolomonGF256.cpp @@ -23,18 +23,19 @@ #include "xfa/fxbarcode/common/reedsolomon/BC_ReedSolomonGF256.h" #include "xfa/fxbarcode/common/reedsolomon/BC_ReedSolomonGF256Poly.h" -CBC_ReedSolomonGF256* CBC_ReedSolomonGF256::QRCodeFild = nullptr; +CBC_ReedSolomonGF256* CBC_ReedSolomonGF256::QRCodeField = nullptr; CBC_ReedSolomonGF256* CBC_ReedSolomonGF256::DataMatrixField = nullptr; + void CBC_ReedSolomonGF256::Initialize() { - QRCodeFild = new CBC_ReedSolomonGF256(0x011D); - QRCodeFild->Init(); + QRCodeField = new CBC_ReedSolomonGF256(0x011D); + QRCodeField->Init(); DataMatrixField = new CBC_ReedSolomonGF256(0x012D); DataMatrixField->Init(); } void CBC_ReedSolomonGF256::Finalize() { - delete QRCodeFild; - QRCodeFild = nullptr; + delete QRCodeField; + QRCodeField = nullptr; delete DataMatrixField; DataMatrixField = nullptr; } @@ -53,20 +54,22 @@ CBC_ReedSolomonGF256::CBC_ReedSolomonGF256(int32_t primitive) { } m_logTable[0] = 0; } + void CBC_ReedSolomonGF256::Init() { - m_zero = new CBC_ReedSolomonGF256Poly(this, 0); - m_one = new CBC_ReedSolomonGF256Poly(this, 1); -} -CBC_ReedSolomonGF256::~CBC_ReedSolomonGF256() { - delete m_zero; - delete m_one; + m_zero.reset(new CBC_ReedSolomonGF256Poly(this, 0)); + m_one.reset(new CBC_ReedSolomonGF256Poly(this, 1)); } -CBC_ReedSolomonGF256Poly* CBC_ReedSolomonGF256::GetZero() { - return m_zero; + +CBC_ReedSolomonGF256::~CBC_ReedSolomonGF256() {} + +CBC_ReedSolomonGF256Poly* CBC_ReedSolomonGF256::GetZero() const { + return m_zero.get(); } -CBC_ReedSolomonGF256Poly* CBC_ReedSolomonGF256::GetOne() { - return m_one; + +CBC_ReedSolomonGF256Poly* CBC_ReedSolomonGF256::GetOne() const { + return m_one.get(); } + CBC_ReedSolomonGF256Poly* CBC_ReedSolomonGF256::BuildMonomial( int32_t degree, int32_t coefficient, @@ -88,12 +91,15 @@ CBC_ReedSolomonGF256Poly* CBC_ReedSolomonGF256::BuildMonomial( BC_EXCEPTION_CHECK_ReturnValue(e, nullptr); return temp; } + int32_t CBC_ReedSolomonGF256::AddOrSubtract(int32_t a, int32_t b) { return a ^ b; } + int32_t CBC_ReedSolomonGF256::Exp(int32_t a) { return m_expTable[a]; } + int32_t CBC_ReedSolomonGF256::Log(int32_t a, int32_t& e) { if (a == 0) { e = BCExceptionAIsZero; @@ -101,6 +107,7 @@ int32_t CBC_ReedSolomonGF256::Log(int32_t a, int32_t& e) { } return m_logTable[a]; } + int32_t CBC_ReedSolomonGF256::Inverse(int32_t a, int32_t& e) { if (a == 0) { e = BCExceptionAIsZero; @@ -108,6 +115,7 @@ int32_t CBC_ReedSolomonGF256::Inverse(int32_t a, int32_t& e) { } return m_expTable[255 - m_logTable[a]]; } + int32_t CBC_ReedSolomonGF256::Multiply(int32_t a, int32_t b) { if (a == 0 || b == 0) { return 0; diff --git a/xfa/fxbarcode/common/reedsolomon/BC_ReedSolomonGF256.h b/xfa/fxbarcode/common/reedsolomon/BC_ReedSolomonGF256.h index cd788111ed..ec0f1ff549 100644 --- a/xfa/fxbarcode/common/reedsolomon/BC_ReedSolomonGF256.h +++ b/xfa/fxbarcode/common/reedsolomon/BC_ReedSolomonGF256.h @@ -7,20 +7,23 @@ #ifndef XFA_FXBARCODE_COMMON_REEDSOLOMON_BC_REEDSOLOMONGF256_H_ #define XFA_FXBARCODE_COMMON_REEDSOLOMON_BC_REEDSOLOMONGF256_H_ +#include <memory> + #include "core/fxcrt/include/fx_basic.h" #include "xfa/fxbarcode/utils.h" class CBC_ReedSolomonGF256Poly; + class CBC_ReedSolomonGF256 { public: + explicit CBC_ReedSolomonGF256(int32_t primitive); + virtual ~CBC_ReedSolomonGF256(); + static void Initialize(); static void Finalize(); - static CBC_ReedSolomonGF256* QRCodeFild; - static CBC_ReedSolomonGF256* DataMatrixField; - CBC_ReedSolomonGF256(int32_t primitive); - virtual ~CBC_ReedSolomonGF256(); - CBC_ReedSolomonGF256Poly* GetZero(); - CBC_ReedSolomonGF256Poly* GetOne(); + + CBC_ReedSolomonGF256Poly* GetZero() const; + CBC_ReedSolomonGF256Poly* GetOne() const; CBC_ReedSolomonGF256Poly* BuildMonomial(int32_t degree, int32_t coefficient, int32_t& e); @@ -31,11 +34,14 @@ class CBC_ReedSolomonGF256 { int32_t Multiply(int32_t a, int32_t b); virtual void Init(); + static CBC_ReedSolomonGF256* QRCodeField; + static CBC_ReedSolomonGF256* DataMatrixField; + private: int32_t m_expTable[256]; int32_t m_logTable[256]; - CBC_ReedSolomonGF256Poly* m_zero; - CBC_ReedSolomonGF256Poly* m_one; + std::unique_ptr<CBC_ReedSolomonGF256Poly> m_zero; + std::unique_ptr<CBC_ReedSolomonGF256Poly> m_one; }; #endif // XFA_FXBARCODE_COMMON_REEDSOLOMON_BC_REEDSOLOMONGF256_H_ |