#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; }; class FragmentGraphHelper; class LIBPARSE_EXPORT FragmentGraphCheck : public std::enable_shared_from_this, public lib_parse::CheckProvider { private: QHash> elements_store; QList> fragments_sort_list; QList> refers_cycle_check( std::shared_ptr item, QList> prevs = QList>()) const; public: void setElement(std::shared_ptr inst); std::shared_ptr getElement(const QString &signature) const; QList> getHangoutNodes(); bool nodeDismantle(std::shared_ptr inst); QList> fragmentsSequence() const; // CheckProvider interface public: virtual void validCheck(std::shared_ptr root) const override; virtual QString name() const override; }; class FragmentGraphHelper : public std::enable_shared_from_this { private: std::shared_ptr node_peer; QList> next_nodes; uint indegree = 0; public: FragmentGraphHelper(std::shared_ptr node); std::shared_ptr nodePeer() const; void appendNext(std::shared_ptr node); QList> nextList() const; uint& inDegree(); }; class LIBPARSE_EXPORT StoryOrderCheck : public lib_parse::CheckProvider { private: uint sort_index = 1; /** * 获取合适的文档节点. * * \param pnode * \return */ QList> valid_docs_peak(std::shared_ptr pnode) const; public: // 通过 CheckProvider 继承 QString name() const override; void validCheck(std::shared_ptr root) const override; }; } // namespace example_novel