| Index: xfa/fxbarcode/datamatrix/BC_DataMatrixDetector.cpp
|
| diff --git a/xfa/fxbarcode/datamatrix/BC_DataMatrixDetector.cpp b/xfa/fxbarcode/datamatrix/BC_DataMatrixDetector.cpp
|
| index fd410097ccc956dc4a0f2894de5ad62dc86a329a..9fd1bbc4a0af39409220d1f51d3eb84023604f4c 100644
|
| --- a/xfa/fxbarcode/datamatrix/BC_DataMatrixDetector.cpp
|
| +++ b/xfa/fxbarcode/datamatrix/BC_DataMatrixDetector.cpp
|
| @@ -35,7 +35,7 @@
|
|
|
| const int32_t CBC_DataMatrixDetector::INTEGERS[5] = {0, 1, 2, 3, 4};
|
| CBC_DataMatrixDetector::CBC_DataMatrixDetector(CBC_CommonBitMatrix* image)
|
| - : m_image(image), m_rectangleDetector(NULL) {}
|
| + : m_image(image), m_rectangleDetector(nullptr) {}
|
| void CBC_DataMatrixDetector::Init(int32_t& e) {
|
| m_rectangleDetector = new CBC_WhiteRectangleDetector(m_image);
|
| m_rectangleDetector->Init(e);
|
| @@ -44,42 +44,44 @@ void CBC_DataMatrixDetector::Init(int32_t& e) {
|
| CBC_DataMatrixDetector::~CBC_DataMatrixDetector() {
|
| delete m_rectangleDetector;
|
| }
|
| -inline FX_BOOL ResultPointsAndTransitionsComparator(void* a, void* b) {
|
| - return ((CBC_ResultPointsAndTransitions*)b)->GetTransitions() >
|
| - ((CBC_ResultPointsAndTransitions*)a)->GetTransitions();
|
| -}
|
| +
|
| CBC_QRDetectorResult* CBC_DataMatrixDetector::Detect(int32_t& e) {
|
| - CFX_PtrArray* cornerPoints = m_rectangleDetector->Detect(e);
|
| - BC_EXCEPTION_CHECK_ReturnValue(e, NULL);
|
| - CBC_ResultPoint* pointA = (CBC_ResultPoint*)(*cornerPoints)[0];
|
| - CBC_ResultPoint* pointB = (CBC_ResultPoint*)(*cornerPoints)[1];
|
| - CBC_ResultPoint* pointC = (CBC_ResultPoint*)(*cornerPoints)[2];
|
| - CBC_ResultPoint* pointD = (CBC_ResultPoint*)(*cornerPoints)[3];
|
| + CFX_ArrayTemplate<CBC_ResultPoint*>* cornerPoints =
|
| + m_rectangleDetector->Detect(e);
|
| + BC_EXCEPTION_CHECK_ReturnValue(e, nullptr);
|
| + CBC_ResultPoint* pointA = (*cornerPoints)[0];
|
| + CBC_ResultPoint* pointB = (*cornerPoints)[1];
|
| + CBC_ResultPoint* pointC = (*cornerPoints)[2];
|
| + CBC_ResultPoint* pointD = (*cornerPoints)[3];
|
| delete cornerPoints;
|
| - cornerPoints = NULL;
|
| - CFX_PtrArray transitions;
|
| +
|
| + CFX_ArrayTemplate<CBC_ResultPointsAndTransitions*> transitions;
|
| transitions.Add(TransitionsBetween(pointA, pointB));
|
| transitions.Add(TransitionsBetween(pointA, pointC));
|
| transitions.Add(TransitionsBetween(pointB, pointD));
|
| transitions.Add(TransitionsBetween(pointC, pointD));
|
| - BC_FX_PtrArray_Sort(transitions, &ResultPointsAndTransitionsComparator);
|
| - delete ((CBC_ResultPointsAndTransitions*)transitions[2]);
|
| - delete ((CBC_ResultPointsAndTransitions*)transitions[3]);
|
| - CBC_ResultPointsAndTransitions* lSideOne =
|
| - (CBC_ResultPointsAndTransitions*)transitions[0];
|
| - CBC_ResultPointsAndTransitions* lSideTwo =
|
| - (CBC_ResultPointsAndTransitions*)transitions[1];
|
| + std::sort(transitions.GetData(),
|
| + transitions.GetData() + transitions.GetSize(),
|
| + [](const CBC_ResultPointsAndTransitions* a,
|
| + const CBC_ResultPointsAndTransitions* b) {
|
| + return a->GetTransitions() < b->GetTransitions();
|
| + });
|
| + delete transitions[2];
|
| + delete transitions[3];
|
| +
|
| + CBC_ResultPointsAndTransitions* lSideOne = transitions[0];
|
| + CBC_ResultPointsAndTransitions* lSideTwo = transitions[1];
|
| CFX_MapPtrTemplate<CBC_ResultPoint*, int32_t> pointCount;
|
| Increment(pointCount, lSideOne->GetFrom());
|
| Increment(pointCount, lSideOne->GetTo());
|
| Increment(pointCount, lSideTwo->GetFrom());
|
| Increment(pointCount, lSideTwo->GetTo());
|
| - delete ((CBC_ResultPointsAndTransitions*)transitions[1]);
|
| - delete ((CBC_ResultPointsAndTransitions*)transitions[0]);
|
| + delete transitions[1];
|
| + delete transitions[0];
|
| transitions.RemoveAll();
|
| - CBC_ResultPoint* maybeTopLeft = NULL;
|
| - CBC_ResultPoint* bottomLeft = NULL;
|
| - CBC_ResultPoint* maybeBottomRight = NULL;
|
| + CBC_ResultPoint* maybeTopLeft = nullptr;
|
| + CBC_ResultPoint* bottomLeft = nullptr;
|
| + CBC_ResultPoint* maybeBottomRight = nullptr;
|
| FX_POSITION itBegin = pointCount.GetStartPosition();
|
| while (itBegin) {
|
| CBC_ResultPoint* key = 0;
|
| @@ -88,31 +90,31 @@ CBC_QRDetectorResult* CBC_DataMatrixDetector::Detect(int32_t& e) {
|
| if (value == 2) {
|
| bottomLeft = key;
|
| } else {
|
| - if (maybeBottomRight == NULL) {
|
| - maybeBottomRight = key;
|
| - } else {
|
| + if (maybeBottomRight) {
|
| maybeTopLeft = key;
|
| + } else {
|
| + maybeBottomRight = key;
|
| }
|
| }
|
| }
|
| - if (maybeTopLeft == NULL || bottomLeft == NULL || maybeBottomRight == NULL) {
|
| + if (!maybeTopLeft || !bottomLeft || !maybeBottomRight) {
|
| delete pointA;
|
| delete pointB;
|
| delete pointC;
|
| delete pointD;
|
| e = BCExceptionNotFound;
|
| - return NULL;
|
| + return nullptr;
|
| }
|
| - CFX_PtrArray corners;
|
| + CFX_ArrayTemplate<CBC_ResultPoint*> corners;
|
| corners.SetSize(3);
|
| corners[0] = maybeTopLeft;
|
| corners[1] = bottomLeft;
|
| corners[2] = maybeBottomRight;
|
| OrderBestPatterns(&corners);
|
| - CBC_ResultPoint* bottomRight = (CBC_ResultPoint*)corners[0];
|
| - bottomLeft = (CBC_ResultPoint*)corners[1];
|
| - CBC_ResultPoint* topLeft = (CBC_ResultPoint*)corners[2];
|
| - CBC_ResultPoint* topRight = NULL;
|
| + CBC_ResultPoint* bottomRight = corners[0];
|
| + bottomLeft = corners[1];
|
| + CBC_ResultPoint* topLeft = corners[2];
|
| + CBC_ResultPoint* topRight = nullptr;
|
| int32_t value;
|
| if (!pointCount.Lookup(pointA, value)) {
|
| topRight = pointA;
|
| @@ -144,11 +146,11 @@ CBC_QRDetectorResult* CBC_DataMatrixDetector::Detect(int32_t& e) {
|
| correctedTopRight.reset(
|
| CorrectTopRightRectangular(bottomLeft, bottomRight, topLeft, topRight,
|
| dimensionTop, dimensionRight));
|
| - if (correctedTopRight.get() == NULL) {
|
| + if (!correctedTopRight.get()) {
|
| correctedTopRight.reset(topRight);
|
| } else {
|
| delete topRight;
|
| - topRight = NULL;
|
| + topRight = nullptr;
|
| }
|
| dimensionTop = std::unique_ptr<CBC_ResultPointsAndTransitions>(
|
| TransitionsBetween(topLeft, correctedTopRight.get()))
|
| @@ -166,16 +168,16 @@ CBC_QRDetectorResult* CBC_DataMatrixDetector::Detect(int32_t& e) {
|
| bits.reset(SampleGrid(m_image, topLeft, bottomLeft, bottomRight,
|
| correctedTopRight.get(), dimensionTop, dimensionRight,
|
| e));
|
| - BC_EXCEPTION_CHECK_ReturnValue(e, NULL);
|
| + BC_EXCEPTION_CHECK_ReturnValue(e, nullptr);
|
| } else {
|
| int32_t dimension = std::min(dimensionRight, dimensionTop);
|
| correctedTopRight.reset(
|
| CorrectTopRight(bottomLeft, bottomRight, topLeft, topRight, dimension));
|
| - if (correctedTopRight.get() == NULL) {
|
| + if (!correctedTopRight.get()) {
|
| correctedTopRight.reset(topRight);
|
| } else {
|
| delete topRight;
|
| - topRight = NULL;
|
| + topRight = nullptr;
|
| }
|
| int32_t dimensionCorrected =
|
| std::max(std::unique_ptr<CBC_ResultPointsAndTransitions>(
|
| @@ -191,7 +193,7 @@ CBC_QRDetectorResult* CBC_DataMatrixDetector::Detect(int32_t& e) {
|
| bits.reset(SampleGrid(m_image, topLeft, bottomLeft, bottomRight,
|
| correctedTopRight.get(), dimensionCorrected,
|
| dimensionCorrected, e));
|
| - BC_EXCEPTION_CHECK_ReturnValue(e, NULL);
|
| + BC_EXCEPTION_CHECK_ReturnValue(e, nullptr);
|
| }
|
| CFX_PtrArray* result = new CFX_PtrArray;
|
| result->SetSize(4);
|
| @@ -224,7 +226,7 @@ CBC_ResultPoint* CBC_DataMatrixDetector::CorrectTopRightRectangular(
|
| if (IsValid(c2.get())) {
|
| return c2.release();
|
| }
|
| - return NULL;
|
| + return nullptr;
|
| } else if (!IsValid(c2.get())) {
|
| return c1.release();
|
| }
|
| @@ -271,7 +273,7 @@ CBC_ResultPoint* CBC_DataMatrixDetector::CorrectTopRight(
|
| if (IsValid(c2.get())) {
|
| return c2.release();
|
| }
|
| - return NULL;
|
| + return nullptr;
|
| } else if (!IsValid(c2.get())) {
|
| return c1.release();
|
| }
|
| @@ -328,7 +330,7 @@ CBC_CommonBitMatrix* CBC_DataMatrixDetector::SampleGrid(
|
| topLeft->GetX(), topLeft->GetY(), topRight->GetX(), topRight->GetY(),
|
| bottomRight->GetX(), bottomRight->GetY(), bottomLeft->GetX(),
|
| bottomLeft->GetY(), e);
|
| - BC_EXCEPTION_CHECK_ReturnValue(e, NULL);
|
| + BC_EXCEPTION_CHECK_ReturnValue(e, nullptr);
|
| return cbm;
|
| }
|
| CBC_ResultPointsAndTransitions* CBC_DataMatrixDetector::TransitionsBetween(
|
| @@ -371,26 +373,24 @@ CBC_ResultPointsAndTransitions* CBC_DataMatrixDetector::TransitionsBetween(
|
| }
|
| return new CBC_ResultPointsAndTransitions(from, to, transitions);
|
| }
|
| -void CBC_DataMatrixDetector::OrderBestPatterns(CFX_PtrArray* patterns) {
|
| - FX_FLOAT abDistance = (FX_FLOAT)Distance((CBC_ResultPoint*)(*patterns)[0],
|
| - (CBC_ResultPoint*)(*patterns)[1]);
|
| - FX_FLOAT bcDistance = (FX_FLOAT)Distance((CBC_ResultPoint*)(*patterns)[1],
|
| - (CBC_ResultPoint*)(*patterns)[2]);
|
| - FX_FLOAT acDistance = (FX_FLOAT)Distance((CBC_ResultPoint*)(*patterns)[0],
|
| - (CBC_ResultPoint*)(*patterns)[2]);
|
| +void CBC_DataMatrixDetector::OrderBestPatterns(
|
| + CFX_ArrayTemplate<CBC_ResultPoint*>* patterns) {
|
| + FX_FLOAT abDistance = (FX_FLOAT)Distance((*patterns)[0], (*patterns)[1]);
|
| + FX_FLOAT bcDistance = (FX_FLOAT)Distance((*patterns)[1], (*patterns)[2]);
|
| + FX_FLOAT acDistance = (FX_FLOAT)Distance((*patterns)[0], (*patterns)[2]);
|
| CBC_ResultPoint *topLeft, *topRight, *bottomLeft;
|
| if (bcDistance >= abDistance && bcDistance >= acDistance) {
|
| - topLeft = (CBC_ResultPoint*)(*patterns)[0];
|
| - topRight = (CBC_ResultPoint*)(*patterns)[1];
|
| - bottomLeft = (CBC_ResultPoint*)(*patterns)[2];
|
| + topLeft = (*patterns)[0];
|
| + topRight = (*patterns)[1];
|
| + bottomLeft = (*patterns)[2];
|
| } else if (acDistance >= bcDistance && acDistance >= abDistance) {
|
| - topLeft = (CBC_ResultPoint*)(*patterns)[1];
|
| - topRight = (CBC_ResultPoint*)(*patterns)[0];
|
| - bottomLeft = (CBC_ResultPoint*)(*patterns)[2];
|
| + topLeft = (*patterns)[1];
|
| + topRight = (*patterns)[0];
|
| + bottomLeft = (*patterns)[2];
|
| } else {
|
| - topLeft = (CBC_ResultPoint*)(*patterns)[2];
|
| - topRight = (CBC_ResultPoint*)(*patterns)[0];
|
| - bottomLeft = (CBC_ResultPoint*)(*patterns)[1];
|
| + topLeft = (*patterns)[2];
|
| + topRight = (*patterns)[0];
|
| + bottomLeft = (*patterns)[1];
|
| }
|
| if ((bottomLeft->GetY() - topLeft->GetY()) *
|
| (topRight->GetX() - topLeft->GetX()) <
|
|
|