// Copyright (C) 2018-2025 Intel Corporation // SPDX-License-Identifier: Apache-2.0 // #pragma once #include #include #include #include #include #include "openvino/core/node.hpp" namespace ov { /** * @brief Run-time opset information * @ingroup ov_opset_cpp_api */ class OPENVINO_API OpSet { public: OpSet() = default; OpSet(const std::string& name); OpSet(const OpSet& opset); virtual ~OpSet(); OpSet& operator=(const OpSet& opset); std::set::size_type size() const; /// \brief Insert OP_TYPE into the opset with a special name and the default factory template void insert(const std::string& name) { std::lock_guard guard(opset_mutex); insert(name, OP_TYPE::get_type_info_static(), get_op_default_ctor()); } /// \brief Insert OP_TYPE into the opset with the default name and factory template void insert() { insert(OP_TYPE::get_type_info_static().name); } const std::set& get_types_info() const; /// \brief Create the op named name using it's factory ov::Node* create(const std::string& name) const; /// \brief Create the op named name using it's factory ov::Node* create_insensitive(const std::string& name) const; /// \brief Return true if OP_TYPE is in the opset bool contains_type(const NodeTypeInfo& type_info) const; /// \brief Return true if OP_TYPE is in the opset template bool contains_type() const { return contains_type(OP_TYPE::get_type_info_static()); } /// \brief Return true if name is in the opset bool contains_type(const std::string& name) const; /// \brief Return true if name is in the opset bool contains_type_insensitive(const std::string& name) const; /// \brief Return true if node's type is in the opset bool contains_op_type(const Node* node) const; const std::set& get_type_info_set() const; protected: /// \brief Factory function which create object using default ctor. using DefaultOp = std::function; /// \brief Factory map hold object type_info as key and Factory function. using FactoryMap = std::unordered_map; /// \brief Insert an op into the opset void insert(const std::string& name, const NodeTypeInfo& type_info, DefaultOp func); FactoryMap m_factory_registry; private: /// \brief Get the default factory for OP_TYPE. Specialize as needed. template static DefaultOp get_op_default_ctor() { return [] { return new OP_TYPE(); }; } static std::string to_upper_name(const std::string& name); std::string m_name; std::set m_op_types; std::map m_name_type_info_map; std::map m_case_insensitive_type_info_map; mutable std::mutex opset_mutex; }; /** * @brief Returns opset1 * @ingroup ov_opset_cpp_api */ const OPENVINO_API OpSet& get_opset1(); /** * @brief Returns opset2 * @ingroup ov_opset_cpp_api */ const OPENVINO_API OpSet& get_opset2(); /** * @brief Returns opset3 * @ingroup ov_opset_cpp_api */ const OPENVINO_API OpSet& get_opset3(); /** * @brief Returns opset4 * @ingroup ov_opset_cpp_api */ const OPENVINO_API OpSet& get_opset4(); /** * @brief Returns opset5 * @ingroup ov_opset_cpp_api */ const OPENVINO_API OpSet& get_opset5(); /** * @brief Returns opset6 * @ingroup ov_opset_cpp_api */ const OPENVINO_API OpSet& get_opset6(); /** * @brief Returns opset7 * @ingroup ov_opset_cpp_api */ const OPENVINO_API OpSet& get_opset7(); /** * @brief Returns opset8 * @ingroup ov_opset_cpp_api */ const OPENVINO_API OpSet& get_opset8(); /** * @brief Returns opset9 * @ingroup ov_opset_cpp_api */ const OPENVINO_API OpSet& get_opset9(); /** * @brief Returns opset10 * @ingroup ov_opset_cpp_api */ const OPENVINO_API OpSet& get_opset10(); /** * @brief Returns opset11 * @ingroup ov_opset_cpp_api */ const OPENVINO_API OpSet& get_opset11(); /** * @brief Returns opset12 * @ingroup ov_opset_cpp_api */ const OPENVINO_API OpSet& get_opset12(); /** * @brief Returns opset13 * @ingroup ov_opset_cpp_api */ const OPENVINO_API OpSet& get_opset13(); /** * @brief Returns opset14 * @ingroup ov_opset_cpp_api */ const OPENVINO_API OpSet& get_opset14(); /** * @brief Returns opset15 * @ingroup ov_opset_cpp_api */ const OPENVINO_API OpSet& get_opset15(); /** * @brief Returns opset16 * @ingroup ov_opset_cpp_api */ const OPENVINO_API OpSet& get_opset16(); /** * @brief Returns map of available opsets * @ingroup ov_opset_cpp_api */ const OPENVINO_API std::map>& get_available_opsets(); } // namespace ov