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> std::map<QString, PhaseTimeDependencies>
DRAMTimeDependenciesIF::getDependencies(const std::vector<QString>& commands) const { DRAMTimeDependenciesIF::getDependencies(std::vector<QString>& dependencyFilter) const {
QMap<QString, PhaseTimeDependencies> dependenciesMap; std::map<QString, PhaseTimeDependencies> dependenciesMap;
std::sort(
dependencyFilter.begin(),
dependencyFilter.end(),
[](const QString& s1, const QString& s2) {
return s1.compare(s2);
}
);
dependenciesMap = mSpecializedGetDependencies(); dependenciesMap = mSpecializedGetDependencies();
mFilterDependencyMap(dependenciesMap, commands); mFilterDependencyMap(dependenciesMap, dependencyFilter);
auto it = dependenciesMap.begin(); auto it = dependenciesMap.begin();
while (it != dependenciesMap.end()) { while (it != dependenciesMap.end()) {
mFilterDependencyList(it.value().dependencies, commands); mFilterDependencyList(it->second.dependencies, dependencyFilter);
it.value().maxTime = mFindVectorMaximum(it.value().dependencies); it->second.maxTime = mFindVectorMaximum(it->second.dependencies);
} }
return dependenciesMap; 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::vector<TimeDependency> newDepList(dependencyList.size());
std::copy_if( std::copy_if(
dependencyList.begin(), dependencyList.begin(),
dependencyList.end(), dependencyList.end(),
newDepList.begin(), newDepList.begin(),
[ commands ](const TimeDependency& dep) { [ dependencyFilter ](const TimeDependency& dep) {
return dep.phaseDep == "NAW" auto it = std::lower_bound(
|| ( dependencyFilter.begin(),
std::find_if( dependencyFilter.end(),
commands.begin(), dep.phaseDep,
commands.end(), [](const QString& cmd, const QString& value) {
[ dep ](const QString& cmd) { return value.compare(cmd);
return dep.phaseDep == cmd; }
} );
) != commands.end() )
; 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 { void DRAMTimeDependenciesIF::mFilterDependencyMap(std::map<QString, PhaseTimeDependencies>& dependencyMap, const std::vector<QString>& dependencyFilter) const {
// TODO 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 { size_t DRAMTimeDependenciesIF::mFindVectorMaximum(const std::vector<TimeDependency>& dependencyList) const {

View File

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