From 17103b84ebde9ab2b05dff38d473b5d44f723ff2 Mon Sep 17 00:00:00 2001 From: tsepez Date: Wed, 21 Sep 2016 13:30:29 -0700 Subject: Make ownership explicit in CPDF_ContentMarkItem. The old SetParam() method had "maybe take ownership" semanitcs based upon the type argument. Make GetParam() handle the None case and simplify callers based upon that behaviour. Review-Url: https://codereview.chromium.org/2358043003 --- core/fpdfapi/fpdf_page/cpdf_contentmarkitem.cpp | 51 ++++++++++++++++--------- 1 file changed, 33 insertions(+), 18 deletions(-) (limited to 'core/fpdfapi/fpdf_page/cpdf_contentmarkitem.cpp') diff --git a/core/fpdfapi/fpdf_page/cpdf_contentmarkitem.cpp b/core/fpdfapi/fpdf_page/cpdf_contentmarkitem.cpp index f44972568d..5e2d21f850 100644 --- a/core/fpdfapi/fpdf_page/cpdf_contentmarkitem.cpp +++ b/core/fpdfapi/fpdf_page/cpdf_contentmarkitem.cpp @@ -9,27 +9,42 @@ #include "core/fpdfapi/fpdf_parser/include/cpdf_dictionary.h" CPDF_ContentMarkItem::CPDF_ContentMarkItem() - : m_ParamType(None), m_pParam(nullptr) {} - -CPDF_ContentMarkItem::CPDF_ContentMarkItem(const CPDF_ContentMarkItem& src) { - m_MarkName = src.m_MarkName; - m_ParamType = src.m_ParamType; - if (m_ParamType == DirectDict) { - m_pParam = ToDictionary(src.m_pParam->Clone()); - } else { - m_pParam = src.m_pParam; - } + : m_ParamType(None), m_pPropertiesDict(nullptr) {} + +CPDF_ContentMarkItem::CPDF_ContentMarkItem(const CPDF_ContentMarkItem& that) + : m_MarkName(that.m_MarkName), + m_ParamType(that.m_ParamType), + m_pPropertiesDict(that.m_pPropertiesDict) { + if (that.m_pDirectDict) + m_pDirectDict.reset(that.m_pDirectDict->Clone()->AsDictionary()); } -CPDF_ContentMarkItem::~CPDF_ContentMarkItem() { - if (m_ParamType == DirectDict && m_pParam) - m_pParam->Release(); +CPDF_ContentMarkItem::~CPDF_ContentMarkItem() {} + +CPDF_Dictionary* CPDF_ContentMarkItem::GetParam() const { + switch (m_ParamType) { + case PropertiesDict: + return m_pPropertiesDict; + case DirectDict: + return m_pDirectDict.get(); + case None: + default: + return nullptr; + } } FX_BOOL CPDF_ContentMarkItem::HasMCID() const { - if (m_pParam && - (m_ParamType == DirectDict || m_ParamType == PropertiesDict)) { - return m_pParam->KeyExist("MCID"); - } - return FALSE; + CPDF_Dictionary* pDict = GetParam(); + return pDict && pDict->KeyExist("MCID"); +} + +void CPDF_ContentMarkItem::SetDirectDict( + std::unique_ptr> pDict) { + m_ParamType = DirectDict; + m_pDirectDict = std::move(pDict); +} + +void CPDF_ContentMarkItem::SetPropertiesDict(CPDF_Dictionary* pDict) { + m_ParamType = PropertiesDict; + m_pPropertiesDict = pDict; } -- cgit v1.2.3