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>
|
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 {
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
Reference in New Issue
Block a user