diff options
| author | MDBijman <matthijs@bijman.org> | 2017-01-24 12:15:26 +0100 |
|---|---|---|
| committer | MDBijman <matthijs@bijman.org> | 2017-01-24 12:15:26 +0100 |
| commit | 070ce923574dcc57435cb3fb2dfe86b6a38cd249 (patch) | |
| tree | ffd69a842ac4ad22aaf7161f923b9f0b47c7147a /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.h | 76 |
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; + }; + +} |
