forked from OSchip/llvm-project
[tinyptrvector] Add in a MutableArrayRef implicit conversion operator to complement the ArrayRef implicit conversion operator.
llvm-svn: 226428
This commit is contained in:
parent
215d939ada
commit
b93d3dbc1f
|
@ -116,6 +116,15 @@ public:
|
|||
return *Val.template get<VecTy*>();
|
||||
}
|
||||
|
||||
// implicit conversion operator to MutableArrayRef.
|
||||
operator MutableArrayRef<EltTy>() {
|
||||
if (Val.isNull())
|
||||
return None;
|
||||
if (Val.template is<EltTy>())
|
||||
return *Val.getAddrOfPtr1();
|
||||
return *Val.template get<VecTy*>();
|
||||
}
|
||||
|
||||
bool empty() const {
|
||||
// This vector can be empty if it contains no element, or if it
|
||||
// contains a pointer to an empty vector.
|
||||
|
|
|
@ -438,3 +438,24 @@ TEST(TinyPtrVectorTest, ArrayRefCtorTest) {
|
|||
EXPECT_TRUE(V[i] == data[i]);
|
||||
}
|
||||
}
|
||||
|
||||
TEST(TinyPtrVectorTest, MutableArrayRefTest) {
|
||||
int data_array[128];
|
||||
std::vector<int *> data;
|
||||
|
||||
for (unsigned i = 0, e = 128; i != e; ++i) {
|
||||
data_array[i] = 324 - int(i);
|
||||
data.push_back(&data_array[i]);
|
||||
}
|
||||
|
||||
TinyPtrVector<int *> V(data);
|
||||
EXPECT_TRUE(V.size() == 128);
|
||||
EXPECT_FALSE(V.empty());
|
||||
|
||||
MutableArrayRef<int *> mut_array = V;
|
||||
for (unsigned i = 0, e = 128; i != e; ++i) {
|
||||
EXPECT_TRUE(mut_array[i] == data[i]);
|
||||
mut_array[i] = 324 + mut_array[i];
|
||||
EXPECT_TRUE(mut_array[i] == (324 + data[i]));
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue