Clean up CBC_ReedSolomonGF256Poly::Init().
The conditions where it would return false are not reachable. Turn them
into asserts and make the method return void.
Change-Id: I5dc5585a1a648bb791f2083c82b598bfe4dcc345
Reviewed-on: https://pdfium-review.googlesource.com/c/46555
Reviewed-by: Tom Sepez <tsepez@chromium.org>
Commit-Queue: Lei Zhang <thestig@chromium.org>
diff --git a/fxbarcode/common/reedsolomon/BC_ReedSolomon.cpp b/fxbarcode/common/reedsolomon/BC_ReedSolomon.cpp
index 8ce4ebf..71d5dd9 100644
--- a/fxbarcode/common/reedsolomon/BC_ReedSolomon.cpp
+++ b/fxbarcode/common/reedsolomon/BC_ReedSolomon.cpp
@@ -44,8 +44,7 @@
for (size_t d = m_cachedGenerators.size(); d <= degree; ++d) {
std::vector<int32_t> temp = {1, m_field->Exp(d - 1)};
CBC_ReedSolomonGF256Poly temp_poly;
- if (!temp_poly.Init(m_field.Get(), &temp))
- return nullptr;
+ temp_poly.Init(m_field.Get(), temp);
auto nextGenerator = lastGenerator->Multiply(&temp_poly);
if (!nextGenerator)
@@ -76,8 +75,7 @@
infoCoefficients[x] = (*toEncode)[x];
CBC_ReedSolomonGF256Poly info;
- if (!info.Init(m_field.Get(), &infoCoefficients))
- return false;
+ info.Init(m_field.Get(), infoCoefficients);
auto infoTemp = info.MultiplyByMonomial(ecBytes, 1);
if (!infoTemp)
diff --git a/fxbarcode/common/reedsolomon/BC_ReedSolomonGF256.cpp b/fxbarcode/common/reedsolomon/BC_ReedSolomonGF256.cpp
index a5657e1..ec7878c 100644
--- a/fxbarcode/common/reedsolomon/BC_ReedSolomonGF256.cpp
+++ b/fxbarcode/common/reedsolomon/BC_ReedSolomonGF256.cpp
@@ -86,8 +86,7 @@
std::vector<int32_t> coefficients(degree + 1);
coefficients[0] = coefficient;
auto temp = pdfium::MakeUnique<CBC_ReedSolomonGF256Poly>();
- if (!temp->Init(this, &coefficients))
- return nullptr;
+ temp->Init(this, coefficients);
return temp;
}
diff --git a/fxbarcode/common/reedsolomon/BC_ReedSolomonGF256Poly.cpp b/fxbarcode/common/reedsolomon/BC_ReedSolomonGF256Poly.cpp
index af6472a..59e239e 100644
--- a/fxbarcode/common/reedsolomon/BC_ReedSolomonGF256Poly.cpp
+++ b/fxbarcode/common/reedsolomon/BC_ReedSolomonGF256Poly.cpp
@@ -25,6 +25,7 @@
#include <memory>
#include <utility>
+#include "core/fxcrt/fx_system.h"
#include "fxbarcode/common/reedsolomon/BC_ReedSolomonGF256.h"
#include "third_party/base/ptr_util.h"
#include "third_party/base/stl_util.h"
@@ -42,30 +43,30 @@
m_field = nullptr;
}
-bool CBC_ReedSolomonGF256Poly::Init(CBC_ReedSolomonGF256* field,
- const std::vector<int32_t>* coefficients) {
- if (!coefficients || coefficients->empty())
- return false;
+CBC_ReedSolomonGF256Poly::~CBC_ReedSolomonGF256Poly() = default;
+
+void CBC_ReedSolomonGF256Poly::Init(CBC_ReedSolomonGF256* field,
+ const std::vector<int32_t>& coefficients) {
+ ASSERT(!coefficients.empty());
m_field = field;
- size_t coefficientsLength = coefficients->size();
- if (coefficientsLength > 1 && coefficients->front() == 0) {
- size_t firstNonZero = 1;
- while (firstNonZero < coefficientsLength &&
- (*coefficients)[firstNonZero] == 0) {
- firstNonZero++;
- }
- if (firstNonZero == coefficientsLength) {
- m_coefficients = m_field->GetZero()->GetCoefficients();
- } else {
- m_coefficients.resize(coefficientsLength - firstNonZero);
- for (size_t i = firstNonZero, j = 0; i < coefficientsLength; i++, j++)
- m_coefficients[j] = (*coefficients)[i];
- }
- } else {
- m_coefficients = *coefficients;
+ if (coefficients.size() == 1 || coefficients.front() != 0) {
+ m_coefficients = coefficients;
+ return;
}
- return true;
+
+ size_t firstNonZero = 1;
+ while (firstNonZero < coefficients.size() &&
+ coefficients[firstNonZero] == 0) {
+ firstNonZero++;
+ }
+ if (firstNonZero == coefficients.size()) {
+ m_coefficients = m_field->GetZero()->GetCoefficients();
+ } else {
+ m_coefficients.resize(coefficients.size() - firstNonZero);
+ for (size_t i = firstNonZero, j = 0; i < coefficients.size(); i++, j++)
+ m_coefficients[j] = coefficients[i];
+ }
}
const std::vector<int32_t>& CBC_ReedSolomonGF256Poly::GetCoefficients() const {
@@ -87,8 +88,7 @@
std::unique_ptr<CBC_ReedSolomonGF256Poly> CBC_ReedSolomonGF256Poly::Clone()
const {
auto temp = pdfium::MakeUnique<CBC_ReedSolomonGF256Poly>();
- if (!temp->Init(m_field.Get(), &m_coefficients))
- return nullptr;
+ temp->Init(m_field.Get(), m_coefficients);
return temp;
}
@@ -114,8 +114,7 @@
smallerCoefficients[j - lengthDiff], largerCoefficients[j]);
}
auto temp = pdfium::MakeUnique<CBC_ReedSolomonGF256Poly>();
- if (!temp->Init(m_field.Get(), &sumDiff))
- return nullptr;
+ temp->Init(m_field.Get(), sumDiff);
return temp;
}
@@ -137,8 +136,7 @@
}
}
auto temp = pdfium::MakeUnique<CBC_ReedSolomonGF256Poly>();
- if (!temp->Init(m_field.Get(), &product))
- return nullptr;
+ temp->Init(m_field.Get(), product);
return temp;
}
@@ -155,8 +153,7 @@
product[i] = m_field->Multiply(m_coefficients[i], scalar);
auto temp = pdfium::MakeUnique<CBC_ReedSolomonGF256Poly>();
- if (!temp->Init(m_field.Get(), &product))
- return nullptr;
+ temp->Init(m_field.Get(), product);
return temp;
}
@@ -174,8 +171,7 @@
product[i] = m_field->Multiply(m_coefficients[i], coefficient);
auto temp = pdfium::MakeUnique<CBC_ReedSolomonGF256Poly>();
- if (!temp->Init(m_field.Get(), &product))
- return nullptr;
+ temp->Init(m_field.Get(), product);
return temp;
}
@@ -217,5 +213,3 @@
}
return remainder;
}
-
-CBC_ReedSolomonGF256Poly::~CBC_ReedSolomonGF256Poly() {}
diff --git a/fxbarcode/common/reedsolomon/BC_ReedSolomonGF256Poly.h b/fxbarcode/common/reedsolomon/BC_ReedSolomonGF256Poly.h
index 5cd6b85..c3a3370c 100644
--- a/fxbarcode/common/reedsolomon/BC_ReedSolomonGF256Poly.h
+++ b/fxbarcode/common/reedsolomon/BC_ReedSolomonGF256Poly.h
@@ -19,8 +19,9 @@
CBC_ReedSolomonGF256Poly(CBC_ReedSolomonGF256* field, int32_t coefficients);
CBC_ReedSolomonGF256Poly();
~CBC_ReedSolomonGF256Poly();
- bool Init(CBC_ReedSolomonGF256* field,
- const std::vector<int32_t>* coefficients);
+
+ void Init(CBC_ReedSolomonGF256* field,
+ const std::vector<int32_t>& coefficients);
int32_t GetCoefficients(int32_t degree) const;
const std::vector<int32_t>& GetCoefficients() const;