diff options
author | Jake Petroules <jake.petroules@qt.io> | 2017-06-28 18:33:54 -0700 |
---|---|---|
committer | Jake Petroules <jake.petroules@qt.io> | 2017-09-01 18:25:54 +0000 |
commit | d85aa0fa31a74d5ce102b9887634f217ff944425 (patch) | |
tree | 55fdfa1976afd4a95b62e4866d491127d8ff88bd /src/lib/corelib/generators | |
parent | 4202dfe7f4359634aeb0422da4b5f852ebf90985 (diff) |
Generator data: add some utility methods for iterating configurations
These will be used in a subsequent commit.
Change-Id: I004da66d0cb334d6de3083d63c85d153403fd56b
Reviewed-by: Joerg Bornemann <joerg.bornemann@qt.io>
Diffstat (limited to 'src/lib/corelib/generators')
-rw-r--r-- | src/lib/corelib/generators/generatordata.h | 80 |
1 files changed, 80 insertions, 0 deletions
diff --git a/src/lib/corelib/generators/generatordata.h b/src/lib/corelib/generators/generatordata.h index 0db041507..21e8a1ab4 100644 --- a/src/lib/corelib/generators/generatordata.h +++ b/src/lib/corelib/generators/generatordata.h @@ -68,6 +68,41 @@ template <typename U> struct IMultiplexableContainer { return value; } + void forEach(const std::function<void(const QString &configurationName, + const U &data)> &func) const + { + QMapIterator<QString, U> it(data); + while (it.hasNext()) { + it.next(); + func(it.key(), it.value()); + } + } + + void forEach(const std::function<void(const std::string &configurationName, + const U &data)> &func) const + { + QMapIterator<QString, U> it(data); + while (it.hasNext()) { + it.next(); + func(it.key().toStdString(), it.value()); + } + } + + const U operator[](const QString &configurationName) + { + return data[configurationName]; + } + + const U operator[](const std::string &configurationName) + { + return data[QString::fromStdString(configurationName)]; + } + + bool isValid() const + { + return !data.isEmpty(); + } + protected: IMultiplexableContainer() { } }; @@ -107,6 +142,51 @@ struct QBS_EXPORT GeneratableProject : public GeneratableProjectData { QFileInfo filePath() const; bool hasMultipleConfigurations() const; QStringList commandLine() const; + + void forEach(const std::function<void(const QString &configurationName, + const Project &data)> &func) const + { + QMapIterator<QString, Project> it(projects); + while (it.hasNext()) { + it.next(); + func(it.key(), it.value()); + } + } + + void forEach(const std::function<void(const std::string &configurationName, + const Project &data)> &func) const + { + QMapIterator<QString, Project> it(projects); + while (it.hasNext()) { + it.next(); + func(it.key().toStdString(), it.value()); + } + } + + const Project operator[](const QString &configurationName) const + { + return projects[configurationName]; + } + + const Project operator[](const std::string &configurationName) const + { + return projects[QString::fromStdString(configurationName)]; + } + + bool isValid() const + { + return !data.isEmpty() && !projects.isEmpty(); + } + + const ProjectData projectData(const QString &configurationName) const + { + return data[configurationName]; + } + + const ProjectData projectData(const std::string &configurationName) const + { + return data[QString::fromStdString(configurationName)]; + } }; } // namespace qbs |