diff options
author | tsepez <tsepez@chromium.org> | 2016-09-20 12:02:32 -0700 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2016-09-20 12:02:32 -0700 |
commit | 5b7c9bbf6c26ca272706814ad3598894ce5e4e3b (patch) | |
tree | c70a3495741e94684e45c10d6d0fbe06306fda06 /core/fpdfapi/fpdf_parser/cpdf_indirect_object_holder.cpp | |
parent | a6df44456956914e86b9d9af722b30628c45f208 (diff) | |
download | pdfium-5b7c9bbf6c26ca272706814ad3598894ce5e4e3b.tar.xz |
Re-land "Make CPDF_IndirectObjectHolder use unique_ptr to objects""
This reverts commit 81e1e3fd2d33478733e47bd007b76fac1a663e74.
Review-Url: https://codereview.chromium.org/2353013003
Diffstat (limited to 'core/fpdfapi/fpdf_parser/cpdf_indirect_object_holder.cpp')
-rw-r--r-- | core/fpdfapi/fpdf_parser/cpdf_indirect_object_holder.cpp | 26 |
1 files changed, 8 insertions, 18 deletions
diff --git a/core/fpdfapi/fpdf_parser/cpdf_indirect_object_holder.cpp b/core/fpdfapi/fpdf_parser/cpdf_indirect_object_holder.cpp index dc639feb1a..800e34b3d1 100644 --- a/core/fpdfapi/fpdf_parser/cpdf_indirect_object_holder.cpp +++ b/core/fpdfapi/fpdf_parser/cpdf_indirect_object_holder.cpp @@ -11,15 +11,12 @@ CPDF_IndirectObjectHolder::CPDF_IndirectObjectHolder() : m_LastObjNum(0) {} -CPDF_IndirectObjectHolder::~CPDF_IndirectObjectHolder() { - for (const auto& pair : m_IndirectObjs) - delete pair.second; -} +CPDF_IndirectObjectHolder::~CPDF_IndirectObjectHolder() {} CPDF_Object* CPDF_IndirectObjectHolder::GetIndirectObject( uint32_t objnum) const { auto it = m_IndirectObjs.find(objnum); - return it != m_IndirectObjs.end() ? it->second : nullptr; + return it != m_IndirectObjs.end() ? it->second.get() : nullptr; } CPDF_Object* CPDF_IndirectObjectHolder::GetOrParseIndirectObject( @@ -37,10 +34,7 @@ CPDF_Object* CPDF_IndirectObjectHolder::GetOrParseIndirectObject( pObj->m_ObjNum = objnum; m_LastObjNum = std::max(m_LastObjNum, objnum); - if (m_IndirectObjs[objnum]) - delete m_IndirectObjs[objnum]; - - m_IndirectObjs[objnum] = pObj; + m_IndirectObjs[objnum].reset(pObj); return pObj; } @@ -53,7 +47,7 @@ uint32_t CPDF_IndirectObjectHolder::AddIndirectObject(CPDF_Object* pObj) { return pObj->m_ObjNum; m_LastObjNum++; - m_IndirectObjs[m_LastObjNum] = pObj; + m_IndirectObjs[m_LastObjNum].reset(pObj); pObj->m_ObjNum = m_LastObjNum; return m_LastObjNum; } @@ -65,15 +59,12 @@ bool CPDF_IndirectObjectHolder::ReplaceIndirectObjectIfHigherGeneration( return false; CPDF_Object* pOldObj = GetIndirectObject(objnum); - if (pOldObj) { - if (pObj->GetGenNum() <= pOldObj->GetGenNum()) { - delete pObj; - return false; - } - delete pOldObj; + if (pOldObj && pObj->GetGenNum() <= pOldObj->GetGenNum()) { + delete pObj; + return false; } pObj->m_ObjNum = objnum; - m_IndirectObjs[objnum] = pObj; + m_IndirectObjs[objnum].reset(pObj); m_LastObjNum = std::max(m_LastObjNum, objnum); return true; } @@ -83,6 +74,5 @@ void CPDF_IndirectObjectHolder::ReleaseIndirectObject(uint32_t objnum) { if (!pObj || pObj->GetObjNum() == CPDF_Object::kInvalidObjNum) return; - delete pObj; m_IndirectObjs.erase(objnum); } |