Finished interface class for auto-generated time dependencies code.

This commit is contained in:
Iron Prando da Silva
2021-12-09 12:43:19 +01:00
parent 471adee1be
commit 5d2e48b403
2 changed files with 77 additions and 26 deletions

View File

@@ -8,18 +8,26 @@ DRAMTimeDependenciesIF::DRAMTimeDependenciesIF(const TraceDB& tdb) {
}
QMap<QString, PhaseTimeDependencies>
DRAMTimeDependenciesIF::getDependencies(const std::vector<QString>& commands) const {
QMap<QString, PhaseTimeDependencies> dependenciesMap;
std::map<QString, PhaseTimeDependencies>
DRAMTimeDependenciesIF::getDependencies(std::vector<QString>& dependencyFilter) const {
std::map<QString, PhaseTimeDependencies> dependenciesMap;
std::sort(
dependencyFilter.begin(),
dependencyFilter.end(),
[](const QString& s1, const QString& s2) {
return s1.compare(s2);
}
);
dependenciesMap = mSpecializedGetDependencies();
mFilterDependencyMap(dependenciesMap, commands);
mFilterDependencyMap(dependenciesMap, dependencyFilter);
auto it = dependenciesMap.begin();
while (it != dependenciesMap.end()) {
mFilterDependencyList(it.value().dependencies, commands);
it.value().maxTime = mFindVectorMaximum(it.value().dependencies);
mFilterDependencyList(it->second.dependencies, dependencyFilter);
it->second.maxTime = mFindVectorMaximum(it->second.dependencies);
}
return dependenciesMap;
@@ -39,24 +47,26 @@ void DRAMTimeDependenciesIF::mGetMemspec(const TraceDB& tdb) {
}
void DRAMTimeDependenciesIF::mFilterDependencyList(std::vector<TimeDependency>& dependencyList, const std::vector<QString>& commands) const {
void DRAMTimeDependenciesIF::mFilterDependencyList(std::vector<TimeDependency>& dependencyList, const std::vector<QString>& dependencyFilter) const {
std::vector<TimeDependency> newDepList(dependencyList.size());
std::copy_if(
dependencyList.begin(),
dependencyList.end(),
newDepList.begin(),
[ commands ](const TimeDependency& dep) {
return dep.phaseDep == "NAW"
|| (
std::find_if(
commands.begin(),
commands.end(),
[ dep ](const QString& cmd) {
return dep.phaseDep == cmd;
}
) != commands.end() )
;
[ dependencyFilter ](const TimeDependency& dep) {
auto it = std::lower_bound(
dependencyFilter.begin(),
dependencyFilter.end(),
dep.phaseDep,
[](const QString& cmd, const QString& value) {
return value.compare(cmd);
}
);
if (it != dependencyFilter.end() && *it == dep.phaseDep) return true;
return false;
}
);
@@ -66,8 +76,46 @@ void DRAMTimeDependenciesIF::mFilterDependencyList(std::vector<TimeDependency>&
}
void DRAMTimeDependenciesIF::mFilterDependencyMap(QMap<QString, PhaseTimeDependencies>& dependencyList, const std::vector<QString>& commands) const {
// TODO
void DRAMTimeDependenciesIF::mFilterDependencyMap(std::map<QString, PhaseTimeDependencies>& dependencyMap, const std::vector<QString>& dependencyFilter) const {
if (!dependencyMap.empty()) {
auto itFilter = dependencyFilter.begin();
auto itFilterLast = std::lower_bound(
dependencyFilter.begin(),
dependencyFilter.end(),
dependencyMap.rbegin()->first
);
auto itDependencyMap = dependencyMap.begin();
while (true) {
auto pair = std::mismatch(
itFilter,
itFilterLast,
itDependencyMap,
[](const QString& cmd, const std::pair<QString, PhaseTimeDependencies>& vpair) {
return cmd == vpair.first;
}
);
if (pair.first == dependencyFilter.end() || pair.second == dependencyMap.end()) {
dependencyMap.erase(pair.second, dependencyMap.end());
break;
} else if (pair.first->compare(pair.second->first) < 0) {
++(pair.first);
} else {
pair.second = dependencyMap.erase(pair.second);
}
itFilter = pair.first;
itDependencyMap = pair.second;
}
}
}
size_t DRAMTimeDependenciesIF::mFindVectorMaximum(const std::vector<TimeDependency>& dependencyList) const {

View File

@@ -3,7 +3,7 @@
#include <algorithm>
#include <vector>
#include <QMap>
#include <map>
#include <QJsonObject>
#include "data/tracedb.h"
@@ -27,17 +27,20 @@ public:
DRAMTimeDependenciesIF(const TraceDB& tdb);
virtual ~DRAMTimeDependenciesIF() = default;
QMap<QString, PhaseTimeDependencies> getDependencies(const std::vector<QString>& commands) const;
std::map<QString, PhaseTimeDependencies> getDependencies(std::vector<QString>& dependencyFilter) const;
protected:
void mFilterDependencyList(std::vector<TimeDependency>& dependencyList, const std::vector<QString>& commands) const;
void mFilterDependencyMap(QMap<QString, PhaseTimeDependencies>& dependencyList, const std::vector<QString>& commands) const;
void mFilterDependencyList(std::vector<TimeDependency>& dependencyList, const std::vector<QString>& dependencyFilter) const;
void mFilterDependencyMap(std::map<QString, PhaseTimeDependencies>& dependencyMap, const std::vector<QString>& dependencyFilter) const;
size_t mFindVectorMaximum(const std::vector<TimeDependency>& dependencyList) const;
protected:
QJsonObject mMemspecJson;
// To be implemented
protected:
virtual void mInitializeValues() = 0;
virtual QMap<QString, PhaseTimeDependencies> mSpecializedGetDependencies() const = 0;
virtual std::map<QString, PhaseTimeDependencies> mSpecializedGetDependencies() const = 0;
private:
void mGetMemspec(const TraceDB& tdb);