summaryrefslogtreecommitdiff
path: root/Simulator/include/simulation/Section.h
diff options
context:
space:
mode:
authorMDBijman <matthijs@bijman.org>2017-01-24 12:15:26 +0100
committerMDBijman <matthijs@bijman.org>2017-01-24 12:15:26 +0100
commit070ce923574dcc57435cb3fb2dfe86b6a38cd249 (patch)
treeffd69a842ac4ad22aaf7161f923b9f0b47c7147a /Simulator/include/simulation/Section.h
Initial code commit with organized dependencies
Diffstat (limited to 'Simulator/include/simulation/Section.h')
-rw-r--r--Simulator/include/simulation/Section.h76
1 files changed, 76 insertions, 0 deletions
diff --git a/Simulator/include/simulation/Section.h b/Simulator/include/simulation/Section.h
new file mode 100644
index 00000000..3c11b073
--- /dev/null
+++ b/Simulator/include/simulation/Section.h
@@ -0,0 +1,76 @@
+#pragma once
+#include "modeling/Datacenter.h"
+#include "modeling/Room.h"
+#include "simulation/history/SimulationHistory.h"
+
+#include <vector>
+#include <iterator>
+
+namespace Simulation
+{
+ /**
+ * \brief Holds a datacenter and the tick on which the parent experiment should switch to this section.
+ * \tparam DatacenterType The type of datacenter to be used.
+ */
+ template<typename DatacenterType>
+ class Section
+ {
+ public:
+ /**
+ * \brief Initializes the datacenter in the simulation. Sets paused to false and finished to false.
+ * \param dc The topology of this section.
+ * \param startTick The tick on which the experiment should start using the topology of this section.
+ */
+ Section(DatacenterType& dc, uint32_t startTick) : datacenter(dc), startTick(startTick)
+ {}
+
+ /**
+ * \return A reference to the datacenter of this section.
+ */
+ DatacenterType& getDatacenter()
+ {
+ return datacenter;
+ }
+
+ /**
+ * \return All machines in the datacenter of section.
+ */
+ std::vector<std::reference_wrapper<Modeling::Machine>> getMachines()
+ {
+ using namespace std;
+
+ vector<reference_wrapper<Modeling::Machine>> machineAccumulator;
+
+ // For each serverroom, we get the racks in the room
+ vector<Modeling::ServerRoom>& rooms = datacenter.template getRoomsOfType<Modeling::ServerRoom>();
+ for(auto& room : rooms)
+ // For each rack get the machines inside that rack
+ for(auto& rack : room.getEntitiesOfType<Modeling::Rack>())
+ // Add each machine to the accumulator
+ for(auto& machine : rack.getMachines())
+ machineAccumulator.push_back(ref(machine.second));
+
+ return machineAccumulator;
+ }
+
+ /**
+ * \return The tick on which the experiment should start using the topology of this section.
+ */
+ uint32_t getStartTick() const
+ {
+ return startTick;
+ }
+
+ private:
+ /**
+ * \brief The datacenter that is used for experiments.
+ */
+ DatacenterType datacenter;
+
+ /**
+ * \brief The tick when the next sections starts. This is -1 if this is the last section.
+ */
+ uint32_t startTick;
+ };
+
+}