| Index: fpdfsdk/javascript/Document.cpp
|
| diff --git a/fpdfsdk/javascript/Document.cpp b/fpdfsdk/javascript/Document.cpp
|
| index 241e03818e823773c8a803425695d09e57e88ceb..5f6291b35a5e1df29fb69c71593ace42964358ae 100644
|
| --- a/fpdfsdk/javascript/Document.cpp
|
| +++ b/fpdfsdk/javascript/Document.cpp
|
| @@ -158,11 +158,6 @@ Document::Document(CJS_Object* pJSObject)
|
| m_bDelay(FALSE) {}
|
|
|
| Document::~Document() {
|
| - for (int i = 0; i < m_DelayData.GetSize(); i++) {
|
| - delete m_DelayData.GetAt(i);
|
| - }
|
| -
|
| - m_DelayData.RemoveAll();
|
| }
|
|
|
| // the total number of fileds in document.
|
| @@ -865,25 +860,12 @@ FX_BOOL Document::delay(IJS_Context* cc,
|
|
|
| vp >> m_bDelay;
|
| if (m_bDelay) {
|
| - for (int i = 0, sz = m_DelayData.GetSize(); i < sz; i++)
|
| - delete m_DelayData.GetAt(i);
|
| -
|
| - m_DelayData.RemoveAll();
|
| + m_DelayData.clear();
|
| } else {
|
| - CFX_ArrayTemplate<CJS_DelayData*> DelayDataToProcess;
|
| - for (int i = 0, sz = m_DelayData.GetSize(); i < sz; i++) {
|
| - if (CJS_DelayData* pData = m_DelayData.GetAt(i)) {
|
| - DelayDataToProcess.Add(pData);
|
| - m_DelayData.SetAt(i, NULL);
|
| - }
|
| - }
|
| - m_DelayData.RemoveAll();
|
| - for (int i = 0, sz = DelayDataToProcess.GetSize(); i < sz; i++) {
|
| - CJS_DelayData* pData = DelayDataToProcess.GetAt(i);
|
| - Field::DoDelay(m_pDocument, pData);
|
| - DelayDataToProcess.SetAt(i, NULL);
|
| - delete pData;
|
| - }
|
| + std::list<std::unique_ptr<CJS_DelayData>> DelayDataToProcess;
|
| + DelayDataToProcess.swap(m_DelayData);
|
| + for (const auto& pData : DelayDataToProcess)
|
| + Field::DoDelay(m_pDocument, pData.get());
|
| }
|
| }
|
| return TRUE;
|
| @@ -1597,36 +1579,24 @@ FX_BOOL Document::getURL(IJS_Context* cc,
|
| }
|
|
|
| void Document::AddDelayData(CJS_DelayData* pData) {
|
| - m_DelayData.Add(pData);
|
| + m_DelayData.push_back(std::unique_ptr<CJS_DelayData>(pData));
|
| }
|
|
|
| void Document::DoFieldDelay(const CFX_WideString& sFieldName,
|
| int nControlIndex) {
|
| - CFX_DWordArray DelArray;
|
| - CFX_ArrayTemplate<CJS_DelayData*> DelayDataForFieldAndControlIndex;
|
| -
|
| - for (int i = 0, sz = m_DelayData.GetSize(); i < sz; i++) {
|
| - if (CJS_DelayData* pData = m_DelayData.GetAt(i)) {
|
| - if (pData->sFieldName == sFieldName &&
|
| - pData->nControlIndex == nControlIndex) {
|
| - DelayDataForFieldAndControlIndex.Add(pData);
|
| - m_DelayData.SetAt(i, NULL);
|
| - DelArray.Add(i);
|
| - }
|
| + std::vector<std::unique_ptr<CJS_DelayData>> DelayDataForFieldAndControlIndex;
|
| + auto iter = m_DelayData.begin();
|
| + while (iter != m_DelayData.end()) {
|
| + auto old = iter++;
|
| + if ((*old)->sFieldName == sFieldName &&
|
| + (*old)->nControlIndex == nControlIndex) {
|
| + DelayDataForFieldAndControlIndex.push_back(std::move(*old));
|
| + m_DelayData.erase(old);
|
| }
|
| }
|
|
|
| - for (int j = DelArray.GetSize() - 1; j >= 0; j--) {
|
| - m_DelayData.RemoveAt(DelArray[j]);
|
| - }
|
| -
|
| - for (int i = 0, sz = DelayDataForFieldAndControlIndex.GetSize(); i < sz;
|
| - i++) {
|
| - CJS_DelayData* pData = DelayDataForFieldAndControlIndex.GetAt(i);
|
| - Field::DoDelay(m_pDocument, pData);
|
| - DelayDataForFieldAndControlIndex.SetAt(i, NULL);
|
| - delete pData;
|
| - }
|
| + for (const auto& pData : DelayDataForFieldAndControlIndex)
|
| + Field::DoDelay(m_pDocument, pData.get());
|
| }
|
|
|
| CJS_Document* Document::GetCJSDoc() const {
|
|
|