diff options
author | Tom Sepez <tsepez@chromium.org> | 2016-02-01 13:37:38 -0800 |
---|---|---|
committer | Tom Sepez <tsepez@chromium.org> | 2016-02-01 13:37:38 -0800 |
commit | 0841b0f37678ba4962247f5636e9390718fc027e (patch) | |
tree | 4ff926df6ffa86e3d8f8b7b34a0c40f9daeb196d /fpdfsdk/include | |
parent | 93c196d868535f684007a7d3ed1f7146851a0ab9 (diff) | |
download | pdfium-0841b0f37678ba4962247f5636e9390718fc027e.tar.xz |
Remove CGW_ArrayTemplate and its O(n^2 log n) sort.
R=thestig@chromium.org
Review URL: https://codereview.chromium.org/1652613002 .
Diffstat (limited to 'fpdfsdk/include')
-rw-r--r-- | fpdfsdk/include/fsdk_baseform.h | 25 | ||||
-rw-r--r-- | fpdfsdk/include/fsdk_mgr.h | 74 |
2 files changed, 14 insertions, 85 deletions
diff --git a/fpdfsdk/include/fsdk_baseform.h b/fpdfsdk/include/fsdk_baseform.h index f553bd8848..0290ef021d 100644 --- a/fpdfsdk/include/fsdk_baseform.h +++ b/fpdfsdk/include/fsdk_baseform.h @@ -14,12 +14,13 @@ #endif #include <map> +#include <vector> #include "core/include/fpdfapi/fpdf_parser.h" #include "core/include/fpdfdoc/fpdf_doc.h" #include "core/include/fxcrt/fx_basic.h" #include "core/include/fxge/fx_dib.h" -#include "fsdk_baseannot.h" +#include "fpdfsdk/include/fsdk_baseannot.h" class CFFL_FormFiller; class CPDFSDK_Annot; @@ -273,14 +274,10 @@ class CPDFSDK_InterForm : public CPDF_FormNotify { FX_BOOL m_bNeedHightlight[kNumFieldTypes]; }; -#define BAI_STRUCTURE 0 -#define BAI_ROW 1 -#define BAI_COLUMN 2 - -#define CPDFSDK_Annots CFX_ArrayTemplate<CPDFSDK_Annot*> -#define CPDFSDK_SortAnnots CGW_ArrayTemplate<CPDFSDK_Annot*> class CBA_AnnotIterator { public: + enum TabOrder { STRUCTURE = 0, ROW, COLUMN }; + CBA_AnnotIterator(CPDFSDK_PageView* pPageView, const CFX_ByteString& sType, const CFX_ByteString& sSubType); @@ -293,15 +290,19 @@ class CBA_AnnotIterator { private: void GenerateResults(); - static int CompareByLeft(CPDFSDK_Annot* p1, CPDFSDK_Annot* p2); - static int CompareByTop(CPDFSDK_Annot* p1, CPDFSDK_Annot* p2); - static CPDF_Rect GetAnnotRect(CPDFSDK_Annot* pAnnot); + static CPDF_Rect GetAnnotRect(const CPDFSDK_Annot* pAnnot); + + // Function signature compatible with std::sort(). + static bool CompareByLeftAscending(const CPDFSDK_Annot* p1, + const CPDFSDK_Annot* p2); + static bool CompareByTopDescending(const CPDFSDK_Annot* p1, + const CPDFSDK_Annot* p2); + TabOrder m_eTabOrder; CPDFSDK_PageView* m_pPageView; CFX_ByteString m_sType; CFX_ByteString m_sSubType; - int m_nTabs; - CPDFSDK_Annots m_Annots; + std::vector<CPDFSDK_Annot*> m_Annots; }; #endif // FPDFSDK_INCLUDE_FSDK_BASEFORM_H_ diff --git a/fpdfsdk/include/fsdk_mgr.h b/fpdfsdk/include/fsdk_mgr.h index 4b07cc3127..323b07a46d 100644 --- a/fpdfsdk/include/fsdk_mgr.h +++ b/fpdfsdk/include/fsdk_mgr.h @@ -292,6 +292,7 @@ class CPDFSDK_Document { FX_BOOL m_bChangeMask; FX_BOOL m_bBeingDestroyed; }; + class CPDFSDK_PageView final { public: CPDFSDK_PageView(CPDFSDK_Document* pSDKDoc, UnderlyingPageType* page); @@ -368,77 +369,4 @@ class CPDFSDK_PageView final { FX_BOOL m_bTakeOverPage; }; -template <class TYPE> -class CGW_ArrayTemplate : public CFX_ArrayTemplate<TYPE> { - public: - CGW_ArrayTemplate() {} - ~CGW_ArrayTemplate() {} - - typedef int (*LP_COMPARE)(TYPE p1, TYPE p2); - - void Sort(LP_COMPARE pCompare, FX_BOOL bAscent = TRUE) { - int nSize = this->GetSize(); - QuickSort(0, nSize - 1, bAscent, pCompare); - } - - private: - void QuickSort(FX_UINT nStartPos, - FX_UINT nStopPos, - FX_BOOL bAscend, - LP_COMPARE pCompare) { - if (nStartPos >= nStopPos) - return; - - if ((nStopPos - nStartPos) == 1) { - TYPE Value1 = this->GetAt(nStartPos); - TYPE Value2 = this->GetAt(nStopPos); - - int iGreate = (*pCompare)(Value1, Value2); - if ((bAscend && iGreate > 0) || (!bAscend && iGreate < 0)) { - this->SetAt(nStartPos, Value2); - this->SetAt(nStopPos, Value1); - } - return; - } - - FX_UINT m = nStartPos + (nStopPos - nStartPos) / 2; - FX_UINT i = nStartPos; - - TYPE Value = this->GetAt(m); - - while (i < m) { - TYPE temp = this->GetAt(i); - - int iGreate = (*pCompare)(temp, Value); - if ((bAscend && iGreate > 0) || (!bAscend && iGreate < 0)) { - this->InsertAt(m + 1, temp); - this->RemoveAt(i); - m--; - } else { - i++; - } - } - - FX_UINT j = nStopPos; - - while (j > m) { - TYPE temp = this->GetAt(j); - - int iGreate = (*pCompare)(temp, Value); - if ((bAscend && iGreate < 0) || (!bAscend && iGreate > 0)) { - this->RemoveAt(j); - this->InsertAt(m, temp); - m++; - } else { - j--; - } - } - - if (nStartPos < m) - QuickSort(nStartPos, m, bAscend, pCompare); - if (nStopPos > m) - QuickSort(m, nStopPos, bAscend, pCompare); - } -}; - #endif // FPDFSDK_INCLUDE_FSDK_MGR_H_ |