entitymanager.h
Go to the documentation of this file.
1 #ifndef DNAI_CORE_ENTITYMANAGER_H
2 #define DNAI_CORE_ENTITYMANAGER_H
3 
4 #include <unordered_map>
5 
6 #include <QObject>
7 
8 #include "core.h"
9 #include "dnai/models/entity.h"
10 
11 namespace dnai
12 {
13  namespace gcore
14  {
15  class EntityManager : public QObject
16  {
17  Q_OBJECT
18 
19  private:
20  using EntityMap = std::unordered_map<::core::EntityID, models::Entity *>;
21  using GUIEntityMap = QHash<QUuid, models::Entity *>;
22 
23  public:
24  EntityManager() = default;
25  ~EntityManager() = default;
26 
27  public:
28  void setup();
29 
30  signals:
31  void entityAdded(::core::EntityID id, models::Entity &entity);
32  void entityRemoved(::core::EntityID id, models::Entity &entity);
33 
34  public:
35  void addEntity(::core::EntityID id, models::Entity &entity);
36  void removeEntity(::core::EntityID id);
37 
38  bool contains(::core::EntityID id) const;
39  bool contains(QUuid const &guid) const;
40 
41  const models::Entity &getEntity(::core::EntityID id) const;
42  const models::Entity *getEntity(QUuid const &id) const;
43  models::Entity &getEntity(::core::EntityID id);
44  models::Entity *getEntity(QUuid const &id);
45 
46  const models::Entity *findByFullname(QString const &fullName) const;
47  models::Entity *findByFullname(QString const &fullName);
48 
49  const models::Entity &operator[](::core::EntityID id) const;
50  models::Entity &operator[](::core::EntityID id);
51 
52  private:
55 
56  /*
57  * Iterator
58  */
59  public:
60  class iterator : public std::iterator<std::bidirectional_iterator_tag, models::Entity>
61  {
62  private:
63  friend class EntityManager;
64 
65  iterator(typename EntityMap::iterator const &it);
66 
67  public:
68  iterator() = default;
69  iterator(iterator const &ref);
70  ~iterator() = default;
71  iterator &operator=(iterator const &ref);
72 
73  public:
75  iterator operator++(int);
76  bool operator==(iterator const &ref) const;
77  bool operator!=(iterator const &ref) const;
78  reference operator*() const;
79  pointer operator->() const;
80 
81  private:
82  typename EntityMap::iterator it;
83  };
84 
86  {
87  return iterator(entities.begin());
88  }
89 
91  {
92  return iterator(entities.end());
93  }
94 
95  /*
96  * Const iterator
97  */
98  public:
99  class const_iterator : public std::iterator<std::bidirectional_iterator_tag, const models::Entity>
100  {
101  private:
102  friend class EntityManager;
103 
104  const_iterator(typename EntityMap::const_iterator const &it);
105 
106  public:
107  const_iterator() = default;
108  const_iterator(const_iterator const &ref);
109  ~const_iterator() = default;
111 
112  public:
115  bool operator==(const_iterator const &ref) const;
116  bool operator!=(const_iterator const &ref) const;
117  reference operator*() const;
118  pointer operator->() const;
119 
120  private:
121  typename EntityMap::const_iterator it;
122  };
123 
125  {
126  return const_iterator(entities.begin());
127  }
128 
130  {
131  return const_iterator(entities.end());
132  }
133  };
134  }
135 }
136 
137 #endif // ENTITYMANAGER_H
const models::Entity & getEntity(::core::EntityID id) const
Definition: entitymanager.cpp:44
const_iterator & operator++()
Definition: entitymanager.cpp:171
bool contains(::core::EntityID id) const
Definition: entitymanager.cpp:34
void setup()
Definition: entitymanager.cpp:7
pointer operator->() const
Definition: entitymanager.cpp:200
Definition: entitymanager.h:60
bool operator!=(iterator const &ref) const
Definition: entitymanager.cpp:134
reference operator*() const
Definition: entitymanager.cpp:139
iterator begin()
Definition: entitymanager.h:85
const models::Entity * findByFullname(QString const &fullName) const
Definition: entitymanager.cpp:64
Definition: entitymanager.h:15
iterator end()
Definition: entitymanager.h:90
bool operator==(iterator const &ref) const
Definition: entitymanager.cpp:129
void addEntity(::core::EntityID id, models::Entity &entity)
Definition: entitymanager.cpp:16
EntityMap entities
Definition: entitymanager.h:53
std::unordered_map<::core::EntityID, models::Entity * > EntityMap
Definition: entitymanager.h:20
GUIEntityMap g_entities
Definition: entitymanager.h:54
bool operator==(const_iterator const &ref) const
Definition: entitymanager.cpp:185
iterator & operator++()
Definition: entitymanager.cpp:115
EntityMap::const_iterator it
Definition: entitymanager.h:121
void entityRemoved(::core::EntityID id, models::Entity &entity)
Definition: moc_entitymanager.cpp:147
Definition: entitymanager.h:99
EntityMap::iterator it
Definition: entitymanager.h:82
const_iterator end() const
Definition: entitymanager.h:129
const_iterator & operator=(const_iterator const &ref)
Definition: entitymanager.cpp:165
bool operator!=(const_iterator const &ref) const
Definition: entitymanager.cpp:190
QHash< QUuid, models::Entity * > GUIEntityMap
Definition: entitymanager.h:21
reference operator*() const
Definition: entitymanager.cpp:195
void entityAdded(::core::EntityID id, models::Entity &entity)
Definition: moc_entitymanager.cpp:140
Definition: api.h:13
const_iterator begin() const
Definition: entitymanager.h:124
void removeEntity(::core::EntityID id)
Definition: entitymanager.cpp:24
Definition: entity.h:71
pointer operator->() const
Definition: entitymanager.cpp:144
iterator & operator=(iterator const &ref)
Definition: entitymanager.cpp:109
const models::Entity & operator[](::core::EntityID id) const
Definition: entitymanager.cpp:84