48 lines
1.1 KiB
C++
48 lines
1.1 KiB
C++
#ifndef QUERY_ENTITY_HPP
|
|
#define QUERY_ENTITY_HPP
|
|
|
|
#include <memory>
|
|
|
|
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(); }
|
|
|
|
private:
|
|
std::shared_ptr<value_type> obj_;
|
|
};
|
|
|
|
template<class Type, typename... Args>
|
|
[[maybe_unused]] entity<Type> make_entity(Args&&... args)
|
|
{
|
|
return entity(new Type(std::forward<Args>(args)...));
|
|
}
|
|
|
|
}
|
|
#endif //QUERY_ENTITY_HPP
|