Split SetDeferredRun() into SetDeferredRunClass()/SetDeferredRunLevel().

Standalone refactoring before changing CFX_Char::m_iBidiClass to
an enum. Use simpler backwards iteration pattern with unsigned types
while we're at it.

Change-Id: Id547f521b65285a35f04cb9b4f1dbd939f75fad9
Reviewed-on: https://pdfium-review.googlesource.com/c/48171
Reviewed-by: Lei Zhang <thestig@chromium.org>
Commit-Queue: Tom Sepez <tsepez@chromium.org>
diff --git a/core/fxcrt/fx_bidi.cpp b/core/fxcrt/fx_bidi.cpp
index a8c0701..88e561c 100644
--- a/core/fxcrt/fx_bidi.cpp
+++ b/core/fxcrt/fx_bidi.cpp
@@ -243,24 +243,28 @@
   std::reverse(chars->begin() + iStart, chars->begin() + iStart + iCount);
 }
 
-void SetDeferredRun(std::vector<CFX_Char>* chars,
-                    bool bClass,
-                    size_t iStart,
-                    size_t iCount,
-                    int32_t iValue) {
+void SetDeferredRunClass(std::vector<CFX_Char>* chars,
+                         size_t iStart,
+                         size_t iCount,
+                         int32_t iValue) {
   ASSERT(iStart <= chars->size());
   ASSERT(iStart >= iCount);
 
   size_t iLast = iStart - iCount;
-  for (size_t i = iStart - 1; i >= iLast; --i) {
-    if (bClass)
-      (*chars)[i].m_iBidiClass = static_cast<int16_t>(iValue);
-    else
-      (*chars)[i].m_iBidiLevel = static_cast<int16_t>(iValue);
+  for (size_t i = iStart; i > iLast; --i)
+    (*chars)[i - 1].m_iBidiClass = static_cast<int16_t>(iValue);
+}
 
-    if (i == 0)
-      break;
-  }
+void SetDeferredRunLevel(std::vector<CFX_Char>* chars,
+                         size_t iStart,
+                         size_t iCount,
+                         int32_t iValue) {
+  ASSERT(iStart <= chars->size());
+  ASSERT(iStart >= iCount);
+
+  size_t iLast = iStart - iCount;
+  for (size_t i = iStart; i > iLast; --i)
+    (*chars)[i - 1].m_iBidiLevel = static_cast<int16_t>(iValue);
 }
 
 void Classify(std::vector<CFX_Char>* chars, size_t iCount, bool bWS) {
@@ -334,7 +338,7 @@
     int32_t iAction = gc_FX_BidiWeakActions[iState][iClsCur];
     iClsRun = GetDeferredType(iAction);
     if (iClsRun != FX_BWAXX && iNum > 0) {
-      SetDeferredRun(chars, true, i, iNum, iClsRun);
+      SetDeferredRunClass(chars, i, iNum, iClsRun);
       iNum = 0;
     }
     iClsNew = GetResolvedType(iAction);
@@ -351,7 +355,7 @@
   iClsCur = static_cast<int32_t>(Direction(0));
   iClsRun = GetDeferredType(gc_FX_BidiWeakActions[iState][iClsCur]);
   if (iClsRun != FX_BWAXX)
-    SetDeferredRun(chars, true, i, iNum, iClsRun);
+    SetDeferredRunClass(chars, i, iNum, iClsRun);
 }
 
 void ResolveNeutrals(std::vector<CFX_Char>* chars, size_t iCount) {
@@ -382,7 +386,7 @@
     iAction = gc_FX_BidiNeutralActions[iState][iClsCur];
     iClsRun = GetDeferredNeutrals(iAction, iLevel);
     if (iClsRun != static_cast<int32_t>(FX_BIDICLASS::kN) && iNum > 0) {
-      SetDeferredRun(chars, true, i, iNum, iClsRun);
+      SetDeferredRunClass(chars, i, iNum, iClsRun);
       iNum = 0;
     }
 
@@ -402,7 +406,7 @@
   iClsRun =
       GetDeferredNeutrals(gc_FX_BidiNeutralActions[iState][iClsCur], iLevel);
   if (iClsRun != static_cast<int32_t>(FX_BIDICLASS::kN))
-    SetDeferredRun(chars, true, i, iNum, iClsRun);
+    SetDeferredRunClass(chars, i, iNum, iClsRun);
 }
 
 void ResolveImplicit(std::vector<CFX_Char>* chars, size_t iCount) {
@@ -444,7 +448,7 @@
       case FX_BIDICLASS::kS:
       case FX_BIDICLASS::kB:
         if (iNum > 0)
-          SetDeferredRun(chars, false, i, iNum, 0);
+          SetDeferredRunLevel(chars, i, iNum, 0);
 
         (*chars)[i].m_iBidiLevel = 0;
         iNum = 0;
@@ -456,7 +460,7 @@
     iLevel = (*chars)[i].m_iBidiLevel;
   }
   if (iNum > 0)
-    SetDeferredRun(chars, false, i, iNum, 0);
+    SetDeferredRunLevel(chars, i, iNum, 0);
 }
 
 size_t ReorderLevel(std::vector<CFX_Char>* chars,