Change CXFA_ContentLayoutItem::GetIndex() to return size_t.

Update callers to work with size_t. Also remove GetCount(), which is
unused.

Change-Id: I6c2612b327fe8b5278360b0783bab84b126cd37c
Reviewed-on: https://pdfium-review.googlesource.com/c/49714
Commit-Queue: Lei Zhang <thestig@chromium.org>
Reviewed-by: Tom Sepez <tsepez@chromium.org>
diff --git a/xfa/fxfa/cxfa_textlayout.cpp b/xfa/fxfa/cxfa_textlayout.cpp
index 037a2cf..610da73 100644
--- a/xfa/fxfa/cxfa_textlayout.cpp
+++ b/xfa/fxfa/cxfa_textlayout.cpp
@@ -321,11 +321,9 @@
   return fTextHeight;
 }
 
-float CXFA_TextLayout::DoSplitLayout(int32_t iBlockIndex,
+float CXFA_TextLayout::DoSplitLayout(size_t szBlockIndex,
                                      float fCalcHeight,
                                      float fTextHeight) {
-  ASSERT(iBlockIndex >= 0);
-
   if (!m_pLoader)
     return fCalcHeight;
 
@@ -334,7 +332,6 @@
   if (fCalcHeight < 0)
     return fCalcHeight;
 
-  size_t szBlockIndex = static_cast<size_t>(iBlockIndex);
   m_bHasBlock = true;
   if (m_Blocks.empty() && m_pLoader->fHeight > 0) {
     float fHeight = fTextHeight - GetLayoutHeight();
@@ -535,7 +532,7 @@
   return true;
 }
 
-void CXFA_TextLayout::ItemBlocks(const CFX_RectF& rtText, int32_t iBlockIndex) {
+void CXFA_TextLayout::ItemBlocks(const CFX_RectF& rtText, size_t szBlockIndex) {
   if (!m_pLoader)
     return;
 
@@ -544,12 +541,9 @@
 
   float fLinePos = m_pLoader->fStartLineOffset;
   size_t szLineIndex = 0;
-  if (iBlockIndex > 0) {
-    // TODO(thestig): Check this code for correctness, and convert to size_t.
-    int32_t iBlockHeightCount =
-        pdfium::CollectionSize<int32_t>(m_pLoader->blockHeights);
-    if (iBlockIndex <= iBlockHeightCount) {
-      for (int32_t i = 0; i < iBlockIndex; i++)
+  if (szBlockIndex > 0) {
+    if (szBlockIndex <= m_pLoader->blockHeights.size()) {
+      for (size_t i = 0; i < szBlockIndex; ++i)
         fLinePos -= m_pLoader->blockHeights[i].fHeight;
     } else {
       fLinePos = 0;
@@ -573,7 +567,7 @@
 bool CXFA_TextLayout::DrawString(CFX_RenderDevice* pFxDevice,
                                  const CFX_Matrix& tmDoc2Device,
                                  const CFX_RectF& rtClip,
-                                 int32_t iBlock) {
+                                 size_t szBlockIndex) {
   if (!pFxDevice)
     return false;
 
@@ -592,9 +586,9 @@
   int32_t iLineStart = 0;
   int32_t iPieceLines = pdfium::CollectionSize<int32_t>(m_pieceLines);
   if (!m_Blocks.empty()) {
-    if (iBlock < pdfium::CollectionSize<int32_t>(m_Blocks)) {
-      iLineStart = m_Blocks[iBlock].szIndex;
-      iPieceLines = m_Blocks[iBlock].szLength;
+    if (szBlockIndex < m_Blocks.size()) {
+      iLineStart = m_Blocks[szBlockIndex].szIndex;
+      iPieceLines = m_Blocks[szBlockIndex].szLength;
     } else {
       iPieceLines = 0;
     }
diff --git a/xfa/fxfa/cxfa_textlayout.h b/xfa/fxfa/cxfa_textlayout.h
index 3a3f658..a55b757 100644
--- a/xfa/fxfa/cxfa_textlayout.h
+++ b/xfa/fxfa/cxfa_textlayout.h
@@ -33,23 +33,23 @@
 
 class CXFA_TextLayout {
  public:
-  explicit CXFA_TextLayout(CXFA_FFDoc* doc, CXFA_TextProvider* pTextProvider);
+  CXFA_TextLayout(CXFA_FFDoc* doc, CXFA_TextProvider* pTextProvider);
   ~CXFA_TextLayout();
 
   float GetLayoutHeight();
   float StartLayout(float fWidth);
   float DoLayout(float fTextHeight);
-  float DoSplitLayout(int32_t iBlockIndex,
+  float DoSplitLayout(size_t szBlockIndex,
                       float fCalcHeight,
                       float fTextHeight);
   float Layout(const CFX_SizeF& size);
 
   CFX_SizeF CalcSize(const CFX_SizeF& minSize, const CFX_SizeF& maxSize);
-  void ItemBlocks(const CFX_RectF& rtText, int32_t iBlockIndex);
+  void ItemBlocks(const CFX_RectF& rtText, size_t szBlockIndex);
   bool DrawString(CFX_RenderDevice* pFxDevice,
                   const CFX_Matrix& tmDoc2Device,
                   const CFX_RectF& rtClip,
-                  int32_t iBlock);
+                  size_t szBlockIndex);
   bool IsLoaded() const { return !m_pieceLines.empty(); }
   void Unload();
 
diff --git a/xfa/fxfa/parser/cxfa_contentlayoutitem.cpp b/xfa/fxfa/parser/cxfa_contentlayoutitem.cpp
index 79b3cb7..58e65e0 100644
--- a/xfa/fxfa/parser/cxfa_contentlayoutitem.cpp
+++ b/xfa/fxfa/parser/cxfa_contentlayoutitem.cpp
@@ -97,22 +97,12 @@
   return CFX_RectF(sPos, sSize);
 }
 
-int32_t CXFA_ContentLayoutItem::GetIndex() const {
-  int32_t iIndex = 0;
+size_t CXFA_ContentLayoutItem::GetIndex() const {
+  size_t szIndex = 0;
   const CXFA_ContentLayoutItem* pCurNode = this;
   while (auto* pPrev = pCurNode->GetPrev()) {
     pCurNode = pPrev;
-    ++iIndex;
+    ++szIndex;
   }
-  return iIndex;
-}
-
-int32_t CXFA_ContentLayoutItem::GetCount() const {
-  int32_t iCount = GetIndex() + 1;
-  const CXFA_ContentLayoutItem* pCurNode = this;
-  while (auto* pNext = pCurNode->GetNext()) {
-    pCurNode = pNext;
-    iCount++;
-  }
-  return iCount;
+  return szIndex;
 }
diff --git a/xfa/fxfa/parser/cxfa_contentlayoutitem.h b/xfa/fxfa/parser/cxfa_contentlayoutitem.h
index 7313a1e..b002e88 100644
--- a/xfa/fxfa/parser/cxfa_contentlayoutitem.h
+++ b/xfa/fxfa/parser/cxfa_contentlayoutitem.h
@@ -26,8 +26,7 @@
   void InsertAfter(CXFA_ContentLayoutItem* pNext);
 
   CFX_RectF GetRect(bool bRelative) const;
-  int32_t GetIndex() const;
-  int32_t GetCount() const;
+  size_t GetIndex() const;
 
   CFX_PointF m_sPos;
   CFX_SizeF m_sSize;
diff --git a/xfa/fxfa/parser/cxfa_node.cpp b/xfa/fxfa/parser/cxfa_node.cpp
index c32fd48..08fe391 100644
--- a/xfa/fxfa/parser/cxfa_node.cpp
+++ b/xfa/fxfa/parser/cxfa_node.cpp
@@ -3438,7 +3438,7 @@
 }
 
 bool CXFA_Node::FindSplitPos(CXFA_FFDocView* docView,
-                             int32_t iBlockIndex,
+                             size_t szBlockIndex,
                              float* pCalcHeight) {
   if (GetFFWidgetType() == XFA_FFWidgetType::kSubform)
     return false;
@@ -3456,7 +3456,7 @@
 
   float fTopInset = 0;
   float fBottomInset = 0;
-  if (iBlockIndex == 0) {
+  if (szBlockIndex == 0) {
     CXFA_Margin* margin = GetMarginIfExists();
     if (margin) {
       fTopInset = margin->GetTopInset();
@@ -3469,16 +3469,16 @@
   }
   if (GetFFWidgetType() == XFA_FFWidgetType::kText) {
     float fHeight = *pCalcHeight;
-    if (iBlockIndex == 0) {
+    if (szBlockIndex == 0) {
       *pCalcHeight -= fTopInset;
       *pCalcHeight = std::max(*pCalcHeight, 0.0f);
     }
     CXFA_TextLayout* pTextLayout =
         m_pLayoutData->AsTextLayoutData()->GetTextLayout();
     *pCalcHeight = pTextLayout->DoSplitLayout(
-        iBlockIndex, *pCalcHeight, m_pLayoutData->m_fWidgetHeight - fTopInset);
+        szBlockIndex, *pCalcHeight, m_pLayoutData->m_fWidgetHeight - fTopInset);
     if (*pCalcHeight != 0) {
-      if (iBlockIndex == 0)
+      if (szBlockIndex == 0)
         *pCalcHeight += fTopInset;
       if (fabs(fHeight - *pCalcHeight) < kXFAWidgetPrecision)
         return false;
@@ -3488,7 +3488,7 @@
 
   XFA_AttributeValue iCapPlacement = XFA_AttributeValue::Unknown;
   float fCapReserve = 0;
-  if (iBlockIndex == 0) {
+  if (szBlockIndex == 0) {
     CXFA_Caption* caption = GetCaptionIfExists();
     if (caption && !caption->IsHidden()) {
       iCapPlacement = caption->GetPlacementType();
@@ -3522,11 +3522,11 @@
     iLinesCount = pFieldData->m_pTextOut->GetTotalLines();
   }
   std::vector<float>* pFieldArray = &pFieldData->m_FieldSplitArray;
-  int32_t iFieldSplitCount = pdfium::CollectionSize<int32_t>(*pFieldArray);
-  if (iFieldSplitCount < (iBlockIndex * 3))
+  size_t szFieldSplitCount = pFieldArray->size();
+  if (szFieldSplitCount < szBlockIndex * 3)
     return false;
 
-  for (int32_t i = 0; i < iBlockIndex * 3; i += 3) {
+  for (size_t i = 0; i < szBlockIndex * 3; i += 3) {
     iLinesCount -= (int32_t)(*pFieldArray)[i + 1];
     fHeight -= (*pFieldArray)[i + 2];
   }
@@ -3538,7 +3538,7 @@
   float fTextHeight = iLinesCount * fLineHeight - fLineHeight + fFontSize;
   float fSpaceAbove = 0;
   float fStartOffset = 0;
-  if (fHeight > 0.1f && iBlockIndex == 0) {
+  if (fHeight > 0.1f && szBlockIndex == 0) {
     fStartOffset = fTopInset;
     fHeight -= (fTopInset + fBottomInset);
     CXFA_Para* para = GetParaIfExists();
@@ -3564,12 +3564,13 @@
     if (fStartOffset < 0.1f)
       fStartOffset = 0;
   }
-  for (int32_t i = iBlockIndex - 1; iBlockIndex > 0 && i < iBlockIndex; i++) {
+  if (szBlockIndex > 0) {
+    size_t i = szBlockIndex - 1;
     fStartOffset = (*pFieldArray)[i * 3] - (*pFieldArray)[i * 3 + 2];
     if (fStartOffset < 0.1f)
       fStartOffset = 0;
   }
-  if (iFieldSplitCount / 3 == (iBlockIndex + 1))
+  if (szFieldSplitCount / 3 == (szBlockIndex + 1))
     (*pFieldArray)[0] = fStartOffset;
   else
     pFieldArray->push_back(fStartOffset);
@@ -3602,9 +3603,9 @@
       return true;
     }
     if (fStartOffset + kXFAWidgetPrecision >= *pCalcHeight) {
-      if (iFieldSplitCount / 3 == (iBlockIndex + 1)) {
-        (*pFieldArray)[iBlockIndex * 3 + 1] = 0;
-        (*pFieldArray)[iBlockIndex * 3 + 2] = *pCalcHeight;
+      if (szFieldSplitCount / 3 == (szBlockIndex + 1)) {
+        (*pFieldArray)[szBlockIndex * 3 + 1] = 0;
+        (*pFieldArray)[szBlockIndex * 3 + 2] = *pCalcHeight;
       } else {
         pFieldArray->push_back(0);
         pFieldArray->push_back(*pCalcHeight);
@@ -3613,9 +3614,9 @@
     }
     if (*pCalcHeight - fStartOffset < fLineHeight) {
       *pCalcHeight = fStartOffset;
-      if (iFieldSplitCount / 3 == (iBlockIndex + 1)) {
-        (*pFieldArray)[iBlockIndex * 3 + 1] = 0;
-        (*pFieldArray)[iBlockIndex * 3 + 2] = *pCalcHeight;
+      if (szFieldSplitCount / 3 == (szBlockIndex + 1)) {
+        (*pFieldArray)[szBlockIndex * 3 + 1] = 0;
+        (*pFieldArray)[szBlockIndex * 3 + 2] = *pCalcHeight;
       } else {
         pFieldArray->push_back(0);
         pFieldArray->push_back(*pCalcHeight);
@@ -3628,9 +3629,9 @@
         (int32_t)((fTextNum + (fLineHeight - fFontSize)) / fLineHeight);
     if (iLineNum >= iLinesCount) {
       if (*pCalcHeight - fStartOffset - fTextHeight >= fFontSize) {
-        if (iFieldSplitCount / 3 == (iBlockIndex + 1)) {
-          (*pFieldArray)[iBlockIndex * 3 + 1] = iLinesCount;
-          (*pFieldArray)[iBlockIndex * 3 + 2] = *pCalcHeight;
+        if (szFieldSplitCount / 3 == (szBlockIndex + 1)) {
+          (*pFieldArray)[szBlockIndex * 3 + 1] = iLinesCount;
+          (*pFieldArray)[szBlockIndex * 3 + 2] = *pCalcHeight;
         } else {
           pFieldArray->push_back(iLinesCount);
           pFieldArray->push_back(*pCalcHeight);
@@ -3649,9 +3650,9 @@
     }
     if (iLineNum > 0) {
       float fSplitHeight = iLineNum * fLineHeight + fCapReserve + fStartOffset;
-      if (iFieldSplitCount / 3 == (iBlockIndex + 1)) {
-        (*pFieldArray)[iBlockIndex * 3 + 1] = iLineNum;
-        (*pFieldArray)[iBlockIndex * 3 + 2] = fSplitHeight;
+      if (szFieldSplitCount / 3 == (szBlockIndex + 1)) {
+        (*pFieldArray)[szBlockIndex * 3 + 1] = iLineNum;
+        (*pFieldArray)[szBlockIndex * 3 + 2] = fSplitHeight;
       } else {
         pFieldArray->push_back(iLineNum);
         pFieldArray->push_back(fSplitHeight);
diff --git a/xfa/fxfa/parser/cxfa_node.h b/xfa/fxfa/parser/cxfa_node.h
index 0bd1bde..941d5fc 100644
--- a/xfa/fxfa/parser/cxfa_node.h
+++ b/xfa/fxfa/parser/cxfa_node.h
@@ -283,7 +283,7 @@
                          float* pCalcWidth,
                          float* pCalcHeight);
   bool FindSplitPos(CXFA_FFDocView* docView,
-                    int32_t iBlockIndex,
+                    size_t szBlockIndex,
                     float* pCalcHeight);
 
   bool LoadCaption(CXFA_FFDoc* doc);