| Index: core/fxcrt/fx_xml_parser.cpp
|
| diff --git a/core/fxcrt/fx_xml_parser.cpp b/core/fxcrt/fx_xml_parser.cpp
|
| index e6c3543378698d9caf6f13433857983c2902d6f2..f6b81dad931fd0583778f11b08ecd23c2b1eb7a7 100644
|
| --- a/core/fxcrt/fx_xml_parser.cpp
|
| +++ b/core/fxcrt/fx_xml_parser.cpp
|
| @@ -13,6 +13,62 @@
|
| #include "third_party/base/ptr_util.h"
|
| #include "third_party/base/stl_util.h"
|
|
|
| +namespace {
|
| +
|
| +#define FXCRTM_XML_CHARTYPE_Normal 0x00
|
| +#define FXCRTM_XML_CHARTYPE_SpaceChar 0x01
|
| +#define FXCRTM_XML_CHARTYPE_Letter 0x02
|
| +#define FXCRTM_XML_CHARTYPE_Digital 0x04
|
| +#define FXCRTM_XML_CHARTYPE_NameIntro 0x08
|
| +#define FXCRTM_XML_CHARTYPE_NameChar 0x10
|
| +#define FXCRTM_XML_CHARTYPE_HexDigital 0x20
|
| +#define FXCRTM_XML_CHARTYPE_HexLowerLetter 0x40
|
| +#define FXCRTM_XML_CHARTYPE_HexUpperLetter 0x60
|
| +#define FXCRTM_XML_CHARTYPE_HexChar 0x60
|
| +
|
| +const uint8_t g_FXCRT_XML_ByteTypes[256] = {
|
| + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
|
| + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
|
| + 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00,
|
| + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x10, 0x00,
|
| + 0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 0x08, 0x00,
|
| + 0x00, 0x00, 0x00, 0x00, 0x00, 0x7A, 0x7A, 0x7A, 0x7A, 0x7A, 0x7A, 0x1A,
|
| + 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A,
|
| + 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x00, 0x00, 0x00, 0x00, 0x18,
|
| + 0x00, 0x5A, 0x5A, 0x5A, 0x5A, 0x5A, 0x5A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A,
|
| + 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A,
|
| + 0x1A, 0x1A, 0x1A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1A, 0x1A, 0x1A, 0x1A,
|
| + 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A,
|
| + 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A,
|
| + 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A,
|
| + 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A,
|
| + 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A,
|
| + 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A,
|
| + 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A,
|
| + 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A,
|
| + 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A,
|
| + 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A,
|
| + 0x1A, 0x1A, 0x01, 0x01,
|
| +};
|
| +
|
| +bool g_FXCRT_XML_IsWhiteSpace(uint8_t ch) {
|
| + return !!(g_FXCRT_XML_ByteTypes[ch] & FXCRTM_XML_CHARTYPE_SpaceChar);
|
| +}
|
| +
|
| +bool g_FXCRT_XML_IsDigital(uint8_t ch) {
|
| + return !!(g_FXCRT_XML_ByteTypes[ch] & FXCRTM_XML_CHARTYPE_Digital);
|
| +}
|
| +
|
| +bool g_FXCRT_XML_IsNameIntro(uint8_t ch) {
|
| + return !!(g_FXCRT_XML_ByteTypes[ch] & FXCRTM_XML_CHARTYPE_NameIntro);
|
| +}
|
| +
|
| +bool g_FXCRT_XML_IsNameChar(uint8_t ch) {
|
| + return !!(g_FXCRT_XML_ByteTypes[ch] & FXCRTM_XML_CHARTYPE_NameChar);
|
| +}
|
| +
|
| +} // namespace
|
| +
|
| CXML_DataBufAcc::CXML_DataBufAcc(const uint8_t* pBuffer, size_t size)
|
| : m_pBuffer(pBuffer), m_dwSize(size), m_dwCurPos(0) {}
|
|
|
| @@ -22,7 +78,7 @@ void CXML_DataBufAcc::Release() {
|
| delete this;
|
| }
|
|
|
| -FX_BOOL CXML_DataBufAcc::IsEOF() {
|
| +bool CXML_DataBufAcc::IsEOF() {
|
| return m_dwCurPos >= m_dwSize;
|
| }
|
|
|
| @@ -34,15 +90,15 @@ size_t CXML_DataBufAcc::ReadBlock(void* buffer, size_t size) {
|
| return 0;
|
| }
|
|
|
| -FX_BOOL CXML_DataBufAcc::ReadNextBlock(FX_BOOL bRestart) {
|
| - if (bRestart) {
|
| +bool CXML_DataBufAcc::ReadNextBlock(bool bRestart) {
|
| + if (bRestart)
|
| m_dwCurPos = 0;
|
| - }
|
| +
|
| if (m_dwCurPos < m_dwSize) {
|
| m_dwCurPos = m_dwSize;
|
| - return TRUE;
|
| + return true;
|
| }
|
| - return FALSE;
|
| + return false;
|
| }
|
|
|
| const uint8_t* CXML_DataBufAcc::GetBlockBuffer() {
|
| @@ -70,7 +126,7 @@ void CXML_DataStmAcc::Release() {
|
| delete this;
|
| }
|
|
|
| -FX_BOOL CXML_DataStmAcc::IsEOF() {
|
| +bool CXML_DataStmAcc::IsEOF() {
|
| return m_nStart + (FX_FILESIZE)m_dwSize >= m_pFileRead->GetSize();
|
| }
|
|
|
| @@ -82,21 +138,21 @@ size_t CXML_DataStmAcc::ReadBlock(void* buffer, size_t size) {
|
| return 0;
|
| }
|
|
|
| -FX_BOOL CXML_DataStmAcc::ReadNextBlock(FX_BOOL bRestart) {
|
| - if (bRestart) {
|
| +bool CXML_DataStmAcc::ReadNextBlock(bool bRestart) {
|
| + if (bRestart)
|
| m_nStart = 0;
|
| - }
|
| +
|
| FX_FILESIZE nLength = m_pFileRead->GetSize();
|
| m_nStart += (FX_FILESIZE)m_dwSize;
|
| - if (m_nStart >= nLength) {
|
| - return FALSE;
|
| - }
|
| + if (m_nStart >= nLength)
|
| + return false;
|
| +
|
| static const FX_FILESIZE FX_XMLDATASTREAM_BufferSize = 32 * 1024;
|
| m_dwSize = static_cast<size_t>(
|
| std::min(FX_XMLDATASTREAM_BufferSize, nLength - m_nStart));
|
| - if (!m_pBuffer) {
|
| + if (!m_pBuffer)
|
| m_pBuffer = FX_Alloc(uint8_t, m_dwSize);
|
| - }
|
| +
|
| return m_pFileRead->ReadBlock(m_pBuffer, m_nStart, m_dwSize);
|
| }
|
|
|
| @@ -128,94 +184,45 @@ CXML_Parser::~CXML_Parser() {
|
| }
|
| }
|
|
|
| -FX_BOOL CXML_Parser::Init(uint8_t* pBuffer, size_t size) {
|
| +bool CXML_Parser::Init(uint8_t* pBuffer, size_t size) {
|
| m_pDataAcc = new CXML_DataBufAcc(pBuffer, size);
|
| - return Init(TRUE);
|
| + return Init(true);
|
| }
|
| -FX_BOOL CXML_Parser::Init(IFX_SeekableReadStream* pFileRead) {
|
| +
|
| +bool CXML_Parser::Init(IFX_SeekableReadStream* pFileRead) {
|
| m_pDataAcc = new CXML_DataStmAcc(pFileRead);
|
| - return Init(TRUE);
|
| + return Init(true);
|
| }
|
| -FX_BOOL CXML_Parser::Init(IFX_BufferRead* pBuffer) {
|
| - if (!pBuffer) {
|
| - return FALSE;
|
| - }
|
| +
|
| +bool CXML_Parser::Init(IFX_BufferRead* pBuffer) {
|
| + if (!pBuffer)
|
| + return false;
|
| +
|
| m_pDataAcc = pBuffer;
|
| - return Init(FALSE);
|
| + return Init(false);
|
| }
|
| -FX_BOOL CXML_Parser::Init(FX_BOOL bOwndedStream) {
|
| +
|
| +bool CXML_Parser::Init(bool bOwndedStream) {
|
| m_bOwnedStream = bOwndedStream;
|
| m_nOffset = 0;
|
| return ReadNextBlock();
|
| }
|
| -FX_BOOL CXML_Parser::ReadNextBlock() {
|
| - if (!m_pDataAcc->ReadNextBlock()) {
|
| - return FALSE;
|
| - }
|
| +
|
| +bool CXML_Parser::ReadNextBlock() {
|
| + if (!m_pDataAcc->ReadNextBlock())
|
| + return false;
|
| +
|
| m_pBuffer = m_pDataAcc->GetBlockBuffer();
|
| m_dwBufferSize = m_pDataAcc->GetBlockSize();
|
| m_nBufferOffset = m_pDataAcc->GetBlockOffset();
|
| m_dwIndex = 0;
|
| return m_dwBufferSize > 0;
|
| }
|
| -FX_BOOL CXML_Parser::IsEOF() {
|
| - if (!m_pDataAcc->IsEOF()) {
|
| - return FALSE;
|
| - }
|
| - return m_dwIndex >= m_dwBufferSize;
|
| -}
|
| -#define FXCRTM_XML_CHARTYPE_Normal 0x00
|
| -#define FXCRTM_XML_CHARTYPE_SpaceChar 0x01
|
| -#define FXCRTM_XML_CHARTYPE_Letter 0x02
|
| -#define FXCRTM_XML_CHARTYPE_Digital 0x04
|
| -#define FXCRTM_XML_CHARTYPE_NameIntro 0x08
|
| -#define FXCRTM_XML_CHARTYPE_NameChar 0x10
|
| -#define FXCRTM_XML_CHARTYPE_HexDigital 0x20
|
| -#define FXCRTM_XML_CHARTYPE_HexLowerLetter 0x40
|
| -#define FXCRTM_XML_CHARTYPE_HexUpperLetter 0x60
|
| -#define FXCRTM_XML_CHARTYPE_HexChar 0x60
|
| -uint8_t g_FXCRT_XML_ByteTypes[256] = {
|
| - 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
|
| - 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
|
| - 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00,
|
| - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x10, 0x00,
|
| - 0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 0x08, 0x00,
|
| - 0x00, 0x00, 0x00, 0x00, 0x00, 0x7A, 0x7A, 0x7A, 0x7A, 0x7A, 0x7A, 0x1A,
|
| - 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A,
|
| - 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x00, 0x00, 0x00, 0x00, 0x18,
|
| - 0x00, 0x5A, 0x5A, 0x5A, 0x5A, 0x5A, 0x5A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A,
|
| - 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A,
|
| - 0x1A, 0x1A, 0x1A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1A, 0x1A, 0x1A, 0x1A,
|
| - 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A,
|
| - 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A,
|
| - 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A,
|
| - 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A,
|
| - 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A,
|
| - 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A,
|
| - 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A,
|
| - 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A,
|
| - 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A,
|
| - 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A,
|
| - 0x1A, 0x1A, 0x01, 0x01,
|
| -};
|
| -FX_BOOL g_FXCRT_XML_IsWhiteSpace(uint8_t ch) {
|
| - return (g_FXCRT_XML_ByteTypes[ch] & FXCRTM_XML_CHARTYPE_SpaceChar) != 0;
|
| -}
|
| -FX_BOOL g_FXCRT_XML_IsLetter(uint8_t ch) {
|
| - return (g_FXCRT_XML_ByteTypes[ch] & FXCRTM_XML_CHARTYPE_Letter) != 0;
|
| -}
|
| -FX_BOOL g_FXCRT_XML_IsDigital(uint8_t ch) {
|
| - return (g_FXCRT_XML_ByteTypes[ch] & FXCRTM_XML_CHARTYPE_Digital) != 0;
|
| -}
|
| -FX_BOOL g_FXCRT_XML_IsNameIntro(uint8_t ch) {
|
| - return (g_FXCRT_XML_ByteTypes[ch] & FXCRTM_XML_CHARTYPE_NameIntro) != 0;
|
| -}
|
| -FX_BOOL g_FXCRT_XML_IsNameChar(uint8_t ch) {
|
| - return (g_FXCRT_XML_ByteTypes[ch] & FXCRTM_XML_CHARTYPE_NameChar) != 0;
|
| -}
|
| -FX_BOOL g_FXCRT_XML_IsHexChar(uint8_t ch) {
|
| - return (g_FXCRT_XML_ByteTypes[ch] & FXCRTM_XML_CHARTYPE_HexChar) != 0;
|
| +
|
| +bool CXML_Parser::IsEOF() {
|
| + return m_pDataAcc->IsEOF() && m_dwIndex >= m_dwBufferSize;
|
| }
|
| +
|
| void CXML_Parser::SkipWhiteSpaces() {
|
| m_nOffset = m_nBufferOffset + (FX_FILESIZE)m_dwIndex;
|
| if (IsEOF()) {
|
|
|