コード例 #1
0
    void AST_t::tree_iterator(const AST_t& a, const TraverseASTFunctor& functor, 
            ObjectList<AST_t>& result)
    {
        AST tree = a._ast;
        if (tree == NULL)
            return;

        ASTTraversalResult current_node = functor(a);
        if (current_node.matches())
        {
            result.push_back(a);
        }

        if (current_node.recurse())
        {
            for (int i = 0; i < ASTNumChildren(tree); i++)
            {
                if (ASTChild(tree, i) != NULL)
                {
                    AST_t iterate(ASTChild(tree, i));
                    tree_iterator(iterate, functor, result);
                }
            }
        }
    }
コード例 #2
0
    ObjectList<AST_t> AST_t::depth_subtrees(const TraverseASTFunctor& functor) const
    {
        ObjectList<AST_t> result;

        tree_iterator(*this, functor, result);

        return result;
    }
コード例 #3
0
    ObjectList<AST_t> AST_t::depth_subtrees(const Predicate<AST_t>& pred, RecursiveFlag recursive_flag) const
    {
        ObjectList<AST_t> result;

        // Construct a functor that emulates old behaviour
        TraverseASTPredicate compat_functor(pred, recursive_flag);

        tree_iterator(*this, compat_functor, result);

        return result;
    }
コード例 #4
0
ファイル: tree_iterator.hpp プロジェクト: boostorg/intrusive
 tree_iterator end_iterator_from_it() const
 {
    return tree_iterator(node_algorithms::get_header(this->pointed_node()), this->get_value_traits());
 }