#pragma once #include #include #include #include "openvino/core/node.hpp" #include "openvino/pass/pattern/matcher.hpp" namespace ov { namespace pass { /// \brief Register openvino node pointers into container. /// Can create and/or add existing node pointers into register class NodeRegistry { public: /// \brief Make new node and add it to register. /// /// \tparam T Node type. /// \tparam Args Node ctor args types. /// /// \param args New node ctor arguments. /// \return Shared pointer to node of type T. template std::shared_ptr make(Args&&... args) { auto node = std::make_shared(std::forward(args)...); return add(node); } /// \brief Add node to register /// /// \tparam T Node type. /// /// \param node Node to add /// /// \return Shared pointer to new node added of type T. template std::shared_ptr add(const std::shared_ptr& node) { m_nodes.push_back(node); return node; } /// \brief Get nodes container. /// /// \return Const reference to nodes container. const std::vector>& get() const { return m_nodes; } /// \brief Clear register. void clear(); private: std::vector> m_nodes; //!< Stores added nodes. }; } // namespace pass } // namespace ov