diff options
| author | Christian Kandeler <christian.kandeler@digia.com> | 2012-11-12 13:40:26 +0100 |
|---|---|---|
| committer | Joerg Bornemann <joerg.bornemann@digia.com> | 2012-11-12 15:17:07 +0100 |
| commit | ba0a7d211c10528665b651b24d5c83c31032059e (patch) | |
| tree | a2461bffbefd75cbd89bf382cb6eb6063eb105cd /src/lib/buildgraph/cycledetector.h | |
| parent | 40b8f64e4e72d8d6a651b485205cceb56705c22c (diff) | |
| download | qbs-ba0a7d211c10528665b651b24d5c83c31032059e.tar.gz | |
Move cycle detection into its own class.
It has the characteristics of a visitor, so let's make
it one.
Also introduce test case.
Change-Id: Ibfe14ca71268f73afe5e524fa1a15b3ab67058f1
Reviewed-by: Joerg Bornemann <joerg.bornemann@digia.com>
Diffstat (limited to 'src/lib/buildgraph/cycledetector.h')
| -rw-r--r-- | src/lib/buildgraph/cycledetector.h | 60 |
1 files changed, 60 insertions, 0 deletions
diff --git a/src/lib/buildgraph/cycledetector.h b/src/lib/buildgraph/cycledetector.h new file mode 100644 index 000000000..ff5023fb8 --- /dev/null +++ b/src/lib/buildgraph/cycledetector.h @@ -0,0 +1,60 @@ +/**************************************************************************** +** +** Copyright (C) 2012 Digia Plc and/or its subsidiary(-ies). +** Contact: http://www.qt-project.org/legal +** +** This file is part of the Qt Build Suite. +** +** 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 Digia. For licensing terms and +** conditions see http://qt.digia.com/licensing. For further information +** use the contact form at http://qt.digia.com/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 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Digia gives you certain additional +** rights. These rights are described in the Digia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +****************************************************************************/ +#ifndef CYCLEDETECTOR_H +#define CYCLEDETECTOR_H + +#include "artifactvisitor.h" + +#include <QSet> + +namespace qbs { +namespace Internal { + +class CycleDetector : public ArtifactVisitor +{ +public: + CycleDetector(); + + void visitProject(const BuildProject::ConstPtr &project); + void visitArtifact(Artifact *artifact); + +private: + void doVisit(Artifact *artifact); + + QList<Artifact *> cycle(Artifact *doubleEntry); + + QSet<Artifact *> m_allArtifacts; + QSet<Artifact *> m_artifactsInCurrentPath; + Artifact *m_parent; +}; + +} // namespace Internal +} // namespace qbs + +#endif // CYCLEDETECTOR_H |
