aboutsummaryrefslogtreecommitdiff
path: root/llvm/include/llvm/ADT/PostOrderIterator.h
diff options
context:
space:
mode:
Diffstat (limited to 'llvm/include/llvm/ADT/PostOrderIterator.h')
-rw-r--r--llvm/include/llvm/ADT/PostOrderIterator.h32
1 files changed, 17 insertions, 15 deletions
diff --git a/llvm/include/llvm/ADT/PostOrderIterator.h b/llvm/include/llvm/ADT/PostOrderIterator.h
index bb413a956d9f..74314d39d825 100644
--- a/llvm/include/llvm/ADT/PostOrderIterator.h
+++ b/llvm/include/llvm/ADT/PostOrderIterator.h
@@ -90,13 +90,17 @@ public:
};
template <class GraphT,
- class SetType =
- SmallPtrSet<typename GraphTraits<GraphT>::NodeRef, 8>,
+ class SetType = SmallPtrSet<typename GraphTraits<GraphT>::NodeRef, 8>,
bool ExtStorage = false, class GT = GraphTraits<GraphT>>
-class po_iterator
- : public std::iterator<std::forward_iterator_tag, typename GT::NodeRef>,
- public po_iterator_storage<SetType, ExtStorage> {
- using super = std::iterator<std::forward_iterator_tag, typename GT::NodeRef>;
+class po_iterator : public po_iterator_storage<SetType, ExtStorage> {
+public:
+ using iterator_category = std::forward_iterator_tag;
+ using value_type = typename GT::NodeRef;
+ using difference_type = std::ptrdiff_t;
+ using pointer = value_type *;
+ using reference = value_type &;
+
+private:
using NodeRef = typename GT::NodeRef;
using ChildItTy = typename GT::ChildIteratorType;
@@ -135,18 +139,16 @@ class po_iterator
}
public:
- using pointer = typename super::pointer;
-
// Provide static "constructors"...
- static po_iterator begin(GraphT G) {
+ static po_iterator begin(const GraphT &G) {
return po_iterator(GT::getEntryNode(G));
}
- static po_iterator end(GraphT G) { return po_iterator(); }
+ static po_iterator end(const GraphT &G) { return po_iterator(); }
- static po_iterator begin(GraphT G, SetType &S) {
+ static po_iterator begin(const GraphT &G, SetType &S) {
return po_iterator(GT::getEntryNode(G), S);
}
- static po_iterator end(GraphT G, SetType &S) { return po_iterator(S); }
+ static po_iterator end(const GraphT &G, SetType &S) { return po_iterator(S); }
bool operator==(const po_iterator &x) const {
return VisitStack == x.VisitStack;
@@ -290,15 +292,15 @@ class ReversePostOrderTraversal {
std::vector<NodeRef> Blocks; // Block list in normal PO order
- void Initialize(NodeRef BB) {
- std::copy(po_begin(BB), po_end(BB), std::back_inserter(Blocks));
+ void Initialize(const GraphT &G) {
+ std::copy(po_begin(G), po_end(G), std::back_inserter(Blocks));
}
public:
using rpo_iterator = typename std::vector<NodeRef>::reverse_iterator;
using const_rpo_iterator = typename std::vector<NodeRef>::const_reverse_iterator;
- ReversePostOrderTraversal(GraphT G) { Initialize(GT::getEntryNode(G)); }
+ ReversePostOrderTraversal(const GraphT &G) { Initialize(G); }
// Because we want a reverse post order, use reverse iterators from the vector
rpo_iterator begin() { return Blocks.rbegin(); }