#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> 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); // 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(); }; } // namespace example_novel