qtextstream.pos 过于耗时,使用relative-pos替代

This commit is contained in:
codeboss 2024-07-12 13:44:45 +08:00
parent 449f898257
commit 864236562d
9 changed files with 19 additions and 21 deletions

View File

@ -6,7 +6,7 @@
<LocalDebuggerCommandArguments>--path "D:\CustomNovels\科学+修仙+创造世界" --dest E:\</LocalDebuggerCommandArguments>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<LocalDebuggerCommandArguments>--path "D:\手作小说\科学+修仙+创造世界"</LocalDebuggerCommandArguments>
<LocalDebuggerCommandArguments>--path "D:\CustomNovels\科学+修仙+创造世界" --dest E:\</LocalDebuggerCommandArguments>
<DebuggerFlavor>WindowsLocalDebugger</DebuggerFlavor>
<LocalDebuggerWorkingDirectory>$(SolutionDir)$(Platform)\$(Configuration)\</LocalDebuggerWorkingDirectory>
</PropertyGroup>

View File

@ -15,10 +15,6 @@ std::tuple<std::shared_ptr<const Expression>, std::shared_ptr<const IWordBase>>
if (!head)
throw new InputTerminal(rt_inst->currentFile());
if (head->content() == u8"初遇江枫的") {
qDebug() << u8"初遇江枫的";
}
auto match_result = define_peer->analysis(head);
if (std::get<0>(match_result)) {
rt_inst->currentInst()->addToken(std::get<0>(match_result));

View File

@ -30,16 +30,17 @@ QList<std::shared_ptr<const IWordBase>> WordReader::extract_from(const QString&
QList<std::shared_ptr<const IWordBase>> ret_list;
int line_number = 1;
while (!tin.atEnd()) {
auto doc_pos = tin.pos();
uint64_t relative_offset = line_number;
relative_offset = relative_offset << 32;
auto line = tin.readLine() + "\n";
ret_list.append(this->parse_line(doc_pos, line_number++, line, path));
ret_list.append(this->parse_line(relative_offset, line_number++, line, path));
}
return ret_list;
}
#include <QRegExp>
QList<std::shared_ptr<const IWordBase>> WordReader::parse_line(int start_pos, int row, const QString& line_text, const QString& path) const {
QList<std::shared_ptr<const IWordBase>> WordReader::parse_line(uint64_t start_pos, int row, const QString& line_text, const QString& path) const {
QRegExp split_char(u8"\\s");
auto words = line_text.split(split_char, QString::SplitBehavior::SkipEmptyParts);
@ -60,12 +61,12 @@ TokenException::TokenException(const QString& message) : msg_store(message) {}
QString TokenException::message() const { return msg_store; }
WordContent::WordContent(int r, int c, int pos, const QString& t, const QString& p)
WordContent::WordContent(int r, int c, uint64_t pos, const QString& t, const QString& p)
: row_n(r), col_n(c), doc_offset(pos), text_n(t), path_p(p) {}
QString WordContent::file() const { return path_p; }
int lib_token::WordContent::position() const {
uint64_t lib_token::WordContent::position() const {
return doc_offset;
}
@ -87,7 +88,7 @@ QString WordImpl::file() const
return content_ptr->file();
}
int lib_token::WordImpl::position() const {
uint64_t lib_token::WordImpl::position() const {
return content_ptr->position();
}

View File

@ -20,7 +20,7 @@ namespace lib_token {
* @brief
* @return
*/
virtual int position() const = 0;
virtual uint64_t position() const = 0;
/**
* @brief
* @return
@ -49,16 +49,17 @@ namespace lib_token {
*/
class WordContent : public IWordBase {
private:
int row_n, col_n, doc_offset;
int row_n, col_n;
uint64_t doc_offset;
QString text_n, path_p;
public:
WordContent(int r, int c, int pos, const QString& t, const QString& p);
WordContent(int r, int c, uint64_t pos, const QString& t, const QString& p);
// WordBase interface
public:
virtual QString file() const override;
virtual int position() const override;
virtual uint64_t position() const override;
virtual QString content() const override;
virtual int row() const override;
virtual int column() const override;
@ -75,7 +76,7 @@ namespace lib_token {
// 通过 IWordBase 继承
QString file() const override;
virtual int position() const override;
virtual uint64_t position() const override;
QString content() const override;
int row() const override;
int column() const override;
@ -143,7 +144,7 @@ namespace lib_token {
*/
class LIBTOKEN_EXPORT WordReader {
private:
QList<std::shared_ptr<const IWordBase>> parse_line(int start_pos, int row, const QString& line_text, const QString& path) const;
QList<std::shared_ptr<const IWordBase>> parse_line(uint64_t start_pos, int row, const QString& line_text, const QString& path) const;
QList<std::shared_ptr<const IWordBase>> extract_from(const QString& path) const;
public:

View File

@ -4,12 +4,12 @@ using namespace example_novel;
using namespace lib_token;
TokenContent::TokenContent(int r, int c, int pos, const QString& t, const QString& p, std::shared_ptr<const ITokenDefine> paramType)
TokenContent::TokenContent(int r, int c, uint64_t pos, const QString& t, const QString& p, std::shared_ptr<const ITokenDefine> paramType)
: row_n(r), col_n(c), doc_offset(pos), text_n(t), path_p(p), type_def(paramType) {}
QString TokenContent::file() const { return path_p; }
int lib_token::TokenContent::position() const {
uint64_t lib_token::TokenContent::position() const {
return doc_offset;
}

View File

@ -18,12 +18,12 @@ namespace lib_token {
std::shared_ptr<const ITokenDefine> type_def;
public:
TokenContent(int r, int c, int pos, const QString& t, const QString& p, std::shared_ptr<const ITokenDefine> paramType);
TokenContent(int r, int c, uint64_t pos, const QString& t, const QString& p, std::shared_ptr<const ITokenDefine> paramType);
// WordBase interface
public:
virtual QString file() const override;
virtual int position() const override;
virtual uint64_t position() const override;
virtual QString content() const override;
virtual int row() const override;
virtual int column() const override;

Binary file not shown.

Binary file not shown.

Binary file not shown.