Modernize parts of CPDFSDK_AnnotIterator

- Change some method parameters to use spans and pass by reference.
- Use range-based for-loops.
- Change enum TabOrder to an enum class.

Change-Id: I6c227449314918462d90886fa036b08d7f975231
Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/111951
Reviewed-by: Nigi <nigi@chromium.org>
Commit-Queue: Lei Zhang <thestig@chromium.org>
diff --git a/fpdfsdk/cpdfsdk_annotiterator.cpp b/fpdfsdk/cpdfsdk_annotiterator.cpp
index 58ec083..326624b 100644
--- a/fpdfsdk/cpdfsdk_annotiterator.cpp
+++ b/fpdfsdk/cpdfsdk_annotiterator.cpp
@@ -14,7 +14,9 @@
 #include "fpdfsdk/cpdfsdk_annot.h"
 #include "fpdfsdk/cpdfsdk_pageview.h"
 #include "fpdfsdk/cpdfsdk_widget.h"
+#include "third_party/base/containers/adapters.h"
 #include "third_party/base/containers/contains.h"
+#include "third_party/base/containers/span.h"
 
 namespace {
 
@@ -80,23 +82,25 @@
 }
 
 CFX_FloatRect CPDFSDK_AnnotIterator::AddToAnnotsList(
-    std::vector<UnownedPtr<CPDFSDK_Annot>>* sa,
+    std::vector<UnownedPtr<CPDFSDK_Annot>>& sa,
     size_t idx) {
-  CPDFSDK_Annot* pLeftTopAnnot = sa->at(idx);
+  CPDFSDK_Annot* pLeftTopAnnot = sa[idx];
   CFX_FloatRect rcLeftTop = GetAnnotRect(pLeftTopAnnot);
   m_Annots.emplace_back(pLeftTopAnnot);
-  sa->erase(sa->begin() + idx);
+  sa.erase(sa.begin() + idx);
   return rcLeftTop;
 }
 
 void CPDFSDK_AnnotIterator::AddSelectedToAnnots(
-    std::vector<UnownedPtr<CPDFSDK_Annot>>* sa,
-    std::vector<size_t>* aSelect) {
-  for (size_t i = 0; i < aSelect->size(); ++i)
-    m_Annots.emplace_back(sa->at(aSelect->at(i)));
+    std::vector<UnownedPtr<CPDFSDK_Annot>>& sa,
+    pdfium::span<const size_t> aSelect) {
+  for (size_t select_idx : aSelect) {
+    m_Annots.emplace_back(sa[select_idx]);
+  }
 
-  for (size_t i = aSelect->size(); i > 0; --i)
-    sa->erase(sa->begin() + aSelect->at(i - 1));
+  for (size_t select_idx : pdfium::base::Reversed(aSelect)) {
+    sa.erase(sa.begin() + select_idx);
+  }
 }
 
 // static
@@ -105,19 +109,19 @@
   CPDF_Page* pPDFPage = pPageView->GetPDFPage();
   ByteString sTabs = pPDFPage->GetDict()->GetByteStringFor("Tabs");
   if (sTabs == "R")
-    return kRow;
+    return TabOrder::kRow;
   if (sTabs == "C")
-    return kColumn;
-  return kStructure;
+    return TabOrder::kColumn;
+  return TabOrder::kStructure;
 }
 
 void CPDFSDK_AnnotIterator::GenerateResults() {
   switch (m_eTabOrder) {
-    case kStructure:
+    case TabOrder::kStructure:
       CollectAnnots(&m_Annots);
       break;
 
-    case kRow: {
+    case TabOrder::kRow: {
       std::vector<UnownedPtr<CPDFSDK_Annot>> sa;
       CollectAnnots(&sa);
       std::sort(sa.begin(), sa.end(), CompareByLeftAscending);
@@ -135,7 +139,7 @@
         if (nLeftTopIndex < 0)
           continue;
 
-        CFX_FloatRect rcLeftTop = AddToAnnotsList(&sa, nLeftTopIndex);
+        CFX_FloatRect rcLeftTop = AddToAnnotsList(sa, nLeftTopIndex);
 
         std::vector<size_t> aSelect;
         for (size_t i = 0; i < sa.size(); ++i) {
@@ -144,12 +148,12 @@
           if (fCenterY > rcLeftTop.bottom && fCenterY < rcLeftTop.top)
             aSelect.push_back(i);
         }
-        AddSelectedToAnnots(&sa, &aSelect);
+        AddSelectedToAnnots(sa, aSelect);
       }
       break;
     }
 
-    case kColumn: {
+    case TabOrder::kColumn: {
       std::vector<UnownedPtr<CPDFSDK_Annot>> sa;
       CollectAnnots(&sa);
       std::sort(sa.begin(), sa.end(), CompareByTopDescending);
@@ -170,7 +174,7 @@
         if (nLeftTopIndex < 0)
           continue;
 
-        CFX_FloatRect rcLeftTop = AddToAnnotsList(&sa, nLeftTopIndex);
+        CFX_FloatRect rcLeftTop = AddToAnnotsList(sa, nLeftTopIndex);
 
         std::vector<size_t> aSelect;
         for (size_t i = 0; i < sa.size(); ++i) {
@@ -179,7 +183,7 @@
           if (fCenterX > rcLeftTop.left && fCenterX < rcLeftTop.right)
             aSelect.push_back(i);
         }
-        AddSelectedToAnnots(&sa, &aSelect);
+        AddSelectedToAnnots(sa, aSelect);
       }
       break;
     }
diff --git a/fpdfsdk/cpdfsdk_annotiterator.h b/fpdfsdk/cpdfsdk_annotiterator.h
index 74f93a4..e1b2e13 100644
--- a/fpdfsdk/cpdfsdk_annotiterator.h
+++ b/fpdfsdk/cpdfsdk_annotiterator.h
@@ -12,6 +12,7 @@
 #include "core/fpdfdoc/cpdf_annot.h"
 #include "core/fxcrt/fx_coordinates.h"
 #include "core/fxcrt/unowned_ptr.h"
+#include "third_party/base/containers/span.h"
 
 class CPDFSDK_Annot;
 class CPDFSDK_PageView;
@@ -29,16 +30,16 @@
   CPDFSDK_Annot* GetPrevAnnot(CPDFSDK_Annot* pAnnot);
 
  private:
-  enum TabOrder : uint8_t { kStructure = 0, kRow, kColumn };
+  enum class TabOrder : uint8_t { kStructure = 0, kRow, kColumn };
 
   static TabOrder GetTabOrder(CPDFSDK_PageView* pPageView);
 
   void GenerateResults();
   void CollectAnnots(std::vector<UnownedPtr<CPDFSDK_Annot>>* pArray);
-  CFX_FloatRect AddToAnnotsList(std::vector<UnownedPtr<CPDFSDK_Annot>>* sa,
+  CFX_FloatRect AddToAnnotsList(std::vector<UnownedPtr<CPDFSDK_Annot>>& sa,
                                 size_t idx);
-  void AddSelectedToAnnots(std::vector<UnownedPtr<CPDFSDK_Annot>>* sa,
-                           std::vector<size_t>* aSelect);
+  void AddSelectedToAnnots(std::vector<UnownedPtr<CPDFSDK_Annot>>& sa,
+                           pdfium::span<const size_t> aSelect);
 
   UnownedPtr<CPDFSDK_PageView> const m_pPageView;
   const std::vector<CPDF_Annot::Subtype> m_subtypes;