diff options
author | tsepez <tsepez@chromium.org> | 2016-04-14 11:04:57 -0700 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2016-04-14 11:04:57 -0700 |
commit | 7b1ccf9697692844e764d730079a0f0b98fd6d06 (patch) | |
tree | 8e1c0b669a8dd1e06de50454b4e5db5e7c6e1a2a /fpdfsdk | |
parent | 774bdde253b8394aa2ac791e273508ff006d813a (diff) | |
download | pdfium-7b1ccf9697692844e764d730079a0f0b98fd6d06.tar.xz |
Make CPDF_Dictionary methods take CFX_ByteString arguments
This will help avoid duplicate allocation of CFX_ByteStrings
when the caller already has one. It may seem counter-intuitive
that requiring the caller to pass an allocated CFX_ByteString
rather than a static CFX_ByteStringC would improve the situation,
but due to the idiosyncrasies of std::map, the CPDF_Dictionary
methods must always do an allocation under the covers which
can't be avoided.
The changed callers in this CL are places where we would
previously demote to CFX_ByteStringC and then allocate a
a duplicate CFX_ByteString in the dictionary method.
Review URL: https://codereview.chromium.org/1889863002
Diffstat (limited to 'fpdfsdk')
-rw-r--r-- | fpdfsdk/formfiller/cba_fontmap.cpp | 14 | ||||
-rw-r--r-- | fpdfsdk/fpdf_flatten.cpp | 8 | ||||
-rw-r--r-- | fpdfsdk/fpdfppo.cpp | 8 | ||||
-rw-r--r-- | fpdfsdk/fsdk_baseannot.cpp | 10 | ||||
-rw-r--r-- | fpdfsdk/fsdk_baseform.cpp | 11 |
5 files changed, 25 insertions, 26 deletions
diff --git a/fpdfsdk/formfiller/cba_fontmap.cpp b/fpdfsdk/formfiller/cba_fontmap.cpp index d12c7fe975..4b9fcf839d 100644 --- a/fpdfsdk/formfiller/cba_fontmap.cpp +++ b/fpdfsdk/formfiller/cba_fontmap.cpp @@ -159,11 +159,11 @@ void CBA_FontMap::AddFontToAnnotDict(CPDF_Font* pFont, } // to avoid checkbox and radiobutton - CPDF_Object* pObject = pAPDict->GetObjectBy(m_sAPType.AsStringC()); + CPDF_Object* pObject = pAPDict->GetObjectBy(m_sAPType); if (ToDictionary(pObject)) return; - CPDF_Stream* pStream = pAPDict->GetStreamBy(m_sAPType.AsStringC()); + CPDF_Stream* pStream = pAPDict->GetStreamBy(m_sAPType); if (!pStream) { pStream = new CPDF_Stream(NULL, 0, NULL); int32_t objnum = m_pDocument->AddIndirectObject(pStream); @@ -191,8 +191,8 @@ void CBA_FontMap::AddFontToAnnotDict(CPDF_Font* pFont, int32_t objnum = m_pDocument->AddIndirectObject(pStreamResFontList); pStreamResList->SetAtReference("Font", m_pDocument, objnum); } - if (!pStreamResFontList->KeyExist(sAlias.AsStringC())) - pStreamResFontList->SetAtReference(sAlias.AsStringC(), m_pDocument, + if (!pStreamResFontList->KeyExist(sAlias)) + pStreamResFontList->SetAtReference(sAlias, m_pDocument, pFont->GetFontDict()); } } @@ -228,7 +228,7 @@ CPDF_Font* CBA_FontMap::GetAnnotDefaultFont(CFX_ByteString& sAlias) { if (CPDF_Dictionary* pDRDict = m_pAnnotDict->GetDictBy("DR")) if (CPDF_Dictionary* pDRFontDict = pDRDict->GetDictBy("Font")) - pFontDict = pDRFontDict->GetDictBy(sAlias.AsStringC()); + pFontDict = pDRFontDict->GetDictBy(sAlias); if (!pFontDict) if (CPDF_Dictionary* pAPDict = m_pAnnotDict->GetDictBy("AP")) @@ -237,14 +237,14 @@ CPDF_Font* CBA_FontMap::GetAnnotDefaultFont(CFX_ByteString& sAlias) { pNormalDict->GetDictBy("Resources")) if (CPDF_Dictionary* pResFontDict = pNormalResDict->GetDictBy("Font")) - pFontDict = pResFontDict->GetDictBy(sAlias.AsStringC()); + pFontDict = pResFontDict->GetDictBy(sAlias); if (bWidget) { if (!pFontDict) { if (pAcroFormDict) { if (CPDF_Dictionary* pDRDict = pAcroFormDict->GetDictBy("DR")) if (CPDF_Dictionary* pDRFontDict = pDRDict->GetDictBy("Font")) - pFontDict = pDRFontDict->GetDictBy(sAlias.AsStringC()); + pFontDict = pDRFontDict->GetDictBy(sAlias); } } } diff --git a/fpdfsdk/fpdf_flatten.cpp b/fpdfsdk/fpdf_flatten.cpp index 54e606397f..e445d9abfa 100644 --- a/fpdfsdk/fpdf_flatten.cpp +++ b/fpdfsdk/fpdf_flatten.cpp @@ -393,7 +393,7 @@ DLLEXPORT int STDCALL FPDFPage_Flatten(FPDF_PAGE page, int nFlag) { char sExtend[5] = {}; FXSYS_itoa(iKey, sExtend, 10); key = CFX_ByteString("FFT") + CFX_ByteString(sExtend); - if (!pPageXObject->KeyExist(key.AsStringC())) + if (!pPageXObject->KeyExist(key)) break; } } @@ -403,7 +403,7 @@ DLLEXPORT int STDCALL FPDFPage_Flatten(FPDF_PAGE page, int nFlag) { CPDF_Dictionary* pNewXORes = NULL; if (!key.IsEmpty()) { - pPageXObject->SetAtReference(key.AsStringC(), pDocument, dwObjNum); + pPageXObject->SetAtReference(key, pDocument, dwObjNum); CPDF_Dictionary* pNewOXbjectDic = pNewXObject->GetDict(); pNewXORes = new CPDF_Dictionary; pNewOXbjectDic->SetAt("Resources", pNewXORes); @@ -435,7 +435,7 @@ DLLEXPORT int STDCALL FPDFPage_Flatten(FPDF_PAGE page, int nFlag) { continue; if (!sAnnotState.IsEmpty()) { - pAPStream = pAPDic->GetStreamBy(sAnnotState.AsStringC()); + pAPStream = pAPDic->GetStreamBy(sAnnotState); } else { auto it = pAPDic->begin(); if (it != pAPDic->end()) { @@ -484,7 +484,7 @@ DLLEXPORT int STDCALL FPDFPage_Flatten(FPDF_PAGE page, int nFlag) { CFX_ByteString sFormName; sFormName.Format("F%d", i); uint32_t dwObjNum = pDocument->AddIndirectObject(pObj); - pXObject->SetAtReference(sFormName.AsStringC(), pDocument, dwObjNum); + pXObject->SetAtReference(sFormName, pDocument, dwObjNum); CPDF_StreamAcc acc; acc.LoadAllData(pNewXObject); diff --git a/fpdfsdk/fpdfppo.cpp b/fpdfsdk/fpdfppo.cpp index 300e7ba36e..1ec968ddf4 100644 --- a/fpdfsdk/fpdfppo.cpp +++ b/fpdfsdk/fpdfppo.cpp @@ -110,9 +110,9 @@ FX_BOOL CPDF_PageOrganizer::ExportPage(CPDF_Document* pSrcPDFDoc, const CFX_ByteString& cbSrcKeyStr = it.first; CPDF_Object* pObj = it.second; if (cbSrcKeyStr.Compare(("Type")) && cbSrcKeyStr.Compare(("Parent"))) { - if (pCurPageDict->KeyExist(cbSrcKeyStr.AsStringC())) - pCurPageDict->RemoveAt(cbSrcKeyStr.AsStringC()); - pCurPageDict->SetAt(cbSrcKeyStr.AsStringC(), pObj->Clone()); + if (pCurPageDict->KeyExist(cbSrcKeyStr)) + pCurPageDict->RemoveAt(cbSrcKeyStr); + pCurPageDict->SetAt(cbSrcKeyStr, pObj->Clone()); } } @@ -231,7 +231,7 @@ FX_BOOL CPDF_PageOrganizer::UpdateReference(CPDF_Object* pObj, } if (pNextObj) { if (!UpdateReference(pNextObj, pDoc, pObjNumberMap)) - pDict->RemoveAt(key.AsStringC()); + pDict->RemoveAt(key); } else { return FALSE; } diff --git a/fpdfsdk/fsdk_baseannot.cpp b/fpdfsdk/fsdk_baseannot.cpp index 51f87d8c4e..e8014a3f56 100644 --- a/fpdfsdk/fsdk_baseannot.cpp +++ b/fpdfsdk/fsdk_baseannot.cpp @@ -829,22 +829,22 @@ void CPDFSDK_BAAnnot::WriteAppearance(const CFX_ByteString& sAPType, if (sAPState.IsEmpty()) { pParentDict = pAPDict; - pStream = pAPDict->GetStreamBy(sAPType.AsStringC()); + pStream = pAPDict->GetStreamBy(sAPType); } else { - CPDF_Dictionary* pAPTypeDict = pAPDict->GetDictBy(sAPType.AsStringC()); + CPDF_Dictionary* pAPTypeDict = pAPDict->GetDictBy(sAPType); if (!pAPTypeDict) { pAPTypeDict = new CPDF_Dictionary; - pAPDict->SetAt(sAPType.AsStringC(), pAPTypeDict); + pAPDict->SetAt(sAPType, pAPTypeDict); } pParentDict = pAPTypeDict; - pStream = pAPTypeDict->GetStreamBy(sAPState.AsStringC()); + pStream = pAPTypeDict->GetStreamBy(sAPState); } if (!pStream) { pStream = new CPDF_Stream(nullptr, 0, nullptr); CPDF_Document* pDoc = m_pPageView->GetPDFDocument(); int32_t objnum = pDoc->AddIndirectObject(pStream); - pParentDict->SetAtReference(sAPType.AsStringC(), pDoc, objnum); + pParentDict->SetAtReference(sAPType, pDoc, objnum); } CPDF_Dictionary* pStreamDict = pStream->GetDict(); diff --git a/fpdfsdk/fsdk_baseform.cpp b/fpdfsdk/fsdk_baseform.cpp index 288a2fe5a3..7487cddede 100644 --- a/fpdfsdk/fsdk_baseform.cpp +++ b/fpdfsdk/fsdk_baseform.cpp @@ -461,7 +461,7 @@ FX_BOOL CPDFSDK_Widget::IsWidgetAppearanceValid( case FIELDTYPE_CHECKBOX: case FIELDTYPE_RADIOBUTTON: if (CPDF_Dictionary* pSubDict = psub->AsDictionary()) { - return !!pSubDict->GetStreamBy(GetAppState().AsStringC()); + return !!pSubDict->GetStreamBy(GetAppState()); } return FALSE; } @@ -1808,7 +1808,7 @@ void CPDFSDK_Widget::AddImageToAppearance(const CFX_ByteString& sAPType, ASSERT(pDoc); CPDF_Dictionary* pAPDict = m_pAnnot->GetAnnotDict()->GetDictBy("AP"); - CPDF_Stream* pStream = pAPDict->GetStreamBy(sAPType.AsStringC()); + CPDF_Stream* pStream = pAPDict->GetStreamBy(sAPType); CPDF_Dictionary* pStreamDict = pStream->GetDict(); CFX_ByteString sImageAlias = "IMG"; @@ -1826,15 +1826,14 @@ void CPDFSDK_Widget::AddImageToAppearance(const CFX_ByteString& sAPType, if (pStreamResList) { CPDF_Dictionary* pXObject = new CPDF_Dictionary; - pXObject->SetAtReference(sImageAlias.AsStringC(), pDoc, pImage); + pXObject->SetAtReference(sImageAlias, pDoc, pImage); pStreamResList->SetAt("XObject", pXObject); } } void CPDFSDK_Widget::RemoveAppearance(const CFX_ByteString& sAPType) { - if (CPDF_Dictionary* pAPDict = m_pAnnot->GetAnnotDict()->GetDictBy("AP")) { - pAPDict->RemoveAt(sAPType.AsStringC()); - } + if (CPDF_Dictionary* pAPDict = m_pAnnot->GetAnnotDict()->GetDictBy("AP")) + pAPDict->RemoveAt(sAPType); } FX_BOOL CPDFSDK_Widget::OnAAction(CPDF_AAction::AActionType type, |