summaryrefslogtreecommitdiff
path: root/Simulator/include/modeling/Room.h
diff options
context:
space:
mode:
Diffstat (limited to 'Simulator/include/modeling/Room.h')
-rw-r--r--Simulator/include/modeling/Room.h52
1 files changed, 52 insertions, 0 deletions
diff --git a/Simulator/include/modeling/Room.h b/Simulator/include/modeling/Room.h
new file mode 100644
index 00000000..a57b045e
--- /dev/null
+++ b/Simulator/include/modeling/Room.h
@@ -0,0 +1,52 @@
+#pragma once
+#include "modeling/Rack.h"
+#include "modeling/TypeIndex.h"
+
+#include <vector>
+
+namespace Modeling
+{
+ /*
+ The Room class models the rooms that can be created in the simulation. It contains a list of all entities in the room.
+ */
+ template<typename ...EntityTypes>
+ class Room
+ {
+ //static_assert(std::is_base_of<Entity, EntityTypes>..., "Each type must be derived from Entity!");
+ public:
+ /*
+ Initializes the room with the given name.
+ */
+ explicit Room(int id) : id(id) {}
+
+ /*
+ Adds the entity to the list of entities in this room.
+ */
+ template<typename EntityType>
+ void addEntity(EntityType& e)
+ {
+ std::get<indexOfType<EntityType, EntityTypes...>::value>(entities).push_back(e);
+ }
+
+ /*
+ Returns all entities of the given type.
+ */
+ template<typename EntityType>
+ std::vector<EntityType>& getEntitiesOfType()
+ {
+ return std::get<indexOfType<EntityType, EntityTypes...>::value>(entities);
+ }
+
+ // The id of this room corresponding to its id in the database.
+ const int id;
+
+ private:
+ // A vector for each type of entity
+ std::tuple<std::vector<EntityTypes>...> entities;
+ };
+
+ using ServerRoom = Room<Modeling::Rack>;
+ using Hallway = Room<>;
+ using PowerRoom = Room<>;
+
+}