Index: xfa/fxbarcode/pdf417/BC_PDF417ECModulusPoly.cpp |
diff --git a/xfa/fxbarcode/pdf417/BC_PDF417ECModulusPoly.cpp b/xfa/fxbarcode/pdf417/BC_PDF417ECModulusPoly.cpp |
index d0bbe5ab0a0d06a646522de7a11f52465a7941df..47fbcce5d045dce35560d6a6548eef865ec48d22 100644 |
--- a/xfa/fxbarcode/pdf417/BC_PDF417ECModulusPoly.cpp |
+++ b/xfa/fxbarcode/pdf417/BC_PDF417ECModulusPoly.cpp |
@@ -20,6 +20,8 @@ |
* limitations under the License. |
*/ |
+#include <memory> |
+ |
#include "xfa/fxbarcode/pdf417/BC_PDF417Common.h" |
#include "xfa/fxbarcode/pdf417/BC_PDF417ECModulusGF.h" |
#include "xfa/fxbarcode/pdf417/BC_PDF417ECModulusPoly.h" |
@@ -212,19 +214,20 @@ CBC_PDF417ECModulusPoly* CBC_PDF417ECModulusPoly::multiply(int32_t scalar, |
BC_EXCEPTION_CHECK_ReturnValue(e, NULL); |
return modulusPoly; |
} |
+ |
CBC_PDF417ECModulusPoly* CBC_PDF417ECModulusPoly::multiplyByMonomial( |
int32_t degree, |
int32_t coefficient, |
int32_t& e) { |
if (degree < 0) { |
e = BCExceptionIllegalArgument; |
- return NULL; |
+ return nullptr; |
} |
- CBC_PDF417ECModulusPoly* modulusPoly = NULL; |
+ CBC_PDF417ECModulusPoly* modulusPoly = nullptr; |
if (coefficient == 0) { |
modulusPoly = new CBC_PDF417ECModulusPoly( |
m_field->getZero()->m_field, m_field->getZero()->m_coefficients, e); |
- BC_EXCEPTION_CHECK_ReturnValue(e, NULL); |
+ BC_EXCEPTION_CHECK_ReturnValue(e, nullptr); |
return modulusPoly; |
} |
int32_t size = m_coefficients.GetSize(); |
@@ -234,74 +237,62 @@ CBC_PDF417ECModulusPoly* CBC_PDF417ECModulusPoly::multiplyByMonomial( |
product[i] = m_field->multiply(m_coefficients[i], coefficient); |
} |
modulusPoly = new CBC_PDF417ECModulusPoly(m_field, product, e); |
- BC_EXCEPTION_CHECK_ReturnValue(e, NULL); |
+ BC_EXCEPTION_CHECK_ReturnValue(e, nullptr); |
return modulusPoly; |
} |
-CFX_PtrArray* CBC_PDF417ECModulusPoly::divide(CBC_PDF417ECModulusPoly* other, |
- int32_t& e) { |
+ |
+CFX_ArrayTemplate<CBC_PDF417ECModulusPoly*>* CBC_PDF417ECModulusPoly::divide( |
+ CBC_PDF417ECModulusPoly* other, |
+ int32_t& e) { |
if (other->isZero()) { |
e = BCExceptionDivideByZero; |
- return NULL; |
- } |
- CBC_PDF417ECModulusPoly* quotient = new CBC_PDF417ECModulusPoly( |
- m_field->getZero()->m_field, m_field->getZero()->m_coefficients, e); |
- BC_EXCEPTION_CHECK_ReturnValue(e, NULL); |
- CBC_PDF417ECModulusPoly* remainder = |
- new CBC_PDF417ECModulusPoly(m_field, m_coefficients, e); |
- if (e != BCExceptionNO) { |
- delete quotient; |
- return NULL; |
+ return nullptr; |
} |
+ std::unique_ptr<CBC_PDF417ECModulusPoly> quotient(new CBC_PDF417ECModulusPoly( |
+ m_field->getZero()->m_field, m_field->getZero()->m_coefficients, e)); |
+ BC_EXCEPTION_CHECK_ReturnValue(e, nullptr); |
+ std::unique_ptr<CBC_PDF417ECModulusPoly> remainder( |
+ new CBC_PDF417ECModulusPoly(m_field, m_coefficients, e)); |
+ if (e != BCExceptionNO) |
+ return nullptr; |
+ |
int32_t denominatorLeadingTerm = other->getCoefficient(other->getDegree()); |
int32_t inverseDenominatorLeadingTerm = |
m_field->inverse(denominatorLeadingTerm, e); |
- if (e != BCExceptionNO) { |
- delete quotient; |
- delete remainder; |
- return NULL; |
- } |
+ if (e != BCExceptionNO) |
+ return nullptr; |
+ |
while (remainder->getDegree() >= other->getDegree() && !remainder->isZero()) { |
int32_t degreeDifference = remainder->getDegree() - other->getDegree(); |
int32_t scale = |
m_field->multiply(remainder->getCoefficient(remainder->getDegree()), |
inverseDenominatorLeadingTerm); |
- CBC_PDF417ECModulusPoly* term = |
- other->multiplyByMonomial(degreeDifference, scale, e); |
- if (e != BCExceptionNO) { |
- delete quotient; |
- delete remainder; |
- return NULL; |
- } |
- CBC_PDF417ECModulusPoly* iterationQuotient = |
- m_field->buildMonomial(degreeDifference, scale, e); |
- if (e != BCExceptionNO) { |
- delete quotient; |
- delete remainder; |
- delete term; |
- return NULL; |
- } |
- CBC_PDF417ECModulusPoly* temp = quotient; |
- quotient = temp->add(iterationQuotient, e); |
- delete iterationQuotient; |
- delete temp; |
- if (e != BCExceptionNO) { |
- delete remainder; |
- return NULL; |
- } |
- temp = remainder; |
- remainder = temp->subtract(term, e); |
- delete term; |
- delete temp; |
- if (e != BCExceptionNO) { |
- delete quotient; |
- return NULL; |
- } |
+ std::unique_ptr<CBC_PDF417ECModulusPoly> term( |
+ other->multiplyByMonomial(degreeDifference, scale, e)); |
+ if (e != BCExceptionNO) |
+ return nullptr; |
+ |
+ std::unique_ptr<CBC_PDF417ECModulusPoly> iterationQuotient( |
+ m_field->buildMonomial(degreeDifference, scale, e)); |
+ if (e != BCExceptionNO) |
+ return nullptr; |
+ |
+ quotient.reset(quotient->add(iterationQuotient.get(), e)); |
+ if (e != BCExceptionNO) |
+ return nullptr; |
+ |
+ remainder.reset(remainder->subtract(term.get(), e)); |
+ if (e != BCExceptionNO) |
+ return nullptr; |
} |
- CFX_PtrArray* modulusPoly = new CFX_PtrArray; |
- modulusPoly->Add(quotient); |
- modulusPoly->Add(remainder); |
+ |
+ CFX_ArrayTemplate<CBC_PDF417ECModulusPoly*>* modulusPoly = |
+ new CFX_ArrayTemplate<CBC_PDF417ECModulusPoly*>(); |
+ modulusPoly->Add(quotient.release()); |
+ modulusPoly->Add(remainder.release()); |
return modulusPoly; |
} |
+ |
CFX_ByteString CBC_PDF417ECModulusPoly::toString() { |
CFX_ByteString result; |
for (int32_t degree = getDegree(); degree >= 0; degree--) { |