LLVM: include/llvm/ADT/TinyPtrVector.h Source File (original) (raw)
1
2
3
4
5
6
7
8
9#ifndef LLVM_ADT_TINYPTRVECTOR_H
10#define LLVM_ADT_TINYPTRVECTOR_H
11
15#include
16#include
17#include
18
19namespace llvm {
20
21
22
23
24
25
26
27template
29public:
32
33
34
35
37
38private:
40
41public:
43
48
51 Val = new VecTy(*V);
52 }
53
55 if (this == &RHS)
56 return *this;
57 if (RHS.empty()) {
59 return *this;
60 }
61
62
63
65 if (RHS.size() == 1)
66 Val = RHS.front();
67 else
69 return *this;
70 }
71
72
76 } else {
78 }
79 return *this;
80 }
81
83 RHS.Val = (EltTy)nullptr;
84 }
85
87 if (this == &RHS)
88 return *this;
89 if (RHS.empty()) {
91 return *this;
92 }
93
94
95
96
99 V->clear();
100 V->push_back(RHS.front());
101 RHS.Val = EltTy();
102 return *this;
103 }
104 delete V;
105 }
106
107 Val = RHS.Val;
108 RHS.Val = EltTy();
109 return *this;
110 }
111
117
118
119
120
121
123 : Val(Elts.empty()
125 : Elts.size() == 1
128
133
135
136
138 return Val.isNull();
140 }
141
144 return Val.isNull() ? 0 : 1;
146 }
147
152
155 return Val.getAddrOfPtr1();
156
158 }
159
162 return begin() + (Val.isNull() ? 0 : 1);
163
165 }
166
170
174
177
181
185
187 const EltTy *data() const { return begin(); }
188
190 assert(!Val.isNull() && "can't index into an empty vector");
192 assert(i == 0 && "tinyvector index out of range");
194 }
195
198 }
199
206
213
215
216 if (Val.isNull()) {
217 Val = NewVal;
218 assert(!Val.isNull() && "Can't add a null value");
219 return;
220 }
221
222
225 Val = new VecTy({V, NewVal});
226 return;
227 }
228
229
231 }
232
234
236 Val = EltTy();
237 else
239 }
240
242
244 Val = EltTy();
245 } else {
246
248 }
249 }
250
252 assert(I >= begin() && "Iterator to erase is out of bounds.");
253 assert(I < end() && "Erasing at past-the-end iterator.");
254
255
258 Val = EltTy();
259 } else {
260
261
263 }
264 return end();
265 }
266
268 assert(S >= begin() && "Range to erase is out of bounds.");
269 assert(S <= E && "Trying to erase invalid range.");
270 assert(E <= end() && "Trying to erase past the end.");
271
273 if (S == begin() && S != E)
274 Val = EltTy();
275 } else {
277 }
278 return end();
279 }
280
282 assert(I >= this->begin() && "Insertion iterator is out of bounds.");
284 if (I == end()) {
286 return std::prev(end());
287 }
288 assert(!Val.isNull() && "Null value with non-end insert iterator.");
292 Val = Elt;
295 }
296
298 }
299
300 template
302 assert(I >= this->begin() && "Insertion iterator is out of bounds.");
304 if (From == To)
305 return I;
306
307
309 if (Val.isNull()) {
310 if (std::next(From) == To) {
311 Val = *From;
313 }
314
315 Val = new VecTy();
318 Val = new VecTy();
320 }
322 }
323};
324
325}
326
327#endif
assert(UImm &&(UImm !=~static_cast< T >(0)) &&"Invalid immediate!")
static GCRegistry::Add< CoreCLRGC > E("coreclr", "CoreCLR-compatible GC")
This file defines the PointerUnion class, which is a discriminated union of pointer types.
This file defines the SmallVector class.
ArrayRef - Represent a constant reference to an array (0 or more elements consecutively in memory),...
A discriminated union of two or more pointer types, with the discriminator in the low bit of the poin...
This is a 'vector' (really, a variable-sized array), optimized for the case when the array is small.
reverse_iterator rbegin()
Definition TinyPtrVector.h:175
iterator begin()
Definition TinyPtrVector.h:153
const EltTy * const_iterator
Definition TinyPtrVector.h:149
TinyPtrVector(std::initializer_list< EltTy > IL)
Definition TinyPtrVector.h:112
void push_back(EltTy NewVal)
Definition TinyPtrVector.h:214
TinyPtrVector & operator=(TinyPtrVector &&RHS)
Definition TinyPtrVector.h:86
reverse_iterator rend()
Definition TinyPtrVector.h:176
std::reverse_iterator< const_iterator > const_reverse_iterator
Definition TinyPtrVector.h:151
const_reverse_iterator rbegin() const
Definition TinyPtrVector.h:178
TinyPtrVector(ArrayRef< EltTy > Elts)
Constructor from an ArrayRef.
Definition TinyPtrVector.h:122
std::reverse_iterator< iterator > reverse_iterator
Definition TinyPtrVector.h:150
EltTy front() const
Definition TinyPtrVector.h:200
const_iterator begin() const
Definition TinyPtrVector.h:167
iterator erase(iterator I)
Definition TinyPtrVector.h:251
TinyPtrVector & operator=(const TinyPtrVector &RHS)
Definition TinyPtrVector.h:54
TinyPtrVector(const TinyPtrVector &RHS)
Definition TinyPtrVector.h:49
const_reverse_iterator rend() const
Definition TinyPtrVector.h:182
const EltTy * data() const
Definition TinyPtrVector.h:187
const_iterator end() const
Definition TinyPtrVector.h:171
~TinyPtrVector()
Definition TinyPtrVector.h:44
bool empty() const
Definition TinyPtrVector.h:134
iterator end()
Definition TinyPtrVector.h:160
void pop_back()
Definition TinyPtrVector.h:233
unsigned size() const
Definition TinyPtrVector.h:142
EltTy * iterator
Definition TinyPtrVector.h:148
PointerUnion< EltTy, VecTy * > PtrUnion
Definition TinyPtrVector.h:36
EltTy * data()
Definition TinyPtrVector.h:186
iterator insert(iterator I, const EltTy &Elt)
Definition TinyPtrVector.h:281
iterator erase(iterator S, iterator E)
Definition TinyPtrVector.h:267
void clear()
Definition TinyPtrVector.h:241
SmallVector< EltTy, 4 > VecTy
Definition TinyPtrVector.h:30
EltTy back() const
Definition TinyPtrVector.h:207
typename VecTy::value_type value_type
Definition TinyPtrVector.h:31
TinyPtrVector(TinyPtrVector &&RHS)
Definition TinyPtrVector.h:82
iterator insert(iterator I, ItTy From, ItTy To)
Definition TinyPtrVector.h:301
EltTy operator[](unsigned i) const
Definition TinyPtrVector.h:189
TinyPtrVector(size_t Count, EltTy Value)
Definition TinyPtrVector.h:129
LLVM Value Representation.
This is an optimization pass for GlobalISel generic memory operations.
auto dyn_cast_if_present(const Y &Val)
dyn_cast_if_present - Functionally identical to dyn_cast, except that a null (or none in the case ...
FunctionAddr VTableAddr Count
bool isa(const From &Val)
isa - Return true if the parameter to the template is an instance of one of the template type argu...
decltype(auto) cast(const From &Val)
cast - Return the argument parameter cast to the specified type.