perf: 完善部分逻辑

This commit is contained in:
msojocs 2023-06-26 15:53:08 +08:00
parent 0bd30975f3
commit b1f1178e06
5 changed files with 371 additions and 154 deletions

View File

@ -62,11 +62,22 @@ namespace WXML
{ {
class Token class Token
{ {
/*
Token
00 B6 BF 00 80 CC BF 00 01 00 00 00(?) 01 00 00 00(?) // 15
01 00 00 00(pos) 04 00 00 00(size) 00 00 00 00 00 F6 97 00 // 31
38 F0 97 00 00 00 00 00 00 CC FA 00 CC F0 97 00 // 47(40是32字符串的 缓冲区起点)
00 00 BF 00 00 00 00 00 FF FF FF FF 54 F0 97 00 // 63
00 00 00 00 00 3A 53 00 00 00 00 00 78 F0 97 00 // 79
00 00 00 00 00(?) F2 97 00 70 F0 97 00 00 00 00 00
00 00 00 00 62 00 00 40 F8 F1 97 00 7A 15 46 00
*/
private: private:
/* data */ /* data */
std::string offset_0; // content std::string offset_0 = ""; // content
bool offset_28; // hasCache toString bool offset_28 = false; // hasCache toString
std::string offset_32; // chcheData toString std::string offset_32 = ""; // chcheData toString
bool offset_84; // hasCache attrContent bool offset_84; // hasCache attrContent
std::string offset_88; // chcheData attrContent std::string offset_88; // chcheData attrContent
public: public:
@ -324,6 +335,7 @@ namespace WXML
int offset_44; int offset_44;
std::deque<std::shared_ptr<WXML::DOMLib::WXMLDom>> dequeDom; // offset_48 int a1 + 48, _DWORD * a1 + 12 std::deque<std::shared_ptr<WXML::DOMLib::WXMLDom>> dequeDom; // offset_48 int a1 + 48, _DWORD * a1 + 12
int peekIndex = 0; // offset_100 int peekIndex = 0; // offset_100
WXML::DOMLib::Token offset_104;
int offset_128; int offset_128;
std::string filePath; std::string filePath;
public: public:

View File

@ -378,18 +378,23 @@ namespace WXML
{ {
if (this->offset_4 < this->fileLength) if (this->offset_4 < this->fileLength)
{ {
WXML::DOMLib::Token token;
token.offset_8 = this->offset_16;
token.offset_12 = this->offset_20;
token.offset_16 = this->offset_4;
token.offset_20 = this->fileLength - this->offset_4;
this->offset_4 = this->fileLength; this->offset_4 = this->fileLength;
this->offset_20 = this->lineLength; this->offset_20 = this->lineLength;
this->offset_16 = this->lineCount; this->offset_16 = this->lineCount;
token.offset_24 = WXML::DOMLib::Machine::STT[v45];
if(WXML::DOMLib::Machine::STT[v45] == 3) if(token.offset_24 == 3)
{ {
WXML::DOMLib::Token token;
a5.push_back(token); a5.push_back(token);
} }
else else
{ {
WXML::DOMLib::Token token;
a3.push_back(token); a3.push_back(token);
} }
} }
@ -433,7 +438,7 @@ namespace WXML
this->fileLength = 0; this->fileLength = 0;
this->offset_4 = 0; this->offset_4 = 0;
this->lineCount = 1; this->lineCount = 1;
this->lineLength = 1; this->lineLength = 0;
this->offset_16 = 1; this->offset_16 = 1;
this->offset_20 = 1; this->offset_20 = 1;
this->offset_24 = 1; this->offset_24 = 1;

View File

@ -184,7 +184,7 @@ namespace WXML
this->peekIndex++; this->peekIndex++;
this->dequeStr.pop_back(); this->dequeStr.pop_back();
this->dequeDom.pop_back(); this->dequeDom.pop_back();
auto v47 = this->Peek(); v47 = this->Peek();
if (!v47.IsMatch(">")) if (!v47.IsMatch(">"))
{ {
throw this->Error("unexpected token", 0); throw this->Error("unexpected token", 0);
@ -237,7 +237,9 @@ namespace WXML
WXML::DOMLib::Token Parser::Peek() WXML::DOMLib::Token Parser::Peek()
{ {
return tokenList[this->peekIndex]; if (this->peekIndex < tokenList.size())
return tokenList[this->peekIndex];
return this->offset_104;
} }
WXML::DOMLib::ParseException Parser::Error(char const*, WXML::DOMLib::Token *) WXML::DOMLib::ParseException Parser::Error(char const*, WXML::DOMLib::Token *)

View File

@ -5,16 +5,6 @@ namespace WXML
{ {
namespace DOMLib namespace DOMLib
{ {
/*
Token
00 B6 BF 00 80 CC BF 00 01 00 00 00(?) 01 00 00 00(?) // 15
01 00 00 00(pos) 04 00 00 00(size) 00 00 00 00 00 F6 97 00 // 31
38 F0 97 00 00 00 00 00 00 CC FA 00 CC F0 97 00 // 47
00 00 BF 00 00 00 00 00 FF FF FF FF 54 F0 97 00 // 63
00 00 00 00 00 3A 53 00 00 00 00 00 78 F0 97 00 // 79
00 00 00 00 00(?) F2 97 00 70 F0 97 00 00 00 00 00
00 00 00 00 62 00 00 40 F8 F1 97 00 7A 15 46 00
*/
Token::Token() Token::Token()
{ {
} }
@ -25,18 +15,18 @@ namespace WXML
} }
Token::Token(WXML::DOMLib::Token&& token): Token::Token(WXML::DOMLib::Token&& token):
offset_0(token.offset_0), offset_0(token.offset_0),
offset_8(token.offset_8), offset_8(token.offset_8),
offset_12(token.offset_12), offset_12(token.offset_12),
offset_16(token.offset_16), offset_16(token.offset_16),
offset_20(token.offset_20), offset_20(token.offset_20),
offset_28(token.offset_28), offset_28(token.offset_28),
offset_32(token.offset_32), offset_32(token.offset_32),
offset_40(token.offset_40), offset_40(token.offset_40),
offset_56(token.offset_56), offset_56(token.offset_56),
offset_60(token.offset_60), offset_60(token.offset_60),
offset_84(token.offset_84), offset_84(token.offset_84),
offset_88(token.offset_88) offset_88(token.offset_88)
{ {
} }
Token::Token(WXML::DOMLib::Token const& token) Token::Token(WXML::DOMLib::Token const& token)

File diff suppressed because it is too large Load Diff