Get rid of "exceptions" in CBC_QRCoderMaskUtil::GetDataMaskBit().

It can never occur with the existing caller. Clean up
CBC_QRCoderMaskUtil along the way.

Change-Id: Iad7fcef8de6b0a866030d03a52510653930b7945
Reviewed-on: https://pdfium-review.googlesource.com/c/45769
Commit-Queue: Lei Zhang <thestig@chromium.org>
Reviewed-by: Tom Sepez <tsepez@chromium.org>
diff --git a/fxbarcode/qrcode/BC_QRCoderMaskUtil.cpp b/fxbarcode/qrcode/BC_QRCoderMaskUtil.cpp
index 582da85..cab6b9e 100644
--- a/fxbarcode/qrcode/BC_QRCoderMaskUtil.cpp
+++ b/fxbarcode/qrcode/BC_QRCoderMaskUtil.cpp
@@ -26,14 +26,48 @@
 #include "fxbarcode/qrcode/BC_QRCoderMaskUtil.h"
 #include "fxbarcode/utils.h"
 
-CBC_QRCoderMaskUtil::CBC_QRCoderMaskUtil() {}
-CBC_QRCoderMaskUtil::~CBC_QRCoderMaskUtil() {}
+namespace {
+
+int32_t ApplyMaskPenaltyRule1Internal(CBC_CommonByteMatrix* matrix,
+                                      bool isHorizontal) {
+  int32_t penalty = 0;
+  int32_t numSameBitCells = 0;
+  int32_t prevBit = -1;
+  int32_t width = matrix->GetWidth();
+  int32_t height = matrix->GetHeight();
+  int32_t iLimit = isHorizontal ? height : width;
+  int32_t jLimit = isHorizontal ? width : height;
+  pdfium::span<const uint8_t> array = matrix->GetArray();
+  for (int32_t i = 0; i < iLimit; ++i) {
+    for (int32_t j = 0; j < jLimit; ++j) {
+      int32_t bit = isHorizontal ? array[i * width + j] : array[j * width + i];
+      if (bit == prevBit) {
+        numSameBitCells += 1;
+        if (numSameBitCells == 5) {
+          penalty += 3;
+        } else if (numSameBitCells > 5) {
+          penalty += 1;
+        }
+      } else {
+        numSameBitCells = 1;
+        prevBit = bit;
+      }
+    }
+    numSameBitCells = 0;
+  }
+  return penalty;
+}
+
+}  // namespace
+
+// static
 int32_t CBC_QRCoderMaskUtil::ApplyMaskPenaltyRule1(
     CBC_CommonByteMatrix* matrix) {
   return ApplyMaskPenaltyRule1Internal(matrix, true) +
          ApplyMaskPenaltyRule1Internal(matrix, false);
 }
 
+// static
 int32_t CBC_QRCoderMaskUtil::ApplyMaskPenaltyRule2(
     CBC_CommonByteMatrix* matrix) {
   int32_t penalty = 0;
@@ -53,6 +87,7 @@
   return 3 * penalty;
 }
 
+// static
 int32_t CBC_QRCoderMaskUtil::ApplyMaskPenaltyRule3(
     CBC_CommonByteMatrix* matrix) {
   int32_t penalty = 0;
@@ -105,6 +140,8 @@
   }
   return penalty;
 }
+
+// static
 int32_t CBC_QRCoderMaskUtil::ApplyMaskPenaltyRule4(
     CBC_CommonByteMatrix* matrix) {
   int32_t numDarkCells = 0;
@@ -118,17 +155,16 @@
     }
   }
   int32_t numTotalCells = matrix->GetHeight() * matrix->GetWidth();
-  double darkRatio = (double)numDarkCells / numTotalCells;
-  return abs((int32_t)(darkRatio * 100 - 50) / 5) * 5 * 10;
+  double darkRatio = static_cast<double>(numDarkCells) / numTotalCells;
+  return abs(static_cast<int32_t>(darkRatio * 100 - 50) / 5) * 5 * 10;
 }
+
+// static
 bool CBC_QRCoderMaskUtil::GetDataMaskBit(int32_t maskPattern,
                                          int32_t x,
-                                         int32_t y,
-                                         int32_t& e) {
-  if (!CBC_QRCoder::IsValidMaskPattern(maskPattern)) {
-    e = (BCExceptionInvalidateMaskPattern);
-    return false;
-  }
+                                         int32_t y) {
+  ASSERT(CBC_QRCoder::IsValidMaskPattern(maskPattern));
+
   int32_t intermediate = 0, temp = 0;
   switch (maskPattern) {
     case 0:
@@ -158,40 +194,9 @@
       temp = y * x;
       intermediate = (((temp % 3) + ((y + x) & 0x1)) & 0x1);
       break;
-    default: {
-      e = BCExceptionInvalidateMaskPattern;
+    default:
+      NOTREACHED();
       return false;
-    }
   }
   return intermediate == 0;
 }
-int32_t CBC_QRCoderMaskUtil::ApplyMaskPenaltyRule1Internal(
-    CBC_CommonByteMatrix* matrix,
-    bool isHorizontal) {
-  int32_t penalty = 0;
-  int32_t numSameBitCells = 0;
-  int32_t prevBit = -1;
-  int32_t width = matrix->GetWidth();
-  int32_t height = matrix->GetHeight();
-  int32_t iLimit = isHorizontal ? height : width;
-  int32_t jLimit = isHorizontal ? width : height;
-  pdfium::span<const uint8_t> array = matrix->GetArray();
-  for (int32_t i = 0; i < iLimit; ++i) {
-    for (int32_t j = 0; j < jLimit; ++j) {
-      int32_t bit = isHorizontal ? array[i * width + j] : array[j * width + i];
-      if (bit == prevBit) {
-        numSameBitCells += 1;
-        if (numSameBitCells == 5) {
-          penalty += 3;
-        } else if (numSameBitCells > 5) {
-          penalty += 1;
-        }
-      } else {
-        numSameBitCells = 1;
-        prevBit = bit;
-      }
-    }
-    numSameBitCells = 0;
-  }
-  return penalty;
-}
diff --git a/fxbarcode/qrcode/BC_QRCoderMaskUtil.h b/fxbarcode/qrcode/BC_QRCoderMaskUtil.h
index 63fccbb..6cbbe2f 100644
--- a/fxbarcode/qrcode/BC_QRCoderMaskUtil.h
+++ b/fxbarcode/qrcode/BC_QRCoderMaskUtil.h
@@ -6,22 +6,20 @@
 
 #ifndef FXBARCODE_QRCODE_BC_QRCODERMASKUTIL_H_
 #define FXBARCODE_QRCODE_BC_QRCODERMASKUTIL_H_
+
 class CBC_CommonByteMatrix;
+
 class CBC_QRCoderMaskUtil {
  public:
-  CBC_QRCoderMaskUtil();
-  virtual ~CBC_QRCoderMaskUtil();
-  static bool GetDataMaskBit(int32_t maskPattern,
-                             int32_t x,
-                             int32_t y,
-                             int32_t& e);
+  CBC_QRCoderMaskUtil() = delete;
+  ~CBC_QRCoderMaskUtil() = delete;
+
+  static bool GetDataMaskBit(int32_t maskPattern, int32_t x, int32_t y);
 
   static int32_t ApplyMaskPenaltyRule1(CBC_CommonByteMatrix* matrix);
   static int32_t ApplyMaskPenaltyRule2(CBC_CommonByteMatrix* matrix);
   static int32_t ApplyMaskPenaltyRule3(CBC_CommonByteMatrix* matrix);
   static int32_t ApplyMaskPenaltyRule4(CBC_CommonByteMatrix* matrix);
-  static int32_t ApplyMaskPenaltyRule1Internal(CBC_CommonByteMatrix* matrix,
-                                               bool isHorizontal);
 };
 
 #endif  // FXBARCODE_QRCODE_BC_QRCODERMASKUTIL_H_
diff --git a/fxbarcode/qrcode/BC_QRCoderMatrixUtil.cpp b/fxbarcode/qrcode/BC_QRCoderMatrixUtil.cpp
index 59d275f..a94a346 100644
--- a/fxbarcode/qrcode/BC_QRCoderMatrixUtil.cpp
+++ b/fxbarcode/qrcode/BC_QRCoderMatrixUtil.cpp
@@ -95,7 +95,6 @@
 bool EmbedDataBits(CBC_QRCoderBitVector* dataBits,
                    int32_t maskPattern,
                    CBC_CommonByteMatrix* matrix) {
-  int32_t e = BCExceptionNO;
   size_t szBitIndex = 0;
   int32_t direction = -1;
   int32_t x = matrix->GetWidth() - 1;
@@ -121,14 +120,9 @@
         } else {
           bit = 0;
         }
-        if (maskPattern != -1) {
-          bool bol = CBC_QRCoderMaskUtil::GetDataMaskBit(maskPattern, xx, y, e);
-          if (e != BCExceptionNO)
-            return false;
-          if (bol) {
-            bit ^= 0x01;
-          }
-        }
+        ASSERT(CBC_QRCoder::IsValidMaskPattern(maskPattern));
+        if (CBC_QRCoderMaskUtil::GetDataMaskBit(maskPattern, xx, y))
+          bit ^= 0x01;
         matrix->Set(xx, y, bit);
       }
       y += direction;
diff --git a/fxbarcode/utils.h b/fxbarcode/utils.h
index be45e3e..bb3bc1c 100644
--- a/fxbarcode/utils.h
+++ b/fxbarcode/utils.h
@@ -25,7 +25,6 @@
 #define BCExceptionNO 0
 #define BCExceptionIllegalArgument 16
 #define BCExceptionValueMustBeEither0or1 50
-#define BCExceptionInvalidateMaskPattern 68
 #define BCExceptionGeneric 107
 
 #endif  // FXBARCODE_UTILS_H_