| // Copyright 2017 PDFium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com |
| |
| #include "fxjs/cfx_globalarray.h" |
| |
| #include <utility> |
| |
| #include "fxjs/cfx_keyvalue.h" |
| #include "third_party/base/ptr_util.h" |
| |
| CFX_GlobalArray::CFX_GlobalArray() = default; |
| |
| CFX_GlobalArray::~CFX_GlobalArray() = default; |
| |
| CFX_GlobalArray& CFX_GlobalArray::operator=(const CFX_GlobalArray& that) { |
| if (this == &that) |
| return *this; |
| |
| m_Array.clear(); |
| for (size_t i = 0, sz = that.Count(); i < sz; i++) { |
| CFX_KeyValue* pOldObjData = that.GetAt(i); |
| switch (pOldObjData->nType) { |
| case CFX_KeyValue::DataType::NUMBER: { |
| auto pNewObjData = pdfium::MakeUnique<CFX_KeyValue>(); |
| pNewObjData->sKey = pOldObjData->sKey; |
| pNewObjData->nType = pOldObjData->nType; |
| pNewObjData->dData = pOldObjData->dData; |
| Add(std::move(pNewObjData)); |
| } break; |
| case CFX_KeyValue::DataType::BOOLEAN: { |
| auto pNewObjData = pdfium::MakeUnique<CFX_KeyValue>(); |
| pNewObjData->sKey = pOldObjData->sKey; |
| pNewObjData->nType = pOldObjData->nType; |
| pNewObjData->bData = pOldObjData->bData; |
| Add(std::move(pNewObjData)); |
| } break; |
| case CFX_KeyValue::DataType::STRING: { |
| auto pNewObjData = pdfium::MakeUnique<CFX_KeyValue>(); |
| pNewObjData->sKey = pOldObjData->sKey; |
| pNewObjData->nType = pOldObjData->nType; |
| pNewObjData->sData = pOldObjData->sData; |
| Add(std::move(pNewObjData)); |
| } break; |
| case CFX_KeyValue::DataType::OBJECT: { |
| auto pNewObjData = pdfium::MakeUnique<CFX_KeyValue>(); |
| pNewObjData->sKey = pOldObjData->sKey; |
| pNewObjData->nType = pOldObjData->nType; |
| pNewObjData->objData = pOldObjData->objData; |
| Add(std::move(pNewObjData)); |
| } break; |
| case CFX_KeyValue::DataType::NULLOBJ: { |
| auto pNewObjData = pdfium::MakeUnique<CFX_KeyValue>(); |
| pNewObjData->sKey = pOldObjData->sKey; |
| pNewObjData->nType = pOldObjData->nType; |
| Add(std::move(pNewObjData)); |
| } break; |
| } |
| } |
| return *this; |
| } |
| |
| void CFX_GlobalArray::Add(std::unique_ptr<CFX_KeyValue> pKeyValue) { |
| m_Array.push_back(std::move(pKeyValue)); |
| } |
| |
| size_t CFX_GlobalArray::Count() const { |
| return m_Array.size(); |
| } |
| |
| CFX_KeyValue* CFX_GlobalArray::GetAt(int index) const { |
| return m_Array.at(index).get(); |
| } |