#ifndef QUERY_ENTITY_HPP #define QUERY_ENTITY_HPP #include namespace matador::sql { template < class Type > class entity { public: using value_type = Type; using pointer = value_type*; using reference = value_type&; entity() = default; explicit entity(Type *obj) : obj_(obj) {} entity(const entity&) = default; entity& operator=(const entity&) = default; entity(entity&&) noexcept = default; entity& operator=(entity&&) noexcept = default; ~entity() = default; void reset(Type *obj) { obj_.reset(obj); } pointer operator->() { return obj_.get(); } const value_type* operator->() const { return obj_.get(); } reference operator*() { return *obj_; } const value_type& operator*() const { return *obj_; } pointer get() { return obj_.get(); } const value_type* get() const { return obj_.get(); } operator bool() const { return obj_.get() != nullptr; } // NOLINT(*-explicit-constructor) private: std::shared_ptr obj_; }; template [[maybe_unused]] entity make_entity(Args&&... args) { return entity(new Type(std::forward(args)...)); } } #endif //QUERY_ENTITY_HPP