Tweak CPDF_PageObjectHolder's methods for dirty streams.
Replace GetDirtyStreams() and ClearDirtyStreams() with
TakeDirtyStreams(), since that is most convenient for the primary caller
in CPDF_PageContentGenerator. Provide HasDirtyStreams(), since another
place checks for that.
Change-Id: I9dcea6c01f944d3a074ca7c20a482e12420e6ba0
Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/56299
Reviewed-by: Tom Sepez <tsepez@chromium.org>
Commit-Queue: Lei Zhang <thestig@chromium.org>
diff --git a/core/fpdfapi/edit/cpdf_pagecontentgenerator.cpp b/core/fpdfapi/edit/cpdf_pagecontentgenerator.cpp
index cdc8a57..0f1bc14 100644
--- a/core/fpdfapi/edit/cpdf_pagecontentgenerator.cpp
+++ b/core/fpdfapi/edit/cpdf_pagecontentgenerator.cpp
@@ -84,8 +84,7 @@
if (pPageObj->IsDirty())
all_dirty_streams.insert(pPageObj->GetContentStream());
}
- const std::set<int32_t>& marked_dirty_streams =
- m_pObjHolder->GetDirtyStreams();
+ std::set<int32_t> marked_dirty_streams = m_pObjHolder->TakeDirtyStreams();
all_dirty_streams.insert(marked_dirty_streams.begin(),
marked_dirty_streams.end());
@@ -140,9 +139,6 @@
}
}
- // Clear dirty streams in m_pObjHolder
- m_pObjHolder->ClearDirtyStreams();
-
return streams;
}
diff --git a/core/fpdfapi/edit/cpdf_pagecontentmanager.cpp b/core/fpdfapi/edit/cpdf_pagecontentmanager.cpp
index 87e27ca..35a8acd 100644
--- a/core/fpdfapi/edit/cpdf_pagecontentmanager.cpp
+++ b/core/fpdfapi/edit/cpdf_pagecontentmanager.cpp
@@ -106,7 +106,7 @@
// updated.
// Since this is only called by CPDF_PageContentGenerator::GenerateContent(),
// which cleans up the dirty streams first, this should always be true.
- ASSERT(obj_holder_->GetDirtyStreams().empty());
+ ASSERT(!obj_holder_->HasDirtyStreams());
if (contents_stream_) {
// Only stream that can be removed is 0.
diff --git a/core/fpdfapi/page/cpdf_pageobjectholder.cpp b/core/fpdfapi/page/cpdf_pageobjectholder.cpp
index 51499b0..73c3495 100644
--- a/core/fpdfapi/page/cpdf_pageobjectholder.cpp
+++ b/core/fpdfapi/page/cpdf_pageobjectholder.cpp
@@ -100,6 +100,12 @@
return CFX_FloatRect(left, bottom, right, top);
}
+std::set<int32_t> CPDF_PageObjectHolder::TakeDirtyStreams() {
+ auto dirty_streams = std::move(m_DirtyStreams);
+ m_DirtyStreams.clear();
+ return dirty_streams;
+}
+
void CPDF_PageObjectHolder::LoadTransInfo() {
if (!m_pDict)
return;
diff --git a/core/fpdfapi/page/cpdf_pageobjectholder.h b/core/fpdfapi/page/cpdf_pageobjectholder.h
index 9194224..fbeaf88 100644
--- a/core/fpdfapi/page/cpdf_pageobjectholder.h
+++ b/core/fpdfapi/page/cpdf_pageobjectholder.h
@@ -98,8 +98,8 @@
void AddImageMaskBoundingBox(const CFX_FloatRect& box);
void Transform(const CFX_Matrix& matrix);
CFX_FloatRect CalcBoundingBox() const;
- const std::set<int32_t>& GetDirtyStreams() const { return m_DirtyStreams; }
- void ClearDirtyStreams() { m_DirtyStreams.clear(); }
+ bool HasDirtyStreams() const { return !m_DirtyStreams.empty(); }
+ std::set<int32_t> TakeDirtyStreams();
RetainPtr<CPDF_Dictionary> m_pPageResources;
RetainPtr<CPDF_Dictionary> m_pResources;