From b9cc7a0d0ece261db2cd2a1486b05e3338bca322 Mon Sep 17 00:00:00 2001 From: Tom Sepez Date: Mon, 1 Feb 2016 13:42:30 -0800 Subject: Merge to XFA: Remove CGW_ArrayTemplate and its O(n^2 log n) sort. Original Review URL: https://codereview.chromium.org/1652613002 . (cherry picked from commit 0841b0f37678ba4962247f5636e9390718fc027e) TBR=thestig@chromium.org Review URL: https://codereview.chromium.org/1657663003 . --- fpdfsdk/src/javascript/Field.cpp | 35 +++++++++++++++++++---------------- 1 file changed, 19 insertions(+), 16 deletions(-) (limited to 'fpdfsdk/src/javascript/Field.cpp') diff --git a/fpdfsdk/src/javascript/Field.cpp b/fpdfsdk/src/javascript/Field.cpp index 1b55515069..24acd6029c 100644 --- a/fpdfsdk/src/javascript/Field.cpp +++ b/fpdfsdk/src/javascript/Field.cpp @@ -6,6 +6,10 @@ #include "Field.h" +#include +#include +#include + #include "Document.h" #include "Icon.h" #include "JS_Context.h" @@ -3082,10 +3086,6 @@ FX_BOOL Field::deleteItemAt(IJS_Context* cc, return TRUE; } -int JS_COMPARESTRING(CFX_WideString* ps1, CFX_WideString* ps2) { - return ps1->Compare(*ps2); -} - FX_BOOL Field::getArray(IJS_Context* cc, const std::vector& params, CJS_Value& vRet, @@ -3094,35 +3094,38 @@ FX_BOOL Field::getArray(IJS_Context* cc, if (FieldArray.empty()) return FALSE; - CGW_ArrayTemplate swSort; + std::vector> swSort; + for (CPDF_FormField* pFormField : FieldArray) { + swSort.push_back(std::unique_ptr( + new CFX_WideString(pFormField->GetFullName()))); + } - for (CPDF_FormField* pFormField : FieldArray) - swSort.Add(new CFX_WideString(pFormField->GetFullName())); - swSort.Sort(JS_COMPARESTRING); + std::sort( + swSort.begin(), swSort.end(), + [](const std::unique_ptr& p1, + const std::unique_ptr& p2) { return *p1 < *p2; }); CJS_Context* pContext = (CJS_Context*)cc; CJS_Runtime* pRuntime = pContext->GetJSRuntime(); - ASSERT(pRuntime); - CJS_Array FormFieldArray(pRuntime); - for (int j = 0, jsz = swSort.GetSize(); j < jsz; j++) { - std::unique_ptr pStr(swSort.GetAt(j)); + + int j = 0; + for (const auto& pStr : swSort) { v8::Local pObj = FXJS_NewFxDynamicObj( pRuntime->GetIsolate(), pRuntime, CJS_Field::g_nObjDefnID); ASSERT(!pObj.IsEmpty()); CJS_Field* pJSField = - (CJS_Field*)FXJS_GetPrivate(pRuntime->GetIsolate(), pObj); - Field* pField = (Field*)pJSField->GetEmbedObject(); + static_cast(FXJS_GetPrivate(pRuntime->GetIsolate(), pObj)); + Field* pField = static_cast(pJSField->GetEmbedObject()); pField->AttachField(m_pJSDoc, *pStr); CJS_Value FormFieldValue(pRuntime); FormFieldValue = pJSField; - FormFieldArray.SetElement(j, FormFieldValue); + FormFieldArray.SetElement(j++, FormFieldValue); } vRet = FormFieldArray; - swSort.RemoveAll(); return TRUE; } -- cgit v1.2.3