From a3e255a991420abd99ff99d274bdc4841b6a54cb Mon Sep 17 00:00:00 2001
From: codeboss <2422523675@qq.com>
Date: Sat, 4 May 2024 23:34:21 +0800
Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E7=AE=97=E6=B3=95=E6=94=B9?=
=?UTF-8?q?=E8=BF=9B?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
WsNovelParser/WsNovelParser.vcxproj.user | 4 +--
libParse/libParse.vcxproj.user | 4 +--
libParse/parse_novel.cpp | 46 ++++++++++++++++--------
libParse/parse_novel.h | 2 +-
libSyntax/libSyntax.vcxproj.user | 4 +--
libToken/libToken.vcxproj.user | 4 +--
6 files changed, 41 insertions(+), 23 deletions(-)
diff --git a/WsNovelParser/WsNovelParser.vcxproj.user b/WsNovelParser/WsNovelParser.vcxproj.user
index d23b474..854e739 100644
--- a/WsNovelParser/WsNovelParser.vcxproj.user
+++ b/WsNovelParser/WsNovelParser.vcxproj.user
@@ -6,9 +6,9 @@
-path "D:\手作小说\科学+修仙+创造世界"
- 2024-05-04T09:33:58.7289365Z
+ 2024-05-04T13:29:44.1342154Z
- 2024-05-04T09:33:58.9501188Z
+ 2024-05-04T13:29:44.5012357Z
\ No newline at end of file
diff --git a/libParse/libParse.vcxproj.user b/libParse/libParse.vcxproj.user
index 60dd58e..bd0d99d 100644
--- a/libParse/libParse.vcxproj.user
+++ b/libParse/libParse.vcxproj.user
@@ -5,9 +5,9 @@
WindowsLocalDebugger
- 2024-05-04T09:33:59.3486956Z
+ 2024-05-04T13:29:47.7605591Z
- 2024-05-04T09:33:59.5091441Z
+ 2024-05-04T13:29:47.9767101Z
\ No newline at end of file
diff --git a/libParse/parse_novel.cpp b/libParse/parse_novel.cpp
index e5edd4e..43564cc 100644
--- a/libParse/parse_novel.cpp
+++ b/libParse/parse_novel.cpp
@@ -122,39 +122,51 @@ void FragmentOrdersCheck::elements_link_build(const QList>& tracks, std::shared_ptr current, int story_sort_source)
+template
+void cast(InputIt Begin, InputIt End, OutputIt Dst, Operate fn) {
+ while (Begin != End) {
+ *Dst++ = fn(*Begin++);
+ }
+}
+
+
+void FragmentOrdersCheck::sort_cycle_check(const QList>& tracks, std::shared_ptr _current, int story_sort_source)
{
- if (!current)
+ if (!_current || !_current->next())
return;
- if (tracks.contains(current)) {
+ auto target = _current->next();
+
+ if (tracks.contains(peaks_appoint_element(target))) {
QString error_cycle;
for (auto& it : tracks)
error_cycle += u8"->" + it->nodeBind()->element()->signature() + u8"\n";
- error_cycle += u8"->" + current->nodeBind()->element()->signature() + u8"";
+ error_cycle += u8"->" + target->nodeBind()->element()->signature() + u8"";
throw new lib_parse::CheckException(u8"Parse[0x0003]쳣\n" + error_cycle);
}
auto nlist = tracks;
+ nlist.append(peaks_appoint_element(target));
- if (current->nodeType() == example_novel::FragmentSortHelper::Type::REFER) {
- decltype (current->siblings()) fork_list;
- for (auto& vit : current->siblings()) {
+ if (target->nodeType() == example_novel::FragmentSortHelper::Type::REFER) {
+ decltype (target->siblings()) sibling_forks;
+
+ auto siblings = target->siblings();
+ for (auto& vit : siblings) {
if (vit->storySort() <= story_sort_source)
- fork_list << vit;
+ sibling_forks << vit;
}
- for (auto& fork : fork_list) {
+ for (auto& fork : sibling_forks) {
sort_cycle_check(nlist, fork, story_sort_source);
}
}
- nlist.append(peaks_appoint_element(current));
- sort_cycle_check(nlist, current->next(), story_sort_source);
+ sort_cycle_check(nlist, target, story_sort_source);
}
-std::shared_ptr example_novel::FragmentOrdersCheck::peaks_appoint_element(std::shared_ptr refer_n)
+std::shared_ptr example_novel::FragmentOrdersCheck::peaks_appoint_element(std::shared_ptr refer_n) const
{
if (refer_n->nodeType() == example_novel::FragmentSortHelper::Type::ELEMENT)
return refer_n;
@@ -230,8 +242,14 @@ void FragmentOrdersCheck::validCheck(std::shared_ptr(this)->elements_link_build(this->stories_list);
- for (auto& s : this->stories_list)
- const_cast(this)->sort_cycle_check(QList>(), s->fragmentSort(), s->sortValue());
+ for (auto& s : this->stories_list) {
+ if(!s->fragmentSort())
+ continue;
+
+ QList> tracks;
+ tracks << peaks_appoint_element(s->fragmentSort());
+ const_cast(this)->sort_cycle_check(tracks, s->fragmentSort(), s->sortValue());
+ }
}
StorySortHelper::StorySortHelper(std::shared_ptr story_bind) {
diff --git a/libParse/parse_novel.h b/libParse/parse_novel.h
index 9902e5c..ecd761b 100644
--- a/libParse/parse_novel.h
+++ b/libParse/parse_novel.h
@@ -25,7 +25,7 @@ namespace example_novel {
void sort_cycle_check(const QList>& tracks, std::shared_ptr current,
int story_sort_source);
- std::shared_ptr peaks_appoint_element(std::shared_ptr refer_n);
+ std::shared_ptr peaks_appoint_element(std::shared_ptr refer_n) const;
// CheckProvider interface
public:
diff --git a/libSyntax/libSyntax.vcxproj.user b/libSyntax/libSyntax.vcxproj.user
index 6181bc2..63be189 100644
--- a/libSyntax/libSyntax.vcxproj.user
+++ b/libSyntax/libSyntax.vcxproj.user
@@ -5,9 +5,9 @@
WindowsLocalDebugger
- 2024-05-04T09:33:59.5719569Z
+ 2024-05-04T13:29:47.3997896Z
- 2024-05-04T09:33:59.7159031Z
+ 2024-05-04T13:29:47.5416879Z
\ No newline at end of file
diff --git a/libToken/libToken.vcxproj.user b/libToken/libToken.vcxproj.user
index 507fd1f..b7fb4f7 100644
--- a/libToken/libToken.vcxproj.user
+++ b/libToken/libToken.vcxproj.user
@@ -2,9 +2,9 @@
- 2024-05-04T09:33:59.0218626Z
+ 2024-05-04T13:29:46.3016809Z
- 2024-05-04T09:33:59.1804633Z
+ 2024-05-04T13:29:46.7433247Z
\ No newline at end of file