LLVM: include/llvm/ADT/EnumeratedArray.h Source File (original) (raw)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15#ifndef LLVM_ADT_ENUMERATEDARRAY_H
16#define LLVM_ADT_ENUMERATEDARRAY_H
17
19#include
20#include
21
22namespace llvm {
23
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>;
30 ArrayTy Underlying;
31
32public:
33 using iterator = typename ArrayTy::iterator;
37
43
50
52 auto IX = static_cast<IndexType>(Index);
53 assert(IX >= 0 && IX < Size && "Index is out of bounds.");
54 return Underlying[IX];
55 }
60 IndexType size() const { return Size; }
61 bool empty() const { return size() == 0; }
62
67
72};
73
74}
75
76#endif
assert(UImm &&(UImm !=~static_cast< T >(0)) &&"Invalid immediate!")
bool empty() const
Definition EnumeratedArray.h:61
EnumeratedArray(std::initializer_list< ValueType > Init)
Definition EnumeratedArray.h:46
typename ArrayTy::const_iterator const_iterator
Definition EnumeratedArray.h:34
const_iterator begin() const
Definition EnumeratedArray.h:64
const ValueType * const_pointer
Definition EnumeratedArray.h:42
const_reverse_iterator rbegin() const
Definition EnumeratedArray.h:69
const ValueType & const_reference
Definition EnumeratedArray.h:40
ValueType value_type
Definition EnumeratedArray.h:38
typename ArrayTy::const_reverse_iterator const_reverse_iterator
Definition EnumeratedArray.h:36
EnumeratedArray()=default
EnumeratedArray(ValueType V)
Definition EnumeratedArray.h:45
const ValueType & operator[](Enumeration Index) const
Definition EnumeratedArray.h:51
const_iterator end() const
Definition EnumeratedArray.h:66
ValueType & operator[](Enumeration Index)
Definition EnumeratedArray.h:56
reverse_iterator rend()
Definition EnumeratedArray.h:70
iterator begin()
Definition EnumeratedArray.h:63
ValueType * pointer
Definition EnumeratedArray.h:41
typename ArrayTy::iterator iterator
Definition EnumeratedArray.h:33
const_reverse_iterator rend() const
Definition EnumeratedArray.h:71
ValueType & reference
Definition EnumeratedArray.h:39
IndexType size() const
Definition EnumeratedArray.h:60
iterator end()
Definition EnumeratedArray.h:65
reverse_iterator rbegin()
Definition EnumeratedArray.h:68
typename ArrayTy::reverse_iterator reverse_iterator
Definition EnumeratedArray.h:35
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