Cogs.Core
ComponentPtr.h
1#pragma once
2
3#include "Entity.h"
4
6namespace Cogs {
7 namespace ComponentModel
8 {
15 template<typename ComponentType>
17 {
18 static_assert(std::is_base_of<Component, ComponentType>::value, "<ComponentType> not derived from Component");
19 public:
20 typedef ComponentType value_type;
21
22 ComponentPtr() = default;
23
25 ComponentPtr(const std::shared_ptr<Entity> & owner)
26 : owner(owner)
27 {
28 }
29
31 ComponentPtr(std::shared_ptr<Entity> && owner) noexcept
32 : owner(std::move(owner))
33 {
34 }
35
38 : owner(source.owner)
39 {
40 }
41
44 : owner(std::move(source.owner))
45 {
46 }
47
49 constexpr ComponentPtr(std::nullptr_t)
50 {
51 }
52
53
55 {
56 owner = rhs.owner;
57 return *this;
58 }
59
60 ComponentPtr<ComponentType> & operator=(ComponentPtr<ComponentType> && rhs) noexcept
61 {
62 owner = std::move(rhs.owner);
63 return *this;
64 }
65
66 ComponentType * get() const
67 {
68 return owner->getComponent<ComponentType>();
69 }
70
71 ComponentType * operator ->() const
72 {
73 return get();
74 }
75
79 operator bool() const { return owner != nullptr && operator->() != nullptr; }
80
82 [[nodiscard]] constexpr bool operator==(const ComponentPtr<ComponentType> & other) const { return owner == other.owner; }
83
85 void reset()
86 {
87 owner.reset();
88 }
89
91 std::shared_ptr<Entity> getEntity() const { return owner; }
92
93 private:
94 std::shared_ptr<Entity> owner;
95 };
96 }
97}
A shared_pointer type pointer to a component in an entity.
Definition: ComponentPtr.h:17
constexpr ComponentPtr(std::nullptr_t)
Construct empty instance.
Definition: ComponentPtr.h:49
std::shared_ptr< Entity > getEntity() const
Get the owning entity.
Definition: ComponentPtr.h:91
ComponentPtr(std::shared_ptr< Entity > &&owner) noexcept
Initializes a component pointer for component in the given entity.
Definition: ComponentPtr.h:31
void reset()
Reset to empty.
Definition: ComponentPtr.h:85
ComponentPtr(const std::shared_ptr< Entity > &owner)
Initializes a component pointer for component in the given entity.
Definition: ComponentPtr.h:25
constexpr bool operator==(const ComponentPtr< ComponentType > &other) const
Comparison operator. If the entity of both objects are equal the objects are considered equal.
Definition: ComponentPtr.h:82
ComponentPtr(const ComponentPtr< ComponentType > &source)
Initializes a component pointer as a copy constructor.
Definition: ComponentPtr.h:37
ComponentPtr(ComponentPtr< ComponentType > &&source) noexcept
Initializes a component pointer using RValue constructor.
Definition: ComponentPtr.h:43
Contains all Cogs related functionality.
Definition: FieldSetter.h:23