diff options
author | Michael Gottesman <mgottesman@apple.com> | 2015-01-19 03:25:33 +0000 |
---|---|---|
committer | Michael Gottesman <mgottesman@apple.com> | 2015-01-19 03:25:33 +0000 |
commit | b93d3dbc1fc963834d51168d34a76815d2906391 (patch) | |
tree | 06da28b5c25f969e852855f08e510153f5107f76 | |
parent | 215d939adac06552b0446c0c361ae2785dfbbc9c (diff) | |
download | bcm5719-llvm-b93d3dbc1fc963834d51168d34a76815d2906391.tar.gz bcm5719-llvm-b93d3dbc1fc963834d51168d34a76815d2906391.zip |
[tinyptrvector] Add in a MutableArrayRef implicit conversion operator to complement the ArrayRef implicit conversion operator.
llvm-svn: 226428
-rw-r--r-- | llvm/include/llvm/ADT/TinyPtrVector.h | 9 | ||||
-rw-r--r-- | llvm/unittests/ADT/TinyPtrVectorTest.cpp | 21 |
2 files changed, 30 insertions, 0 deletions
diff --git a/llvm/include/llvm/ADT/TinyPtrVector.h b/llvm/include/llvm/ADT/TinyPtrVector.h index bb31540c508..f29608f3d3d 100644 --- a/llvm/include/llvm/ADT/TinyPtrVector.h +++ b/llvm/include/llvm/ADT/TinyPtrVector.h @@ -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. diff --git a/llvm/unittests/ADT/TinyPtrVectorTest.cpp b/llvm/unittests/ADT/TinyPtrVectorTest.cpp index a402e8be9df..294dfac0c63 100644 --- a/llvm/unittests/ADT/TinyPtrVectorTest.cpp +++ b/llvm/unittests/ADT/TinyPtrVectorTest.cpp @@ -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])); + } +} |