mirror of
https://github.com/msojocs/wx-compiler.git
synced 2025-07-19 00:00:04 +08:00
perf: 处理一些数据存储
This commit is contained in:
parent
b52db55a22
commit
838a6c8937
@ -99,11 +99,12 @@ namespace WXML
|
|||||||
bool offset_84; // hasCache attrContent
|
bool offset_84; // hasCache attrContent
|
||||||
std::string offset_88; // chcheData attrContent
|
std::string offset_88; // chcheData attrContent
|
||||||
public:
|
public:
|
||||||
Token(/* args */);
|
Token();
|
||||||
|
Token(std::string &);
|
||||||
Token(WXML::DOMLib::Token&&);
|
Token(WXML::DOMLib::Token&&);
|
||||||
Token(WXML::DOMLib::Token const&);
|
Token(WXML::DOMLib::Token const&);
|
||||||
~Token();
|
~Token();
|
||||||
|
void SetContent(std::string &content);
|
||||||
std::string ToString();
|
std::string ToString();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -141,13 +142,13 @@ namespace WXML
|
|||||||
static int TT[0x101000u]; //类型不确定
|
static int TT[0x101000u]; //类型不确定
|
||||||
static int STT[0x80];
|
static int STT[0x80];
|
||||||
int fileLength = 0; // offset + 0
|
int fileLength = 0; // offset + 0
|
||||||
int offset_1 = 0; // offset + 1
|
|
||||||
int lineCount = 0;// 当前处理的行数 offset + 2
|
|
||||||
int lineLength = 0; // 正在处理行的长度 offset + 3
|
|
||||||
int offset_4 = 0; // offset + 4
|
int offset_4 = 0; // offset + 4
|
||||||
int offset_5 = 0; // offset + 5
|
int lineCount = 0;// 当前处理的行数 offset + 8
|
||||||
int offset_6 = 0; // offset + 6
|
int lineLength = 0; // 正在处理行的长度 offset + 12
|
||||||
std::string filePath; // 文件路径 offset + 7 this+28
|
int offset_16 = 0; // offset + 16
|
||||||
|
int offset_20 = 0; // offset + 20
|
||||||
|
int offset_24 = 0; // offset + 24
|
||||||
|
std::string filePath; // 文件路径 offset + 28
|
||||||
|
|
||||||
public:
|
public:
|
||||||
Machine(/* args */);
|
Machine(/* args */);
|
||||||
@ -163,8 +164,7 @@ namespace WXML
|
|||||||
{
|
{
|
||||||
private:
|
private:
|
||||||
/* data */
|
/* data */
|
||||||
const char* fileContent;
|
std::string fileContent;
|
||||||
int contentLength;
|
|
||||||
std::string fileName;
|
std::string fileName;
|
||||||
WXML::DOMLib::Machine machine; // this + 2
|
WXML::DOMLib::Machine machine; // this + 2
|
||||||
public:
|
public:
|
||||||
|
@ -293,6 +293,7 @@ namespace WXML
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
int dword_567960[1000] = {0};
|
int dword_567960[1000] = {0};
|
||||||
|
|
||||||
void Machine::Feed(
|
void Machine::Feed(
|
||||||
char inputChar,
|
char inputChar,
|
||||||
std::vector<WXML::DOMLib::Token> & a3,
|
std::vector<WXML::DOMLib::Token> & a3,
|
||||||
@ -313,8 +314,8 @@ namespace WXML
|
|||||||
int v46;
|
int v46;
|
||||||
int v45;
|
int v45;
|
||||||
do{
|
do{
|
||||||
v46 = this->TT[257 * this->offset_6 + inputChar];
|
v46 = this->TT[257 * this->offset_24 + inputChar];
|
||||||
v45 = this->offset_6;
|
v45 = this->offset_24;
|
||||||
if (!v46)
|
if (!v46)
|
||||||
{
|
{
|
||||||
v46 = dword_567960[257 * v45];
|
v46 = dword_567960[257 * v45];
|
||||||
@ -322,7 +323,7 @@ namespace WXML
|
|||||||
{
|
{
|
||||||
std::stringstream ss;
|
std::stringstream ss;
|
||||||
ss << "BAD STATE MACHINE! AT INPUT ";
|
ss << "BAD STATE MACHINE! AT INPUT ";
|
||||||
ss << this->offset_6 << " " << inputChar;
|
ss << this->offset_24 << " " << inputChar;
|
||||||
errorMessage = ss.str();
|
errorMessage = ss.str();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -344,14 +345,14 @@ namespace WXML
|
|||||||
errorMessage = ss.str();
|
errorMessage = ss.str();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
this->offset_6 = v46;
|
this->offset_24 = v46;
|
||||||
if (bittest(&v46, 0x15u))
|
if (bittest(&v46, 0x15u))
|
||||||
{
|
{
|
||||||
// TODO:
|
// TODO:
|
||||||
if (this->fileLength > this->offset_1)
|
if (this->fileLength > this->offset_4)
|
||||||
{
|
{
|
||||||
this->offset_1++;
|
this->offset_4++;
|
||||||
this->offset_5++;
|
this->offset_20++;
|
||||||
|
|
||||||
WXML::DOMLib::Token token;
|
WXML::DOMLib::Token token;
|
||||||
a3.push_back(token);
|
a3.push_back(token);
|
||||||
@ -372,11 +373,11 @@ namespace WXML
|
|||||||
|
|
||||||
if (bittest(&v46, 0x11u))
|
if (bittest(&v46, 0x11u))
|
||||||
{
|
{
|
||||||
if (this->offset_1 < this->fileLength)
|
if (this->offset_4 < this->fileLength)
|
||||||
{
|
{
|
||||||
this->offset_1 = this->fileLength;
|
this->offset_4 = this->fileLength;
|
||||||
this->offset_5 = this->lineLength;
|
this->offset_20 = this->lineLength;
|
||||||
this->offset_4 = this->lineCount;
|
this->offset_16 = this->lineCount;
|
||||||
|
|
||||||
if(WXML::DOMLib::Machine::STT[v45] == 3)
|
if(WXML::DOMLib::Machine::STT[v45] == 3)
|
||||||
{
|
{
|
||||||
@ -396,9 +397,9 @@ namespace WXML
|
|||||||
this->lineLength++;
|
this->lineLength++;
|
||||||
if (bittest(&v46, 0x12u))
|
if (bittest(&v46, 0x12u))
|
||||||
{
|
{
|
||||||
this->offset_1 = this->fileLength;
|
this->offset_4 = this->fileLength;
|
||||||
this->offset_5 = this->lineLength;
|
this->offset_20 = this->lineLength;
|
||||||
this->offset_4 = this->lineCount;
|
this->offset_16 = this->lineCount;
|
||||||
if (WXML::DOMLib::Machine::STT[v45] == 3)
|
if (WXML::DOMLib::Machine::STT[v45] == 3)
|
||||||
{
|
{
|
||||||
WXML::DOMLib::Token v49;
|
WXML::DOMLib::Token v49;
|
||||||
@ -413,8 +414,8 @@ namespace WXML
|
|||||||
v46 &= 0x80000u;
|
v46 &= 0x80000u;
|
||||||
if (v46)
|
if (v46)
|
||||||
{
|
{
|
||||||
offset_1 = fileLength;
|
offset_4 = fileLength;
|
||||||
offset_5 = lineLength;
|
offset_20 = lineLength;
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -427,12 +428,12 @@ namespace WXML
|
|||||||
void Machine::Reset()
|
void Machine::Reset()
|
||||||
{
|
{
|
||||||
this->fileLength = 0;
|
this->fileLength = 0;
|
||||||
this->offset_1 = 0;
|
this->offset_4 = 0;
|
||||||
this->lineCount = 1;
|
this->lineCount = 1;
|
||||||
this->lineLength = 1;
|
this->lineLength = 1;
|
||||||
this->offset_4 = 1;
|
this->offset_16 = 1;
|
||||||
this->offset_5 = 1;
|
this->offset_20 = 1;
|
||||||
this->offset_6 = 1;
|
this->offset_24 = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -15,9 +15,13 @@ namespace WXML
|
|||||||
00 00 00 00 00(?) F2 97 00 70 F0 97 00 00 00 00 00
|
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
|
00 00 00 00 62 00 00 40 F8 F1 97 00 7A 15 46 00
|
||||||
*/
|
*/
|
||||||
Token::Token(/* args */)
|
Token::Token()
|
||||||
{
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
Token::Token(std::string &content)
|
||||||
|
{
|
||||||
|
this->offset_0 = content;
|
||||||
}
|
}
|
||||||
|
|
||||||
Token::Token(WXML::DOMLib::Token&& token)
|
Token::Token(WXML::DOMLib::Token&& token)
|
||||||
@ -30,6 +34,10 @@ namespace WXML
|
|||||||
Token::~Token()
|
Token::~Token()
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
void Token::SetContent(std::string &content)
|
||||||
|
{
|
||||||
|
this->offset_0 = content;
|
||||||
|
}
|
||||||
|
|
||||||
int Token::GetTemplateContent(std::string const& templateStr, std::string& result)
|
int Token::GetTemplateContent(std::string const& templateStr, std::string& result)
|
||||||
{
|
{
|
||||||
|
@ -7,8 +7,7 @@ namespace WXML
|
|||||||
|
|
||||||
Tokenizer::Tokenizer(char const* fileContent, std::string const& filePath)
|
Tokenizer::Tokenizer(char const* fileContent, std::string const& filePath)
|
||||||
{
|
{
|
||||||
this->fileContent = fileContent;
|
this->fileContent = std::string(fileContent);
|
||||||
this->contentLength = strlen(fileContent);
|
|
||||||
this->fileName = filePath;
|
this->fileName = filePath;
|
||||||
WXML::DOMLib::Machine m(filePath);
|
WXML::DOMLib::Machine m(filePath);
|
||||||
this->machine = m;
|
this->machine = m;
|
||||||
@ -20,24 +19,36 @@ namespace WXML
|
|||||||
|
|
||||||
int Tokenizer::GetTokens(
|
int Tokenizer::GetTokens(
|
||||||
std::vector<WXML::DOMLib::Token> &a2,
|
std::vector<WXML::DOMLib::Token> &a2,
|
||||||
std::string &a3,
|
std::string &errorMessage,
|
||||||
std::vector<WXML::DOMLib::Token> &a4
|
std::vector<WXML::DOMLib::Token> &a4
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
this->machine.Reset();
|
this->machine.Reset();
|
||||||
if (this->fileContent)
|
if (this->fileContent.length() > 0)
|
||||||
{
|
{
|
||||||
for (int i = 0; i < this->contentLength; i++)
|
for (int i = 0; i < this->fileContent.length(); i++)
|
||||||
{
|
{
|
||||||
this->machine.Feed(this->fileContent[i], a2, a3, a4, 0);
|
this->machine.Feed(this->fileContent[i], a2, errorMessage, a4, 0);
|
||||||
}
|
}
|
||||||
this->machine.Feed(0, a2, a3, a4, 0);
|
this->machine.Feed(0, a2, errorMessage, a4, 0);
|
||||||
|
|
||||||
// TODO: 少了
|
// TODO: 少了
|
||||||
|
// 猜测:将fileContent地址赋值给a2,a4中所有的元素
|
||||||
|
for (int i = 0; i < a2.size(); i++)
|
||||||
|
{
|
||||||
|
/* code */
|
||||||
|
a2[i].SetContent(this->fileContent);
|
||||||
|
}
|
||||||
|
for (int i = 0; i < a4.size(); i++)
|
||||||
|
{
|
||||||
|
/* code */
|
||||||
|
a4[i].SetContent(this->fileContent);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
a3.replace(a3.begin(), a3.end(), "FATAL: no source was set or failed to allocate space for input source");
|
errorMessage.replace(errorMessage.begin(), errorMessage.end(), "FATAL: no source was set or failed to allocate space for input source");
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user