LLVM 23.0.0git
llvm::PostOrderTraversalBase< DerivedT, GraphTraits > Class Template Reference

CRTP base class for post-order traversal. More...

#include "llvm/ADT/PostOrderIterator.h"

Inheritance diagram for llvm::PostOrderTraversalBase< DerivedT, GraphTraits >:
[legend]

Classes

class  iterator

Public Member Functions

iterator begin ()
iterator end ()
bool insertEdge (std::optional< NodeRef > From, NodeRef To)
 Add edge and return whether To should be visited.
void finishPostorder (NodeRef)
 Callback just before the iterator moves to the next block.

Protected Member Functions

 PostOrderTraversalBase ()=default
DerivedT * derived ()
void init (NodeRef Start)
 Initialize post-order traversal at given start node.

Detailed Description

template<typename DerivedT, typename GraphTraits>
class llvm::PostOrderTraversalBase< DerivedT, GraphTraits >

CRTP base class for post-order traversal.

Storage for visited nodes must be provided by the sub-class, which must implement insertEdge(). Due to CRTP limitations, the sub-class must call init() with the start node before traversing; not calling init results in an empty iterator.

Sub-classes can observe the post-order traversal with finishPostorder(), which is called before the iterator moves to the next node, and also the pre-order traversal with insertEdge().

Unwanted graph nodes (e.g. from a previous traversal) can be skipped by returning false from insertEdge().

This class only supports a single traversal of the graph.

Definition at line 71 of file PostOrderIterator.h.

Constructor & Destructor Documentation

◆ PostOrderTraversalBase()

template<typename DerivedT, typename GraphTraits>
llvm::PostOrderTraversalBase< DerivedT, GraphTraits >::PostOrderTraversalBase ( )
protecteddefault

Member Function Documentation

◆ begin()

template<typename DerivedT, typename GraphTraits>
iterator llvm::PostOrderTraversalBase< DerivedT, GraphTraits >::begin ( )
inline

Definition at line 168 of file PostOrderIterator.h.

References derived().

Referenced by llvm::LoopBlocksTraversal::begin().

◆ derived()

template<typename DerivedT, typename GraphTraits>
DerivedT * llvm::PostOrderTraversalBase< DerivedT, GraphTraits >::derived ( )
inlineprotected

Definition at line 133 of file PostOrderIterator.h.

Referenced by begin(), and init().

◆ end()

template<typename DerivedT, typename GraphTraits>
iterator llvm::PostOrderTraversalBase< DerivedT, GraphTraits >::end ( )
inline

Definition at line 173 of file PostOrderIterator.h.

Referenced by llvm::LoopBlocksTraversal::end().

◆ finishPostorder()

template<typename DerivedT, typename GraphTraits>
void llvm::PostOrderTraversalBase< DerivedT, GraphTraits >::finishPostorder ( NodeRef )
inline

Callback just before the iterator moves to the next block.

Definition at line 182 of file PostOrderIterator.h.

◆ init()

template<typename DerivedT, typename GraphTraits>
void llvm::PostOrderTraversalBase< DerivedT, GraphTraits >::init ( NodeRef Start)
inlineprotected

Initialize post-order traversal at given start node.

Definition at line 136 of file PostOrderIterator.h.

References derived(), insertEdge(), and llvm::make_range().

Referenced by llvm::PostOrderTraversal< GraphT, SetType >::PostOrderTraversal().

◆ insertEdge()

template<typename DerivedT, typename GraphTraits>
bool llvm::PostOrderTraversalBase< DerivedT, GraphTraits >::insertEdge ( std::optional< NodeRef > From,
NodeRef To )

Add edge and return whether To should be visited.

From is nullopt for the root node.

Referenced by init().


The documentation for this class was generated from the following file: