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)
6 #ifndef BOOST_TREE_STRUCTURE_HPP
7 #define BOOST_TREE_STRUCTURE_HPP
13 typedef typename
T::node_descriptor node_descriptor
;
14 typedef typename
T::children_iterator children_iterator
;
18 template <class Tree
, class TreeVisitor
>
19 void traverse_tree(typename tree_traits
<Tree
>::node_descriptor v
,
20 Tree
& t
, TreeVisitor visitor
)
22 visitor
.preorder(v
, t
);
23 typename tree_traits
<Tree
>::children_iterator i
, end
;
24 tie(i
, end
) = children(v
, t
);
26 traverse_tree(*i
++, t
, visitor
);
27 visitor
.inorder(v
, t
);
29 traverse_tree(*i
++, t
, visitor
);
31 visitor
.inorder(v
, t
);
32 visitor
.postorder(v
, t
);
35 struct null_tree_visitor
{
36 template <typename Node
, typename Tree
> void preorder(Node
, Tree
&) { }
37 template <typename Node
, typename Tree
> void inorder(Node
, Tree
&) { }
38 template <typename Node
, typename Tree
> void postorder(Node
, Tree
&) { }
41 } /* namespace boost */
43 #endif /* BOOST_TREE_STRUCTURE_HPP */