Use unique_ptr for CFDE_XMLDoc::m_pRoot
Remove some less helpful helper methods.
Change-Id: Id027e31b6584156263c4aa0c2888e91fa44e4b0b
Reviewed-on: https://pdfium-review.googlesource.com/3150
Reviewed-by: dsinclair <dsinclair@chromium.org>
Commit-Queue: Tom Sepez <tsepez@chromium.org>
diff --git a/xfa/fde/xml/fde_xml_imp.cpp b/xfa/fde/xml/fde_xml_imp.cpp
index 2838445..ade8fc0 100644
--- a/xfa/fde/xml/fde_xml_imp.cpp
+++ b/xfa/fde/xml/fde_xml_imp.cpp
@@ -11,6 +11,7 @@
#include "core/fxcrt/fx_ext.h"
#include "core/fxcrt/fx_safe_types.h"
+#include "third_party/base/ptr_util.h"
#include "third_party/base/stl_util.h"
#include "xfa/fgas/crt/fgas_codepage.h"
@@ -909,40 +910,20 @@
CFDE_XMLCharData::~CFDE_XMLCharData() {}
-CFDE_XMLDoc::CFDE_XMLDoc() : m_pRoot(nullptr) {
- Reset(true);
- CFDE_XMLInstruction* pXML = new CFDE_XMLInstruction(L"xml");
- m_pRoot->InsertChildNode(pXML);
+CFDE_XMLDoc::CFDE_XMLDoc()
+ : m_iStatus(0), m_pRoot(pdfium::MakeUnique<CFDE_XMLNode>()) {
+ m_pRoot->InsertChildNode(new CFDE_XMLInstruction(L"xml"));
}
-CFDE_XMLDoc::~CFDE_XMLDoc() {
- Reset(false);
-}
-
-void CFDE_XMLDoc::Reset(bool bInitRoot) {
- m_iStatus = 0;
- m_pStream = nullptr;
- if (bInitRoot) {
- if (m_pRoot)
- m_pRoot->DeleteChildren();
- else
- m_pRoot = new CFDE_XMLNode;
- } else {
- delete m_pRoot;
- m_pRoot = nullptr;
- }
- ReleaseParser();
-}
-
-void CFDE_XMLDoc::ReleaseParser() {
- m_pXMLParser.reset();
-}
+CFDE_XMLDoc::~CFDE_XMLDoc() {}
bool CFDE_XMLDoc::LoadXML(std::unique_ptr<IFDE_XMLParser> pXMLParser) {
if (!pXMLParser)
return false;
- Reset(true);
+ m_iStatus = 0;
+ m_pStream.Reset();
+ m_pRoot->DeleteChildren();
m_pXMLParser = std::move(pXMLParser);
return true;
}
@@ -955,7 +936,7 @@
}
void CFDE_XMLDoc::CloseXML() {
- ReleaseParser();
+ m_pXMLParser.reset();
}
void CFDE_XMLDoc::SaveXMLNode(const CFX_RetainPtr<IFGAS_Stream>& pXMLStream,
diff --git a/xfa/fde/xml/fde_xml_imp.h b/xfa/fde/xml/fde_xml_imp.h
index 687a0cd..ad2ccc4 100644
--- a/xfa/fde/xml/fde_xml_imp.h
+++ b/xfa/fde/xml/fde_xml_imp.h
@@ -194,19 +194,16 @@
bool LoadXML(std::unique_ptr<IFDE_XMLParser> pXMLParser);
int32_t DoLoad(IFX_Pause* pPause = nullptr);
void CloseXML();
- CFDE_XMLNode* GetRoot() const { return m_pRoot; }
+ CFDE_XMLNode* GetRoot() const { return m_pRoot.get(); }
void SaveXML(CFX_RetainPtr<IFGAS_Stream>& pXMLStream, bool bSaveBOM = true);
void SaveXMLNode(const CFX_RetainPtr<IFGAS_Stream>& pXMLStream,
CFDE_XMLNode* pNode);
- protected:
- void Reset(bool bInitRoot);
- void ReleaseParser();
-
- CFX_RetainPtr<IFGAS_Stream> m_pStream;
+ private:
int32_t m_iStatus;
- CFDE_XMLNode* m_pRoot;
+ std::unique_ptr<CFDE_XMLNode> m_pRoot;
std::unique_ptr<IFDE_XMLParser> m_pXMLParser;
+ CFX_RetainPtr<IFGAS_Stream> m_pStream;
};
class IFDE_XMLParser {