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