12345678910111213141516171819202122232425262728293031323334353637383940414243 |
- // (C) Copyright Jeremy Siek 1999.
- // Distributed under the Boost Software License, Version 1.0. (See
- // accompanying file LICENSE_1_0.txt or copy at
- // http://www.boost.org/LICENSE_1_0.txt)
- #ifndef BOOST_TREE_STRUCTURE_HPP
- #define BOOST_TREE_STRUCTURE_HPP
- namespace boost {
- template <class T>
- struct tree_traits {
- typedef typename T::node_descriptor node_descriptor;
- typedef typename T::children_iterator children_iterator;
- };
- template <class Tree, class TreeVisitor>
- void traverse_tree(typename tree_traits<Tree>::node_descriptor v,
- Tree& t, TreeVisitor visitor)
- {
- visitor.preorder(v, t);
- typename tree_traits<Tree>::children_iterator i, end;
- boost::tie(i, end) = children(v, t);
- if (i != end) {
- traverse_tree(*i++, t, visitor);
- visitor.inorder(v, t);
- while (i != end)
- traverse_tree(*i++, t, visitor);
- } else
- visitor.inorder(v, t);
- visitor.postorder(v, t);
- }
- struct null_tree_visitor {
- template <typename Node, typename Tree> void preorder(Node, Tree&) { }
- template <typename Node, typename Tree> void inorder(Node, Tree&) { }
- template <typename Node, typename Tree> void postorder(Node, Tree&) { }
- };
- } /* namespace boost */
- #endif /* BOOST_TREE_STRUCTURE_HPP */
|