14#ifndef LLVM_ADT_REPEATED_H
15#define LLVM_ADT_REPEATED_H
29 std::random_access_iterator_tag, T, ptrdiff_t,
30 const T *, const T &> {
31 const T *value =
nullptr;
37 : value(value), index(index) {}
42 assert((!value || !rhs.value || value == rhs.value) &&
43 "comparing iterators from different Repeated ranges");
44 return index == rhs.index;
48 assert((!value || !rhs.value || value == rhs.value) &&
49 "comparing iterators from different Repeated ranges");
50 return index < rhs.index;
54 assert((!value || !rhs.value || value == rhs.value) &&
55 "subtracting iterators from different Repeated ranges");
56 return index - rhs.index;
75template <
typename T>
struct [[nodiscard]]
Repeated {
assert(UImm &&(UImm !=~static_cast< T >(0)) &&"Invalid immediate!")
A random-access iterator that always dereferences to the same value.
RepeatedIterator & operator-=(ptrdiff_t n)
RepeatedIterator & operator+=(ptrdiff_t n)
ptrdiff_t operator-(const RepeatedIterator &rhs) const
bool operator<(const RepeatedIterator &rhs) const
RepeatedIterator()=default
const T & operator*() const
bool operator==(const RepeatedIterator &rhs) const
RepeatedIterator(const T *value, ptrdiff_t index)
CRTP base class which implements the entire standard iterator facade in terms of a minimal subset of ...
This is an optimization pass for GlobalISel generic memory operations.
Repeated(size_t, U &&) -> Repeated< std::decay_t< U > >
Implement std::hash so that hash_code can be used in STL containers.
Wrapper for the stored value used as a PointerUnion target in range types (e.g., TypeRange,...
A memory-efficient immutable range with a single value repeated N times.
reverse_iterator const_reverse_iterator
reverse_iterator rend() const
RepeatedIterator< T > iterator
std::reverse_iterator< iterator > reverse_iterator
Repeated(size_t count, U &&value)
Create a value repeated count times.
const T & operator[](size_t idx) const
reverse_iterator rbegin() const