diff options
author | Wei Li <weili@chromium.org> | 2016-04-11 10:02:09 -0700 |
---|---|---|
committer | Wei Li <weili@chromium.org> | 2016-04-11 10:02:09 -0700 |
commit | e1aebd43b0c75133f94f8b141b33d12e2e715524 (patch) | |
tree | 863aded8c706db162eb3f69d6482100f9d61b842 /core/fpdfapi/fpdf_parser/cpdf_array.cpp | |
parent | 2d4a4fc372159ac7562abea48498b6ab72c2f321 (diff) | |
download | pdfium-e1aebd43b0c75133f94f8b141b33d12e2e715524.tar.xz |
Use std::vector as internal storage for CPDF_Array
Replace the usage of CFX_ArrayTemplate inside CPDF_Array, which
has non-standard APIs such as GetSize() returns int.
R=tsepez@chromium.org
Review URL: https://codereview.chromium.org/1867183002 .
Diffstat (limited to 'core/fpdfapi/fpdf_parser/cpdf_array.cpp')
-rw-r--r-- | core/fpdfapi/fpdf_parser/cpdf_array.cpp | 93 |
1 files changed, 49 insertions, 44 deletions
diff --git a/core/fpdfapi/fpdf_parser/cpdf_array.cpp b/core/fpdfapi/fpdf_parser/cpdf_array.cpp index 964ba64236..e2279c8e1d 100644 --- a/core/fpdfapi/fpdf_parser/cpdf_array.cpp +++ b/core/fpdfapi/fpdf_parser/cpdf_array.cpp @@ -15,11 +15,9 @@ CPDF_Array::CPDF_Array() {} CPDF_Array::~CPDF_Array() { - int size = m_Objects.GetSize(); - CPDF_Object** pList = m_Objects.GetData(); - for (int i = 0; i < size; i++) { - if (pList[i]) - pList[i]->Release(); + for (auto& it : m_Objects) { + if (it) + it->Release(); } } @@ -48,15 +46,15 @@ const CPDF_Array* CPDF_Array::AsArray() const { CPDF_Object* CPDF_Array::Clone(FX_BOOL bDirect) const { CPDF_Array* pCopy = new CPDF_Array(); for (size_t i = 0; i < GetCount(); i++) { - CPDF_Object* value = m_Objects.GetAt(i); - pCopy->m_Objects.Add(value->Clone(bDirect)); + CPDF_Object* value = m_Objects.at(i); + pCopy->m_Objects.push_back(value->Clone(bDirect)); } return pCopy; } CFX_FloatRect CPDF_Array::GetRect() { CFX_FloatRect rect; - if (!IsArray() || m_Objects.GetSize() != 4) + if (!IsArray() || m_Objects.size() != 4) return rect; rect.left = GetNumberAt(0); @@ -68,7 +66,7 @@ CFX_FloatRect CPDF_Array::GetRect() { CFX_Matrix CPDF_Array::GetMatrix() { CFX_Matrix matrix; - if (!IsArray() || m_Objects.GetSize() != 6) + if (!IsArray() || m_Objects.size() != 6) return matrix; matrix.Set(GetNumberAt(0), GetNumberAt(1), GetNumberAt(2), GetNumberAt(3), @@ -76,43 +74,43 @@ CFX_Matrix CPDF_Array::GetMatrix() { return matrix; } -CPDF_Object* CPDF_Array::GetObjectAt(uint32_t i) const { - if (i >= (uint32_t)m_Objects.GetSize()) +CPDF_Object* CPDF_Array::GetObjectAt(size_t i) const { + if (i >= m_Objects.size()) return nullptr; - return m_Objects.GetAt(i); + return m_Objects.at(i); } -CPDF_Object* CPDF_Array::GetDirectObjectAt(uint32_t i) const { - if (i >= (uint32_t)m_Objects.GetSize()) +CPDF_Object* CPDF_Array::GetDirectObjectAt(size_t i) const { + if (i >= m_Objects.size()) return nullptr; - return m_Objects.GetAt(i)->GetDirect(); + return m_Objects.at(i)->GetDirect(); } -CFX_ByteString CPDF_Array::GetStringAt(uint32_t i) const { - if (i >= (uint32_t)m_Objects.GetSize()) +CFX_ByteString CPDF_Array::GetStringAt(size_t i) const { + if (i >= m_Objects.size()) return CFX_ByteString(); - return m_Objects.GetAt(i)->GetString(); + return m_Objects.at(i)->GetString(); } -CFX_ByteStringC CPDF_Array::GetConstStringAt(uint32_t i) const { - if (i >= (uint32_t)m_Objects.GetSize()) +CFX_ByteStringC CPDF_Array::GetConstStringAt(size_t i) const { + if (i >= m_Objects.size()) return CFX_ByteStringC(); - return m_Objects.GetAt(i)->GetConstString(); + return m_Objects.at(i)->GetConstString(); } -int CPDF_Array::GetIntegerAt(uint32_t i) const { - if (i >= (uint32_t)m_Objects.GetSize()) +int CPDF_Array::GetIntegerAt(size_t i) const { + if (i >= m_Objects.size()) return 0; - return m_Objects.GetAt(i)->GetInteger(); + return m_Objects.at(i)->GetInteger(); } -FX_FLOAT CPDF_Array::GetNumberAt(uint32_t i) const { - if (i >= (uint32_t)m_Objects.GetSize()) +FX_FLOAT CPDF_Array::GetNumberAt(size_t i) const { + if (i >= m_Objects.size()) return 0; - return m_Objects.GetAt(i)->GetNumber(); + return m_Objects.at(i)->GetNumber(); } -CPDF_Dictionary* CPDF_Array::GetDictAt(uint32_t i) const { +CPDF_Dictionary* CPDF_Array::GetDictAt(size_t i) const { CPDF_Object* p = GetDirectObjectAt(i); if (!p) return NULL; @@ -123,52 +121,59 @@ CPDF_Dictionary* CPDF_Array::GetDictAt(uint32_t i) const { return NULL; } -CPDF_Stream* CPDF_Array::GetStreamAt(uint32_t i) const { +CPDF_Stream* CPDF_Array::GetStreamAt(size_t i) const { return ToStream(GetDirectObjectAt(i)); } -CPDF_Array* CPDF_Array::GetArrayAt(uint32_t i) const { +CPDF_Array* CPDF_Array::GetArrayAt(size_t i) const { return ToArray(GetDirectObjectAt(i)); } -void CPDF_Array::RemoveAt(uint32_t i, uint32_t nCount) { - if (i >= (uint32_t)m_Objects.GetSize()) +void CPDF_Array::RemoveAt(size_t i, size_t nCount) { + if (i >= m_Objects.size()) return; - if (nCount <= 0 || nCount > m_Objects.GetSize() - i) + if (nCount <= 0 || nCount > m_Objects.size() - i) return; - for (uint32_t j = 0; j < nCount; ++j) { - if (CPDF_Object* p = m_Objects.GetAt(i + j)) + for (size_t j = 0; j < nCount; ++j) { + if (CPDF_Object* p = m_Objects.at(i + j)) p->Release(); } - m_Objects.RemoveAt(i, nCount); + m_Objects.erase(m_Objects.begin() + i, m_Objects.begin() + i + nCount); } -void CPDF_Array::SetAt(uint32_t i, +void CPDF_Array::SetAt(size_t i, CPDF_Object* pObj, CPDF_IndirectObjectHolder* pObjs) { ASSERT(IsArray()); - ASSERT(i < (uint32_t)m_Objects.GetSize()); - if (i >= (uint32_t)m_Objects.GetSize()) + ASSERT(i < m_Objects.size()); + if (i >= m_Objects.size()) return; - if (CPDF_Object* pOld = m_Objects.GetAt(i)) + if (CPDF_Object* pOld = m_Objects.at(i)) pOld->Release(); if (pObj->GetObjNum()) { ASSERT(pObjs); pObj = new CPDF_Reference(pObjs, pObj->GetObjNum()); } - m_Objects.SetAt(i, pObj); + m_Objects[i] = pObj; } -void CPDF_Array::InsertAt(uint32_t index, +void CPDF_Array::InsertAt(size_t index, CPDF_Object* pObj, CPDF_IndirectObjectHolder* pObjs) { if (pObj->GetObjNum()) { ASSERT(pObjs); pObj = new CPDF_Reference(pObjs, pObj->GetObjNum()); } - m_Objects.InsertAt(index, pObj); + if (index >= m_Objects.size()) { + // Allocate space first. + m_Objects.resize(index + 1, nullptr); + m_Objects[index] = pObj; + } else { + // Directly insert. + m_Objects.insert(m_Objects.begin() + index, pObj); + } } void CPDF_Array::Add(CPDF_Object* pObj, CPDF_IndirectObjectHolder* pObjs) { @@ -176,7 +181,7 @@ void CPDF_Array::Add(CPDF_Object* pObj, CPDF_IndirectObjectHolder* pObjs) { ASSERT(pObjs); pObj = new CPDF_Reference(pObjs, pObj->GetObjNum()); } - m_Objects.Add(pObj); + m_Objects.push_back(pObj); } void CPDF_Array::AddName(const CFX_ByteString& str) { |