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/src/simulation/workloads/WorkloadPool.cpp | |
Initial code commit with organized dependencies
Diffstat (limited to 'Simulator/src/simulation/workloads/WorkloadPool.cpp')
| -rw-r--r-- | Simulator/src/simulation/workloads/WorkloadPool.cpp | 69 |
1 files changed, 69 insertions, 0 deletions
diff --git a/Simulator/src/simulation/workloads/WorkloadPool.cpp b/Simulator/src/simulation/workloads/WorkloadPool.cpp new file mode 100644 index 00000000..c4910c7f --- /dev/null +++ b/Simulator/src/simulation/workloads/WorkloadPool.cpp @@ -0,0 +1,69 @@ +#include "simulation/workloads/WorkloadPool.h" + +#include <iostream> +#include <algorithm> + +namespace Simulation +{ + void WorkloadPool::addWorkload(Workload w) + { + workloads.push_back(w); + } + + std::vector<Workload*> WorkloadPool::getWorkloads(uint32_t currentTick) + { + std::vector<Workload*> filteredOnStarted; + for(Workload& w : workloads) + { + if(w.getStartTick() < currentTick) + filteredOnStarted.push_back(&w); + } + + return filteredOnStarted; + } + + Workload& WorkloadPool::getWorkload(int id) + { + auto it = std::find_if(workloads.begin(), workloads.end(), [id](Workload& w) { + return (id == w.getId()); + }); + + return *it; + } + + void WorkloadPool::clearFinishedWorkloads() + { + auto it = workloads.begin(); + while(it != workloads.end()) + { + if(it->isFinished()) + { + std::cout << "Finished workload " << it->getId() << std::endl; + int id = it->getId(); + setDependenciesFinished(id); + it = workloads.erase(it); + } + else + { + ++it; + } + } + } + + void WorkloadPool::setDependenciesFinished(int id) + { + for(auto& workload : workloads) + { + if(workload.getDependencyId() == id) + { + workload.dependencyFinished = true; + std::cout << "Finished dependency of " << workload.getId() << std::endl; + } + } + } + + bool WorkloadPool::isEmpty() + { + return this->workloads.size() == 0; + } +} |
