#pragma once #include "libparse.h" #include namespace example_novel { class LIBPARSE_EXPORT FragmentExistsCheck : public lib_parse::CheckProvider { private: void exists_check(std::shared_ptr root, std::shared_ptr target) const; public: // 通过 CheckProvider 继承 virtual void validCheck(std::shared_ptr root) const override; virtual QString name() const override { return u8"FragmentExistsCheck"; } }; class StorySortHelper; class FragmentSortHelper; class LIBPARSE_EXPORT FragmentOrdersCheck : public lib_parse::CheckProvider { protected: QList> stories_list; void elements_link_build(const QList>& stories); 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) const; // CheckProvider interface public: virtual void validCheck(std::shared_ptr root) const override; virtual QString name() const override { return u8"FragmentOrdersCheck"; } }; /** * @brief 情节排序辅助类 */ class LIBPARSE_EXPORT FragmentSortHelper : public std::enable_shared_from_this { public: enum class Type { REFER, ELEMENT }; FragmentSortHelper(std::shared_ptr node_bind, int story_sort); Type nodeType() const; std::shared_ptr nodeBind() const; int storySort() const; std::shared_ptr next() const; void attachNext(std::shared_ptr fragment); void assignSibling(std::shared_ptr other); QList> siblings() const; private: Type type_marks; int story_sort; std::shared_ptr element_bind; std::shared_ptr next_attachment; QList> siblings_store; }; /** * @brief 故事排序辅助类 */ class LIBPARSE_EXPORT StorySortHelper { private: std::shared_ptr story_bind; std::shared_ptr fragments_bind; public: StorySortHelper(std::shared_ptr story_bind); std::shared_ptr storyElement() const; QString storyName() const; int sortValue() const; std::shared_ptr fragmentSort() const; void attachFragmentSort(std::shared_ptr refer); std::shared_ptr fragment(const QString& name) const; }; } // namespace example_novel