#pragma once #include "Pgsql_oids.h" #include #include class PgClass; class TableNode; class IFindParents; class TableTreeBuilder { public: TableTreeBuilder(const std::map &source, const IFindParents &inheritance); std::tuple, std::map>> Build(); private: const std::map &source; const IFindParents &inheritance; std::map> processedNodes; std::shared_ptr rootNode; bool hasParent(const PgClass &cls) const; std::shared_ptr addNode(const PgClass &cls); void addToToplevel(std::shared_ptr node); void addToParents(std::shared_ptr node, const std::vector &parents); std::shared_ptr getParent(Oid oid); void AssignNodeIndexesAndParents(std::shared_ptr parent); };