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
|
||||
std::string offset_88; // chcheData attrContent
|
||||
public:
|
||||
Token(/* args */);
|
||||
Token();
|
||||
Token(std::string &);
|
||||
Token(WXML::DOMLib::Token&&);
|
||||
Token(WXML::DOMLib::Token const&);
|
||||
~Token();
|
||||
|
||||
void SetContent(std::string &content);
|
||||
std::string ToString();
|
||||
|
||||
/**
|
||||
@ -141,13 +142,13 @@ namespace WXML
|
||||
static int TT[0x101000u]; //类型不确定
|
||||
static int STT[0x80];
|
||||
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_5 = 0; // offset + 5
|
||||
int offset_6 = 0; // offset + 6
|
||||
std::string filePath; // 文件路径 offset + 7 this+28
|
||||
int lineCount = 0;// 当前处理的行数 offset + 8
|
||||
int lineLength = 0; // 正在处理行的长度 offset + 12
|
||||
int offset_16 = 0; // offset + 16
|
||||
int offset_20 = 0; // offset + 20
|
||||
int offset_24 = 0; // offset + 24
|
||||
std::string filePath; // 文件路径 offset + 28
|
||||
|
||||
public:
|
||||
Machine(/* args */);
|
||||
@ -163,8 +164,7 @@ namespace WXML
|
||||
{
|
||||
private:
|
||||
/* data */
|
||||
const char* fileContent;
|
||||
int contentLength;
|
||||
std::string fileContent;
|
||||
std::string fileName;
|
||||
WXML::DOMLib::Machine machine; // this + 2
|
||||
public:
|
||||
|
@ -293,6 +293,7 @@ namespace WXML
|
||||
}
|
||||
}
|
||||
int dword_567960[1000] = {0};
|
||||
|
||||
void Machine::Feed(
|
||||
char inputChar,
|
||||
std::vector<WXML::DOMLib::Token> & a3,
|
||||
@ -313,8 +314,8 @@ namespace WXML
|
||||
int v46;
|
||||
int v45;
|
||||
do{
|
||||
v46 = this->TT[257 * this->offset_6 + inputChar];
|
||||
v45 = this->offset_6;
|
||||
v46 = this->TT[257 * this->offset_24 + inputChar];
|
||||
v45 = this->offset_24;
|
||||
if (!v46)
|
||||
{
|
||||
v46 = dword_567960[257 * v45];
|
||||
@ -322,7 +323,7 @@ namespace WXML
|
||||
{
|
||||
std::stringstream ss;
|
||||
ss << "BAD STATE MACHINE! AT INPUT ";
|
||||
ss << this->offset_6 << " " << inputChar;
|
||||
ss << this->offset_24 << " " << inputChar;
|
||||
errorMessage = ss.str();
|
||||
return;
|
||||
}
|
||||
@ -344,14 +345,14 @@ namespace WXML
|
||||
errorMessage = ss.str();
|
||||
return;
|
||||
}
|
||||
this->offset_6 = v46;
|
||||
this->offset_24 = v46;
|
||||
if (bittest(&v46, 0x15u))
|
||||
{
|
||||
// TODO:
|
||||
if (this->fileLength > this->offset_1)
|
||||
if (this->fileLength > this->offset_4)
|
||||
{
|
||||
this->offset_1++;
|
||||
this->offset_5++;
|
||||
this->offset_4++;
|
||||
this->offset_20++;
|
||||
|
||||
WXML::DOMLib::Token token;
|
||||
a3.push_back(token);
|
||||
@ -372,11 +373,11 @@ namespace WXML
|
||||
|
||||
if (bittest(&v46, 0x11u))
|
||||
{
|
||||
if (this->offset_1 < this->fileLength)
|
||||
if (this->offset_4 < this->fileLength)
|
||||
{
|
||||
this->offset_1 = this->fileLength;
|
||||
this->offset_5 = this->lineLength;
|
||||
this->offset_4 = this->lineCount;
|
||||
this->offset_4 = this->fileLength;
|
||||
this->offset_20 = this->lineLength;
|
||||
this->offset_16 = this->lineCount;
|
||||
|
||||
if(WXML::DOMLib::Machine::STT[v45] == 3)
|
||||
{
|
||||
@ -396,9 +397,9 @@ namespace WXML
|
||||
this->lineLength++;
|
||||
if (bittest(&v46, 0x12u))
|
||||
{
|
||||
this->offset_1 = this->fileLength;
|
||||
this->offset_5 = this->lineLength;
|
||||
this->offset_4 = this->lineCount;
|
||||
this->offset_4 = this->fileLength;
|
||||
this->offset_20 = this->lineLength;
|
||||
this->offset_16 = this->lineCount;
|
||||
if (WXML::DOMLib::Machine::STT[v45] == 3)
|
||||
{
|
||||
WXML::DOMLib::Token v49;
|
||||
@ -413,8 +414,8 @@ namespace WXML
|
||||
v46 &= 0x80000u;
|
||||
if (v46)
|
||||
{
|
||||
offset_1 = fileLength;
|
||||
offset_5 = lineLength;
|
||||
offset_4 = fileLength;
|
||||
offset_20 = lineLength;
|
||||
}
|
||||
return;
|
||||
}
|
||||
@ -427,12 +428,12 @@ namespace WXML
|
||||
void Machine::Reset()
|
||||
{
|
||||
this->fileLength = 0;
|
||||
this->offset_1 = 0;
|
||||
this->offset_4 = 0;
|
||||
this->lineCount = 1;
|
||||
this->lineLength = 1;
|
||||
this->offset_4 = 1;
|
||||
this->offset_5 = 1;
|
||||
this->offset_6 = 1;
|
||||
this->offset_16 = 1;
|
||||
this->offset_20 = 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 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)
|
||||
@ -30,6 +34,10 @@ namespace WXML
|
||||
Token::~Token()
|
||||
{
|
||||
}
|
||||
void Token::SetContent(std::string &content)
|
||||
{
|
||||
this->offset_0 = content;
|
||||
}
|
||||
|
||||
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)
|
||||
{
|
||||
this->fileContent = fileContent;
|
||||
this->contentLength = strlen(fileContent);
|
||||
this->fileContent = std::string(fileContent);
|
||||
this->fileName = filePath;
|
||||
WXML::DOMLib::Machine m(filePath);
|
||||
this->machine = m;
|
||||
@ -20,24 +19,36 @@ namespace WXML
|
||||
|
||||
int Tokenizer::GetTokens(
|
||||
std::vector<WXML::DOMLib::Token> &a2,
|
||||
std::string &a3,
|
||||
std::string &errorMessage,
|
||||
std::vector<WXML::DOMLib::Token> &a4
|
||||
)
|
||||
{
|
||||
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: 少了
|
||||
// 猜测:将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
|
||||
{
|
||||
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 0;
|
||||
|
Loading…
x
Reference in New Issue
Block a user