15#ifndef LLVM_ADT_ENUMERATEDARRAY_H
16#define LLVM_ADT_ENUMERATEDARRAY_H
24template <
typename ValueType,
typename Enumeration,
25 Enumeration LargestEnum = Enumeration::Last,
typename IndexType = int,
26 IndexType
Size = 1 +
static_cast<IndexType
>(LargestEnum)>
28 static_assert(
Size > 0);
29 using ArrayTy = std::array<ValueType, Size>;
52 auto IX =
static_cast<IndexType
>(Index);
53 assert(IX >= 0 && IX <
Size &&
"Index is out of bounds.");
54 return Underlying[IX];
assert(UImm &&(UImm !=~static_cast< T >(0)) &&"Invalid immediate!")
EnumeratedArray(std::initializer_list< ValueType > Init)
typename ArrayTy::const_iterator const_iterator
const_iterator begin() const
const ValueType * const_pointer
const_reverse_iterator rbegin() const
const ValueType & const_reference
typename ArrayTy::const_reverse_iterator const_reverse_iterator
EnumeratedArray()=default
EnumeratedArray(ValueType V)
const ValueType & operator[](Enumeration Index) const
const_iterator end() const
ValueType & operator[](Enumeration Index)
typename ArrayTy::iterator iterator
const_reverse_iterator rend() const
reverse_iterator rbegin()
typename ArrayTy::reverse_iterator reverse_iterator
reverse_iterator rbegin()
This is an optimization pass for GlobalISel generic memory operations.
auto size(R &&Range, std::enable_if_t< std::is_base_of< std::random_access_iterator_tag, typename std::iterator_traits< decltype(Range.begin())>::iterator_category >::value, void > *=nullptr)
Get the size of a range.
OutputIt copy(R &&Range, OutputIt Out)
PointerUnion< const Value *, const PseudoSourceValue * > ValueType