summaryrefslogtreecommitdiffstats
path: root/src/3rdparty/phonon/mmf/objecttree.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/3rdparty/phonon/mmf/objecttree.h')
-rw-r--r--src/3rdparty/phonon/mmf/objecttree.h117
1 files changed, 117 insertions, 0 deletions
diff --git a/src/3rdparty/phonon/mmf/objecttree.h b/src/3rdparty/phonon/mmf/objecttree.h
new file mode 100644
index 0000000..98bdf14
--- /dev/null
+++ b/src/3rdparty/phonon/mmf/objecttree.h
@@ -0,0 +1,117 @@
+/* This file is part of the KDE project.
+
+Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+
+This library is free software: you can redistribute it and/or modify
+it under the terms of the GNU Lesser General Public License as published by
+the Free Software Foundation, either version 2.1 or 3 of the License.
+
+This library is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public License
+along with this library. If not, see <http://www.gnu.org/licenses/>.
+
+*/
+
+#ifndef OBJECTTREE_H
+#define OBJECTTREE_H
+
+#include "objectdump_global.h"
+
+#include <QObject>
+#include <QStack>
+
+QT_BEGIN_NAMESPACE
+
+namespace ObjectTree
+{
+
+/**
+ * Depth-first iterator for QObject tree
+ */
+class OBJECTDUMP_EXPORT DepthFirstConstIterator
+{
+public:
+ DepthFirstConstIterator();
+ DepthFirstConstIterator(const QObject& root);
+
+ DepthFirstConstIterator& operator++();
+
+ inline bool operator==(const DepthFirstConstIterator& other) const
+ { return other.m_pointee == m_pointee; }
+
+ inline bool operator!=(const DepthFirstConstIterator& other) const
+ { return other.m_pointee != m_pointee; }
+
+ inline const QObject* operator->() const { return m_pointee; }
+ inline const QObject& operator*() const { return *m_pointee; }
+
+private:
+ void backtrack();
+
+private:
+ const QObject* m_pointee;
+ QStack<int> m_history;
+};
+
+/**
+ * Ancestor iterator for QObject tree
+ */
+class OBJECTDUMP_EXPORT AncestorConstIterator
+{
+public:
+ AncestorConstIterator();
+ AncestorConstIterator(const QObject& root);
+
+ inline AncestorConstIterator& operator++()
+ { m_ancestors.pop(); return *this; }
+
+ inline bool operator==(const AncestorConstIterator& other) const
+ { return other.m_ancestors == m_ancestors; }
+
+ inline bool operator!=(const AncestorConstIterator& other) const
+ { return other.m_ancestors != m_ancestors; }
+
+ inline const QObject* operator->() const { return m_ancestors.top(); }
+ inline const QObject& operator*() const { return *m_ancestors.top(); }
+
+private:
+ QStack<const QObject*> m_ancestors;
+
+};
+
+/**
+ * Generic algorithm for visiting nodes in an object tree. Nodes in the
+ * tree are visited in a const context, therefore they are not modified
+ * by this algorithm.
+ *
+ * Visitor must provide functions with the following signatures:
+ *
+ * Called before visit begins
+ * void visitPrepare()
+ *
+ * Called on each node visited
+ * void visitNode(const QObject& object)
+ *
+ * Called when visit is complete
+ * void visitComplete()
+ */
+template <class Iterator, class Visitor>
+void visit(Iterator begin, Iterator end, Visitor& visitor)
+{
+ visitor.visitPrepare();
+
+ for ( ; begin != end; ++begin)
+ visitor.visitNode(*begin);
+
+ visitor.visitComplete();
+}
+
+} // namespace ObjectTree
+
+QT_END_NAMESPACE
+
+#endif // OBJECTTREE_H