10 #ifndef LLVM_ADT_ILIST_ITERATOR_H
11 #define LLVM_ADT_ILIST_ITERATOR_H
17 #include <type_traits>
21 namespace ilist_detail {
27 typedef typename OptionsT::pointer
pointer;
34 typedef typename OptionsT::const_pointer
pointer;
35 typedef typename OptionsT::const_reference
reference;
43 template <
class T>
static void increment(
T *&
I) { I = Access::getNext(*I); }
44 template <
class T>
static void decrement(
T *&
I) { I = Access::getPrev(*I); }
48 template <
class T>
static void increment(
T *&
I) { I = Access::getPrev(*I); }
49 template <
class T>
static void decrement(
T *&
I) { I = Access::getNext(*I); }
55 template <
class OptionsT,
bool IsReverse,
bool IsConst>
75 typedef typename Traits::node_pointer node_pointer;
76 typedef typename Traits::node_reference node_reference;
90 template <
bool RHSIsConst>
93 typename std::enable_if<IsConst || !RHSIsConst, void *>::type =
nullptr)
94 : NodePtr(RHS.NodePtr) {}
98 template <
bool RHSIsConst>
99 typename std::enable_if<IsConst || !RHSIsConst, ilist_iterator &>::type
101 NodePtr = RHS.NodePtr;
133 false>::node_reference>(*NodePtr));
139 assert(!NodePtr->isKnownSentinel());
146 return LHS.NodePtr == RHS.NodePtr;
149 return LHS.NodePtr != RHS.NodePtr;
154 NodePtr = IsReverse ? NodePtr->getNext() : NodePtr->getPrev();
158 NodePtr = IsReverse ? NodePtr->getPrev() : NodePtr->getNext();
173 node_pointer
getNodePtr()
const {
return static_cast<node_pointer
>(NodePtr); }
176 bool isEnd()
const {
return NodePtr ? NodePtr->isSentinel() :
false; }
185 template <
class OptionsT,
bool IsConst>
192 template <
class OptionsT,
bool IsConst>
194 :
simplify_type<ilist_iterator<OptionsT, false, IsConst>> {};
198 #endif // LLVM_ADT_ILIST_ITERATOR_H
ilist_detail::NodeAccess Access
OptionsT::const_pointer pointer
OptionsT::pointer pointer
ilist_iterator(const ilist_iterator< OptionsT, IsReverse, RHSIsConst > &RHS, typename std::enable_if< IsConst||!RHSIsConst, void * >::type=nullptr)
ilist_iterator(node_reference N)
Create from an ilist_node.
OptionsT::value_type value_type
node_pointer getNodePtr() const
Get the underlying ilist_node.
ilist_iterator< OptionsT,!IsReverse, IsConst > getReverse() const
Get a reverse iterator to the same node.
bool isEnd() const
Check for end. Only valid if ilist_sentinel_tracking<true>.
ilist_node_impl< OptionsT > & node_reference
ilist_node_impl< OptionsT > * node_pointer
OptionsT::const_reference reference
static void decrement(T *&I)
static pointer getValuePtr(node_type *N)
ilist_iterator< OptionsT, IsReverse, false > getNonConst() const
Const-cast.
Implementation for an ilist node.
iterator::pointer SimpleType
const ilist_node_impl< OptionsT > * node_pointer
pointer operator->() const
ilist_iterator(reference NR)
Function Alias Analysis false
ilist_detail::NodeAccess Access
friend bool operator==(const ilist_iterator &LHS, const ilist_iterator &RHS)
std::enable_if< IsConst||!RHSIsConst, ilist_iterator & >::type operator=(const ilist_iterator< OptionsT, IsReverse, RHSIsConst > &RHS)
OptionsT::reference reference
OptionsT::const_pointer const_pointer
static SimpleType getSimplifiedValue(const iterator &Node)
static void increment(T *&I)
const ilist_node_impl< OptionsT > & node_reference
ilist_iterator operator++(int)
ilist_iterator(pointer NP)
Find const-correct node types.
An access class for ilist_node private API.
reference operator*() const
Iterator for intrusive lists based on ilist_node.
OptionsT::const_reference const_reference
Traits::value_type value_type
friend bool operator!=(const ilist_iterator &LHS, const ilist_iterator &RHS)
ilist_iterator & operator++()
const OptionsT::value_type value_type
ptrdiff_t difference_type
ilist_iterator(const ilist_iterator< OptionsT,!IsReverse, IsConst > &RHS)
Explicit conversion between forward/reverse iterators.
ilist_iterator operator--(int)
ilist_iterator & operator--()
Traits::reference reference
std::bidirectional_iterator_tag iterator_category
assert(ImpDefSCC.getReg()==AMDGPU::SCC &&ImpDefSCC.isDef())
ilist_iterator< OptionsT, false, IsConst > iterator
static void decrement(T *&I)
static void increment(T *&I)