diff options
Diffstat (limited to 'core/fxcrt/fx_xml_parser.cpp')
-rw-r--r-- | core/fxcrt/fx_xml_parser.cpp | 70 |
1 files changed, 30 insertions, 40 deletions
diff --git a/core/fxcrt/fx_xml_parser.cpp b/core/fxcrt/fx_xml_parser.cpp index 803ba597e5..ab30926387 100644 --- a/core/fxcrt/fx_xml_parser.cpp +++ b/core/fxcrt/fx_xml_parser.cpp @@ -74,7 +74,6 @@ class CXML_DataBufAcc : public IFX_BufferedReadStream { ~CXML_DataBufAcc() override; // IFX_BufferedReadStream - void Release() override; bool IsEOF() override; FX_FILESIZE GetPosition() override; size_t ReadBlock(void* buffer, size_t size) override; @@ -94,10 +93,6 @@ CXML_DataBufAcc::CXML_DataBufAcc(const uint8_t* pBuffer, size_t size) CXML_DataBufAcc::~CXML_DataBufAcc() {} -void CXML_DataBufAcc::Release() { - delete this; -} - bool CXML_DataBufAcc::IsEOF() { return m_dwCurPos >= m_dwSize; } @@ -135,11 +130,11 @@ FX_FILESIZE CXML_DataBufAcc::GetBlockOffset() { class CXML_DataStmAcc : public IFX_BufferedReadStream { public: - explicit CXML_DataStmAcc(IFX_SeekableReadStream* pFileRead); + explicit CXML_DataStmAcc( + const CFX_RetainPtr<IFX_SeekableReadStream>& pFileRead); ~CXML_DataStmAcc() override; // IFX_BufferedReadStream - void Release() override; bool IsEOF() override; FX_FILESIZE GetPosition() override; size_t ReadBlock(void* buffer, size_t size) override; @@ -149,13 +144,14 @@ class CXML_DataStmAcc : public IFX_BufferedReadStream { FX_FILESIZE GetBlockOffset() override; private: - IFX_SeekableReadStream* m_pFileRead; + CFX_RetainPtr<IFX_SeekableReadStream> m_pFileRead; uint8_t* m_pBuffer; FX_FILESIZE m_nStart; size_t m_dwSize; }; -CXML_DataStmAcc::CXML_DataStmAcc(IFX_SeekableReadStream* pFileRead) +CXML_DataStmAcc::CXML_DataStmAcc( + const CFX_RetainPtr<IFX_SeekableReadStream>& pFileRead) : m_pFileRead(pFileRead), m_pBuffer(nullptr), m_nStart(0), m_dwSize(0) { ASSERT(m_pFileRead); } @@ -164,10 +160,6 @@ CXML_DataStmAcc::~CXML_DataStmAcc() { FX_Free(m_pBuffer); } -void CXML_DataStmAcc::Release() { - delete this; -} - bool CXML_DataStmAcc::IsEOF() { return m_nStart + (FX_FILESIZE)m_dwSize >= m_pFileRead->GetSize(); } @@ -213,41 +205,34 @@ FX_FILESIZE CXML_DataStmAcc::GetBlockOffset() { } // namespace CXML_Parser::CXML_Parser() - : m_pDataAcc(nullptr), - m_bOwnedStream(false), - m_nOffset(0), + : m_nOffset(0), m_bSaveSpaceChars(false), m_pBuffer(nullptr), m_dwBufferSize(0), m_nBufferOffset(0), m_dwIndex(0) {} -CXML_Parser::~CXML_Parser() { - if (m_bOwnedStream) { - m_pDataAcc->Release(); - } -} +CXML_Parser::~CXML_Parser() {} bool CXML_Parser::Init(uint8_t* pBuffer, size_t size) { - m_pDataAcc = new CXML_DataBufAcc(pBuffer, size); - return Init(true); + m_pDataAcc.Reset(new CXML_DataBufAcc(pBuffer, size)); + return Init(); } -bool CXML_Parser::Init(IFX_SeekableReadStream* pFileRead) { - m_pDataAcc = new CXML_DataStmAcc(pFileRead); - return Init(true); +bool CXML_Parser::Init(const CFX_RetainPtr<IFX_SeekableReadStream>& pFileRead) { + m_pDataAcc.Reset(new CXML_DataStmAcc(pFileRead)); + return Init(); } -bool CXML_Parser::Init(IFX_BufferedReadStream* pBuffer) { +bool CXML_Parser::Init(const CFX_RetainPtr<IFX_BufferedReadStream>& pBuffer) { if (!pBuffer) return false; m_pDataAcc = pBuffer; - return Init(false); + return Init(); } -bool CXML_Parser::Init(bool bOwndedStream) { - m_bOwnedStream = bOwndedStream; +bool CXML_Parser::Init() { m_nOffset = 0; return ReadNextBlock(); } @@ -701,24 +686,29 @@ CXML_Element* CXML_Element::Parse(const void* pBuffer, } return XML_ContinueParse(parser, bSaveSpaceChars, pParsedSize); } -CXML_Element* CXML_Element::Parse(IFX_SeekableReadStream* pFile, - bool bSaveSpaceChars, - FX_FILESIZE* pParsedSize) { + +CXML_Element* CXML_Element::Parse( + const CFX_RetainPtr<IFX_SeekableReadStream>& pFile, + bool bSaveSpaceChars, + FX_FILESIZE* pParsedSize) { CXML_Parser parser; - if (!parser.Init(pFile)) { + if (!parser.Init(pFile)) return nullptr; - } + return XML_ContinueParse(parser, bSaveSpaceChars, pParsedSize); } -CXML_Element* CXML_Element::Parse(IFX_BufferedReadStream* pBuffer, - bool bSaveSpaceChars, - FX_FILESIZE* pParsedSize) { + +CXML_Element* CXML_Element::Parse( + const CFX_RetainPtr<IFX_BufferedReadStream>& pBuffer, + bool bSaveSpaceChars, + FX_FILESIZE* pParsedSize) { CXML_Parser parser; - if (!parser.Init(pBuffer)) { + if (!parser.Init(pBuffer)) return nullptr; - } + return XML_ContinueParse(parser, bSaveSpaceChars, pParsedSize); } + CXML_Element::CXML_Element() : m_QSpaceName(), m_TagName(), m_AttrMap() {} CXML_Element::CXML_Element(const CFX_ByteStringC& qSpace, const CFX_ByteStringC& tagName) |