Finished interface class for auto-generated time dependencies code.
This commit is contained in:
@@ -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 {
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user