#ifndef BASIC_PROTOTYPE_INFO_HPP #define BASIC_PROTOTYPE_INFO_HPP #include "matador/object/object_definition.hpp" #include #include namespace matador::object { class schema_node; class basic_object_info { public: virtual ~basic_object_info() = default; [[nodiscard]] std::type_index type_index() const; [[nodiscard]] std::string name() const; [[nodiscard]] const object_definition& definition() const; [[nodiscard]] std::shared_ptr reference_column() const; protected: basic_object_info(std::type_index type_index, object_definition &&definition, std::shared_ptr &&reference_column); basic_object_info(std::type_index type_index, std::shared_ptr &&reference_column); protected: std::shared_ptr node_; /**< prototype node of the represented object type */ std::type_index type_index_; /**< type index of the represented object type */ object_definition definition_; std::shared_ptr reference_column_; }; using basic_object_info_ref = std::reference_wrapper; } #endif //BASIC_PROTOTYPE_INFO_HPP