]> git.proxmox.com Git - ceph.git/blob - ceph/src/boost/libs/graph/include/boost/graph/tree_traits.hpp
add subtree-ish sources for 12.0.3
[ceph.git] / ceph / src / boost / libs / graph / include / boost / graph / tree_traits.hpp
1 // (C) Copyright Jeremy Siek 1999.
2 // Distributed under the Boost Software License, Version 1.0. (See
3 // accompanying file LICENSE_1_0.txt or copy at
4 // http://www.boost.org/LICENSE_1_0.txt)
5
6 #ifndef BOOST_TREE_STRUCTURE_HPP
7 #define BOOST_TREE_STRUCTURE_HPP
8
9 #include <boost/tuple/tuple.hpp> //For boost::tie()
10
11 namespace boost {
12
13 template <class T>
14 struct tree_traits {
15 typedef typename T::node_descriptor node_descriptor;
16 typedef typename T::children_iterator children_iterator;
17 };
18
19
20 template <class Tree, class TreeVisitor>
21 void traverse_tree(typename tree_traits<Tree>::node_descriptor v,
22 Tree& t, TreeVisitor visitor)
23 {
24 visitor.preorder(v, t);
25 typename tree_traits<Tree>::children_iterator i, end;
26 boost::tie(i, end) = children(v, t);
27 if (i != end) {
28 traverse_tree(*i++, t, visitor);
29 visitor.inorder(v, t);
30 while (i != end)
31 traverse_tree(*i++, t, visitor);
32 } else
33 visitor.inorder(v, t);
34 visitor.postorder(v, t);
35 }
36
37 struct null_tree_visitor {
38 template <typename Node, typename Tree> void preorder(Node, Tree&) { }
39 template <typename Node, typename Tree> void inorder(Node, Tree&) { }
40 template <typename Node, typename Tree> void postorder(Node, Tree&) { }
41 };
42
43 } /* namespace boost */
44
45 #endif /* BOOST_TREE_STRUCTURE_HPP */