Hymn to Beauty
C++ 3D Engine
ComponentContainer.hpp
Go to the documentation of this file.
1#pragma once
2
3#include <functional>
4#include <vector>
5
7template <class C> class ComponentContainer {
8 public:
11
14
16
19 C* Create();
20
22 void ClearKilled();
23
26
30 void ClearKilled(const std::function<void(C*)>& preRemove);
31
33
36 const std::vector<C*>& GetAll() const;
37
38 private:
39 std::vector<C*> components;
40};
41
43
45 for (C* component : components)
46 delete component;
47}
48
49template <class C> C* ComponentContainer<C>::Create() {
50 C* component = new C();
51 components.push_back(component);
52 return component;
53}
54
55template <class C> void ComponentContainer<C>::ClearKilled() {
56 ClearKilled([](C*) {});
57}
58
59template <class C> void ComponentContainer<C>::ClearKilled(const std::function<void(C*)>& preRemove) {
60 // Clear killed components.
61 std::size_t i = 0;
62 while (i < components.size()) {
63 if (components[i]->IsKilled()) {
64 preRemove(components[i]);
65 delete components[i];
66 components[i] = components[components.size() - 1];
67 components.pop_back();
68 } else {
69 ++i;
70 }
71 }
72}
73
74template <class C> const std::vector<C*>& ComponentContainer<C>::GetAll() const {
75 return components;
76}
Stores components.
Definition: ComponentContainer.hpp:7
void ClearKilled()
Clear all killed components.
Definition: ComponentContainer.hpp:55
const std::vector< C * > & GetAll() const
Get all components.
Definition: ComponentContainer.hpp:74
C * Create()
Create a new component.
Definition: ComponentContainer.hpp:49
ComponentContainer()
Create new component container.
Definition: ComponentContainer.hpp:42
~ComponentContainer()
Destructor.
Definition: ComponentContainer.hpp:44