#ifndef MATADOR_OBJECT_HPP #define MATADOR_OBJECT_HPP #include "matador/object/attribute.hpp" #include "matador/object/restriction.hpp" #include "matador/utils/identifier.hpp" #include #include namespace matador::object { class repository; class object { public: explicit object(std::string name); static const attribute& create_attribute(std::string name, const std::shared_ptr& obj); [[nodiscard]] attribute* primary_key_attribute() const; [[nodiscard]] const utils::identifier& primary_key() const; [[nodiscard]] bool has_primary_key() const; [[nodiscard]] const std::string& name() const; void update_name(const std::string& name); [[nodiscard]] bool has_attributes() const; [[nodiscard]] size_t attribute_count() const; [[nodiscard]] const std::list& attributes() const; [[nodiscard]] bool has_constraints() const; [[nodiscard]] size_t constraint_count() const; [[nodiscard]] const std::list& constraints() const; friend std::ostream& operator<<(std::ostream& os, const object& obj); private: friend class constraints_generator; friend class attribute_generator; friend class object_generator; std::string name_; attribute* pk_attribute_{nullptr}; utils::identifier pk_identifier_; std::list attributes_; std::list constraints_; }; } #endif //MATADOR_OBJECT_HPP