aboutsummaryrefslogtreecommitdiffstats
path: root/src/lib/corelib/generators/generatableprojectiterator.cpp
diff options
context:
space:
mode:
authorJake Petroules <jake.petroules@qt.io>2016-08-11 18:16:53 -0700
committerJake Petroules <jake.petroules@qt.io>2016-08-22 15:12:35 +0000
commit323a52542f4e1a670f838082e1d88f0fdbf155da (patch)
treefbaffc53986b182690272ccb6fa895a5afa7220d /src/lib/corelib/generators/generatableprojectiterator.cpp
parentb44df152e922cead8510ccc6f94e0c35db284012 (diff)
Flesh out generators API
This puts in place some of the infrastructure needed by subsequent commits that will introduce the Visual Studio and Xcode generators. Change-Id: Ic8f127acef5c26e26edb7083ebd423848d81a6ff Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
Diffstat (limited to 'src/lib/corelib/generators/generatableprojectiterator.cpp')
-rw-r--r--src/lib/corelib/generators/generatableprojectiterator.cpp80
1 files changed, 80 insertions, 0 deletions
diff --git a/src/lib/corelib/generators/generatableprojectiterator.cpp b/src/lib/corelib/generators/generatableprojectiterator.cpp
new file mode 100644
index 000000000..26a45f098
--- /dev/null
+++ b/src/lib/corelib/generators/generatableprojectiterator.cpp
@@ -0,0 +1,80 @@
+/****************************************************************************
+**
+** Copyright (C) 2016 The Qt Company Ltd.
+** Contact: http://www.qt.io/licensing
+**
+** This file is part of Qbs.
+**
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms and
+** conditions see http://www.qt.io/terms-conditions. For further information
+** use the contact form at http://www.qt.io/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 or version 3 as published by the Free
+** Software Foundation and appearing in the file LICENSE.LGPLv21 and
+** LICENSE.LGPLv3 included in the packaging of this file. Please review the
+** following information to ensure the GNU Lesser General Public License
+** requirements will be met: https://www.gnu.org/licenses/lgpl.html and
+** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, The Qt Company gives you certain additional
+** rights. These rights are described in The Qt Company LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+****************************************************************************/
+
+#include "generatableprojectiterator.h"
+
+namespace qbs {
+
+GeneratableProjectIterator::GeneratableProjectIterator(const GeneratableProject &project)
+ : project(project)
+{
+}
+
+void GeneratableProjectIterator::accept(IGeneratableProjectVisitor *visitor)
+{
+ visitor->visitProject(project);
+ QMapIterator<QString, qbs::Project> it(project.projects);
+ while (it.hasNext()) {
+ it.next();
+ visitor->visitProject(it.value(), it.key());
+ }
+
+ accept(project, GeneratableProjectData(), project, visitor);
+}
+
+void GeneratableProjectIterator::accept(const GeneratableProject &project,
+ const GeneratableProjectData &parentProjectData,
+ const GeneratableProjectData &projectData,
+ IGeneratableProjectVisitor *visitor)
+{
+ visitor->visitProjectData(project, parentProjectData, projectData);
+ visitor->visitProjectData(project, projectData);
+ QMapIterator<QString, qbs::ProjectData> it(projectData.data);
+ while (it.hasNext()) {
+ it.next();
+ visitor->visitProjectData(parentProjectData.data.value(it.key()), it.value(), it.key());
+ visitor->visitProjectData(it.value(), it.key());
+ }
+
+ for (const auto &subProject : projectData.subProjects) {
+ accept(project, projectData, subProject, visitor);
+ }
+
+ for (const auto &productDataMap : projectData.products) {
+ visitor->visitProduct(project, projectData, productDataMap);
+ QMapIterator<QString, qbs::ProductData> it(productDataMap.data);
+ while (it.hasNext()) {
+ it.next();
+ visitor->visitProduct(it.value(), it.key());
+ }
+ }
+}
+
+} // namespace qbs